Помощник
|
Парсинг видео с youtube заданной длительности |
prolisk
|
Сообщение
#1
|
||
|
|
||
|
|||
k0ttee |
14.8.2014, 21:45;
Ответить: k0ttee
Сообщение
#2
|
|
можно в апи залезть Ща сделаем, дай подумать :s009: Добавлено спустя 39 минут 2 секунды: Поглядел я в их API, а там ного букв английских... Мне трудно читать по ихнему, да и я как Ъ-русский пойду на гуглю прямо в лоб, как на медведя с вилами - то есть методом Get и любимой функцией file_get_contents. Итак, с криком "Ура!!!" получилось искать по ключевому слову всего в одну строку + настройки. <meta charset='UTF-8'> <?php #сеттингс-пи-эйч-пи (это глум такой) $keyword = 'приколы'; //ключ $search_page = 1; //пока вне цикла, цифру подставлять руками (номер страницы в выдаче результатов) #открываем страницу $search = file_get_contents('http://www.youtube.com/results?search_query='.$keyword.'&page='.$search_page); //всего одна строка и не надо читать много букв echo $search; //получаем страничку с 20ю результатами ?> Ну, а время... Время на картинках написано, да и в исходнике присутствует (обернуто <span>1:05</span>). Ща я preg_match_all задействую и получим продолжительности видях по времени. Пока API не нужно, быдлокод работает. Тестируй... Добавлено спустя 1 минуту 53 секунды: Давай что-ли сразу горсть ключей, по которым парсить будем... :swoon: Добавлено спустя 42 минуты 53 секунды: Надергиваем ролики в обертках #перевариваем страницу результатов preg_match_all("#<(.*?)data-context-item-id=(.*?)>#", $search, $good_times); //находим блоки видео (ссылки на каналы не найдутся) print_r($good_times[0]); //смотрим блоки видео А в этих блоках будем смотреть продолжительности. -------------------- btc: 3Hq7X9CosVftRFPqWis1Dkk5MdtM1u6jj9 |
|
|
prolisk
|
Сообщение
#3
|
|
Давай что-ли сразу горсть ключей, по которым парсить будем... А че там парсить - юмор лучше всего, животные, игры. Сисек на ютюбе мало :) -------------------- Блог вебмастера. Добавь свой сайт в белый каталог |
|
|
k0ttee |
15.8.2014, 13:42;
Ответить: k0ttee
Сообщение
#4
|
|
Вроде получается. Тестируй.
<meta charset='UTF-8'> <?php #сеттингс-пи-эйч-пи (это глум такой) $keyword = 'приколы'; //ключ $max_time = 5; //мин время (сек) $min_time = 120; //макс время (сек) #открываем страницу поиска $search_page = 1; //пока вне цикла, цифру подставлять руками $search = file_get_contents('http://www.youtube.com/results?search_query='.$keyword.'&page='.$search_page); //ищем #echo $search; //получаем страничку с 20ю результатами #находим времена preg_match_all("#<span class="video-time">(.*?)</span>#", $search, $good_times); $good_times = array_flip($good_times[0]); //разворот unset($good_times['<span class="video-time">__length_seconds__</span>']); //выпиливание ненужного $good_times = array_flip($good_times); //разворот обратно #находим ссылки на видео preg_match_all("#href="/watch?(.*?)"#", $search, $links_to_videos); //там будут дубли $links_to_videos = $links_to_videos[0]; $links_to_videos = array_unique($links_to_videos); #короче пока так print_r($links_to_videos); //массив относительных ссылок на видосы print_r($good_times); //массив их продолжительностей ?> Добавлено спустя 2 минуты 6 секунд: Блин, хреновым путем пошли... Надо попробовать за другое место цепляться... Регулярки у меня хромают :angry: Беру сутки на размышление... Добавлено спустя 15 часов 5 минут 42 секунды: Короче, регулярка это велосипед и до ближайшего обновления дизайна YouTube. А дизло они очень любят менять пару раз в год. Начитался вчера про парсеры, 3 из них даже опробовал... Нихрена что-то у меня не получилось - или у меня руки кривые или селектор по черт-пойми какому атрибуту и не должен работать. На будущее конспектируем себе парсеры, вот: 1.) PHP HTML DOM 2.) htmlSQL 3.) Zend_Dom_Query 4.) phpQuery 5.) QueryPath 6.) The DomCrawler(Symfony) 7.) CDom 8.) XPath Во, сделал все-таки по ихнему API (которое есть на русском, что очень приятно) <meta charset='UTF-8'> <?php $keyword='Петросян'; //ключ по которому искать (вместо пробелов возможно надо писать плюсы) $start_index=1; //с какого ролика по счету начать $max_results=1; //по сколько видео на страницах рещултатов (по 1, чтобы не сувать цикл в цикл) $search=file_get_contents('http://gdata.youtube.com/feeds/api/videos?q='.$keyword.'&start-index='.$start_index.'&max-results='.$max_results.'&v=2'); #echo $search; preg_match("#<yt:videoid>(.*?)</yt:videoid>#", $search, $id); //находим ID $id=preg_replace("#<yt:videoid>#",null,$id[0]); //убираем обертку в начале $id=preg_replace("#</yt:videoid>#",null,$id); //убираем обертку в конце $xml=file_get_contents('http://gdata.youtube.com/feeds/api/videos/'.$id); //смотрим на фид ролика $entry=new SimpleXMLElement($xml); //время $time=reset($entry->xpath('media:group/yt:duration[@seconds]')); $seconds=(int)$time->attributes()->seconds; echo '<b><font color=green>Время в секундах:</font></b> '.$seconds."<br>\n"; echo '<b><font color=orange>ID видеоролика:</font></b> '.$id; #<yt:duration> //продолжительность #<yt:videoid>QbEwKcs-8Hc</yt:videoid> //уникальный ID видео ?> <br> <br> <a href='https://developers.google.com/youtube/2.0/reference?hl=ru'>русское API ютуба туточки</a> Ну что, смотри... Единичный ролик показывает продолжительность и ID. Для промышленного использования достаточно добавить условие, что длина времени от 5 до 120 сек. Ну и сунуть в цикл, конечно же. -------------------- btc: 3Hq7X9CosVftRFPqWis1Dkk5MdtM1u6jj9 |
|
|
prolisk
|
Сообщение
#5
|
|
Нужно будет самому посидеть. Как получу свой ПК после выходных, засяду на работе тестить :)
я нашел ссылку (ту что в хайде, просто сохранил, но не тестировал), выдает хмл результат, можно спокойно "вытягивать" ссылку и продолжительность. но тоже еще мозг рукам сигнал не посылал...мозг короче все послал, а сигнал на работу не хочет :laugh: -------------------- Блог вебмастера. Добавь свой сайт в белый каталог |
|
|
andreykashops_hb |
23.8.2014, 23:56;
Ответить: andreykashops_hb
Сообщение
#6
|
|
|
Ребят, русским по белому написано)
https://developers.google.com/youtube/2 ... parameters Правда с таймами нужно поработать, Добавлено спустя 51 секунду: Получать данные XML в PHP лучше так: $xml = simplexml_load_file('http://gdata.youtube.com/feeds/api/videos?q=спорт'); $arr = (array) $xml; // Теперь тут у нас массив с результатом запроса
|
|
|
||
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
TopSmm.ru Накрутка Вконтакте/Instagram/YouTube и др. Гарантия на докрутку и самые низкие цены! | 74 | KalininDima | 38356 | 15.3.2024, 16:12 автор: KalininDima |
|
Базы Youtube кейвордов с данными по конкуренции и Volume | 1 | Krok | 760 | 10.3.2024, 6:28 автор: Krok |
|
Трафик в Телеграм (рассылка, инвайт, парсинг) | 7 | gelt | 2442 | 7.3.2024, 17:37 автор: gelt |
|
Не получается оплатить YouTube Premium (для Турции и Аргентины по VPN YouTube Premium недоступна) | 2 | rownong27 | 390 | 3.3.2024, 20:27 автор: rownong27 |
|
Через какой браузер и как можно найти в кэшэ браузера видео | 9 | Room | 1763 | 26.2.2024, 21:51 автор: bestx24 |
Текстовая версия | Сейчас: 19.3.2024, 5:09 |