Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Вытащить описание с Youtube

Ответить
Настройки темы
PowerShell - [решено] Вытащить описание с Youtube

Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6483
Благодарности: 1462


Конфигурация

Профиль | Отправить PM | Цитировать


Привет!
Собственно, сабж. Есть ролик, под ним описание. Как Invoke-WebRequest или PowerHTML может вытащить этот текст с сайта?

И главный вопрос - как можно научиться, в каком направлении искать? Тот же Invoke-WebRequest выдаёт 100500 методов:
Код: Выделить весь код
$url = Invoke-WebRequest https://www.youtube.com/watch?v=HZTStHzWRxM
$url.parsedhtml
Положим, я в Файрфоксе нашёл нужный кусок:
Код: Выделить весь код
<div id="description" slot="content" class="style-scope ytd-video-secondary-info-renderer"><yt-formatted-string class="content style-scope ytd-video-secondary-info-renderer" force-default-style="" split-lines=""><span dir="auto" class="style-scope yt-formatted-string">Don't know what its actual name is, so I just threw every word into this video's title and hoped that something stuck.
</span><a class="yt-simple-endpoint style-scope yt-formatted-string" spellcheck="false" href="/watch?v=HZTStHzWRxM&amp;t=0s" dir="auto">0:00</a><span dir="auto" class="style-scope yt-formatted-string"> - The new feature
</span><a class="yt-simple-endpoint style-scope yt-formatted-string" spellcheck="false" href="/watch?v=HZTStHzWRxM&amp;t=17s" dir="auto">0:17</a><span dir="auto" class="style-scope yt-formatted-string"> - Slow roll-out
</span><a class="yt-simple-endpoint style-scope yt-formatted-string" spellcheck="false" href="/watch?v=HZTStHzWRxM&amp;t=76s" dir="auto">1:16</a><span dir="auto" class="style-scope yt-formatted-string"> - How it works
</span><a class="yt-simple-endpoint style-scope yt-formatted-string" spellcheck="false" href="/watch?v=HZTStHzWRxM&amp;t=124s" dir="auto">2:04</a><span dir="auto" class="style-scope yt-formatted-string"> - Problems / suggestions for the future</span></yt-formatted-string></div>
Но как до этого добраться в Powershell?

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 16:18, 03-08-2020

 

Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


Цитата DJ Mogarych:
как до этого добраться в Powershell »
от языка тут мало что зависит, пути везде одинаковые: DOM, xPath, XSLT
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:04, 03-08-2020 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Fors1k

Старожил


Сообщения: 193
Благодарности: 112

Профиль | Отправить PM | Цитировать


Цитата DJ Mogarych:
Вытащить описание с Youtube»
Код: Выделить весь код
param(
    $URL = 'https://www.youtube.com/watch?v=HZTStHzWRxM'
)cls

$URLcontent  = (Iwr $URL -useb).content
$Description = ($URLcontent|sls '(?<="description":\{"simpleText":").*?(?="\},"lengthSeconds)').Matches.Value -split "\\n"

$Description
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:20, 03-08-2020 | #3


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6483
Благодарности: 1462

Профиль | Отправить PM | Цитировать


Адова регулярка. А поизящнее никак? Ведь Invoke-WebRequest уже парсит страницу. Что-то типа
Код: Выделить весь код
$url.parsedhtml.getElementsByName("description")
Не совсем то, но направление какое-то такое.

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 21:06, 03-08-2020 | #4


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


Такое "направление" называется Document Object Model - DOM.

Отправлено: 22:54, 03-08-2020 | #5


Deadooshka


Сообщения: 2481
Благодарности: 670

Профиль | Отправить PM | Цитировать


1. у них есть API по ключу, откуда можно взять JSON или XML.
2. DOM динамический, такого span в сыром ответе нету.
3. Есть вариант вытащить JSON и взять оттуда.
Код: Выделить весь код
if ((Invoke-WebRequest 'https://www.youtube.com/watch?v=HZTStHzWRxM'
	).Content -match 'ytplayer\.config = ({.+?});') {
	(($matches[1] | ConvertFrom-Json).args.player_response |
		ConvertFrom-Json).videoDetails.shortDescription
}
p.s. так тоже работает, но это вроде бы неофициальный API
Код: Выделить весь код
$youtube_video_id = 'HZTStHzWRxM'
$query_string = Invoke-WebRequest "https://www.youtube.com/get_video_info?video_id=${youtube_video_id}"
Add-Type -AssemblyName 'System.Web'
([System.Web.HttpUtility]::ParseQueryString($query_string).Get('player_response') | ConvertFrom-Json).videoDetails.shortDescription

Последний раз редактировалось Sham, 04-08-2020 в 14:39.

Это сообщение посчитали полезным следующие участники:

Отправлено: 02:13, 04-08-2020 | #6


Старожил


Сообщения: 216
Благодарности: 15

Профиль | Отправить PM | Цитировать


Цитата DJ Mogarych:
А поизящнее никак? »
Таким кодом выходит поизящней, но текст описания неполный. Может какой-то параметр нужно добавить ?

Код: Выделить весь код
$url = Invoke-WebRequest https://www.youtube.com/watch?v=HZTStHzWRxM
$url.parsedhtml.getElementsByName("description") | ForEach {$_.content}
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:00, 04-08-2020 | #7


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1167
Благодарности: 486

Профиль | Отправить PM | Цитировать


Цитата DJ Mogarych:
Не совсем то, но направление какое-то такое. »
Проблема в том, что там нет сформированной страницы с законченной dom-структурой, там скрипты, которые создают страницу в браузере... так что, регулярку в руки и ура или предложенный выше API для парсинга...
Можно, конечно, попытаться даже парсить скрипты, но там есть только это (что можно распарсить с xpath, через PowerHTML):
Код: Выделить весь код
<meta name="description" content="Don't know what its actual name is, so I just threw every word into this video's title and hoped that something stuck. 0:00 - The new feature 0:17 - Slow rol...">
Код: Выделить весь код
$url = Invoke-WebRequest https://www.youtube.com/watch?v=HZTStHzWRxM
$content = $url.content
$html = $content|convertfrom-html
$a =($html.selectnodes('//meta[@name="description"]').attributes|? name -eq 'content').value
[net.webutility]::htmldecode($a)
т.е. можно выдернуть значение атрибута content, но подозреваю, что это не то, что требовалось...

-------
scio me nihil scire. Ѫ


Последний раз редактировалось YuS_2, 05-08-2020 в 22:39.

Это сообщение посчитали полезным следующие участники:

Отправлено: 22:25, 05-08-2020 | #8


Новый участник


Сообщения: 44
Благодарности: 3

Профиль | Отправить PM | Цитировать


Я не настоящий сварщик но я бы скачал бы при помощи youtube-dl json с описанием. А потом из json получил бы что нужно. Ютуб время от времени меняет дизайн страниц и если юзать youtube-dl то не придётся вручную переписывать код. Достаточно обновить youtube-dl.
Пишу по памяти:
Код: Выделить весь код
set _url=https://www.youtube.com/watch?v=GfO-3Oir-qM&hd=1
youtube-dl %_url% --write-info-json --skip-download
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:40, 09-08-2020 | #9


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6483
Благодарности: 1462

Профиль | Отправить PM | Цитировать


Да, после ydl надо так:
Код: Выделить весь код
(gc 'C:\temp\file.info.json' |ConvertFrom-Json).description
Спасибо!

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 22:25, 17-08-2020 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » PowerShell - [решено] Вытащить описание с Youtube

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - PHP | вытащить XML Darkar25 Программирование и базы данных 11 10-08-2018 09:22
Suse/OpenSuSE - Срочно! RAID вытащить данные. Spaser Общий по Linux 20 13-07-2015 15:50
YouTube официально анонсировал планы на "YouTube TV" OSZone News Новости информационных технологий 0 29-10-2011 16:30
[решено] Как работать с программами: Free YouTube Downoload,Free YouTube Utility tomich Видео и аудио: обработка и кодирование 4 18-05-2010 13:41
Восстановление - Вытащить пароль Murder7 Программное обеспечение Windows 2 08-03-2010 23:57




 
Переход