YouTube позволяет бесплатно работать через своё API, поэтому парсить его сплошное удовольствие. А учитывая, что он еще и ищет отлично и релевантно — то парсинг в двойне приятнее.
Для начала надо зарегистрироваться и получить свой API ключ. По идее для этих дел лучше создать отдельный аккаунт, а то вдруг забанят или еще что. Полная инструкция по получинию ключа тут: https://developers.google.com/youtube/v3/getting-started
Первое — зарегистрироваться тут: https://accounts.google.com/SignUp?continue=https%3A%2F%2Faccounts.google.com%2FManageAccount
Второе — подключить api Youtube тут: https://console.developers.google.com/apis/dashboard (там сами разберетесь, вы ведь программисты, а гугл все чтото меняет, но методом тыка разобраться можно). Включить это API и получить свой ключ вида:
Третье — php код функции для поиска через API:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
function youtube_search($apikey, $search, $limit){ $search = urlencode($search); $url = "https://www.googleapis.com/youtube/v3/search?part=snippet&q=$search&type=video&maxResults=$limit®ionCode=RU&key=$apikey"; $ch = curl_init(); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 5.1; rv:7.0.1) Gecko/20100101 Firefox/7.0.1"); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); //если выпадает ошибка на эту строку - попробуйте закомментировать её curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_REFERER, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); $out = curl_exec($ch); curl_close($ch); return $out; } $search = "Покемоны"; // Поисковый запрос $limit = 10; // Количество результатов $apikey = "{ Ваш ключ к API }"; // Ваш ключ к api youtube v3 $res_json = youtube_search($apikey, $search, $limit) ; $res = json_decode( $res_json ); print_r($res); |
Четвертое (необязательное) — документация по API: https://www.youtube.com/yt/dev/ru/api-resources.html. Знание документации позволит делать более хитрый поиск по указанию страны, каналов и всякого такого. Например у нас в адресе запросов присутствует ®ionCode=RU — это значит, что искать видео не запрещенные для просмотра в России.
Все работает, данные получены
stdClass Object ( [kind] => youtube#searchListResponse [etag] => «m2yskBQFythfE4irbTIeOgYYfBU/IB8VfRVWrn_O5a1jdDURGfJS_vE» [nextPageToken] => CAMQAA [regionCode] => RU [pageInfo] => stdClass Object ( [totalResults] => 226903 [resultsPerPage] => 3 ) [items] => Array ( [0] => stdClass Object ( [kind] => youtube#searchResult [etag] => «m2yskBQFythfE4irbTIeOgYYfBU/UWiC68W72iQl6dfY8n8BhDsFgsY» [id] => stdClass Object ( [kind] => youtube#video [videoId] => NASSH0b-9p8 ) [snippet] => stdClass Object ( [publishedAt] => 2016-03-25T22:28:09.000Z [channelId] => UCV7gZC4eG-jbcDBrI-tbiSA [title] => Покемон 18 сезон 41 серия [description] => [thumbnails] => stdClass Object ( [default] => stdClass Object ( [url] => https://i.ytimg.com/vi/NASSH0b-9p8/default.jpg [width] => 120 [height] => 90 ) [medium] => stdClass Object ( [url] => https://i.ytimg.com/vi/NASSH0b-9p8/mqdefault.jpg [width] => 320 [height] => 180 ) [high] => stdClass Object ( [url] => https://i.ytimg.com/vi/NASSH0b-9p8/hqdefault.jpg [width] => 480 [height] => 360 ) ) [channelTitle] => YouMedia Television [liveBroadcastContent] => none ) ) [1] => stdClass Object ( [kind] => youtube#searchResult [etag] => «m2yskBQFythfE4irbTIeOgYYfBU/l3ZSpl4ti9ouQA7Za2G9AG-RvqA» [id] => stdClass Object ( [kind] => youtube#video [videoId] => UhGmvhc0BBk ) [snippet] => stdClass Object ( [publishedAt] => 2013-06-28T14:06:59.000Z [channelId] => UCdo2ldnEZCO5DVcCI1ISCvA [title] => Покемоны 1 сезон 1 серия [description] => [thumbnails] => stdClass Object ( [default] => stdClass Object ( [url] => https://i.ytimg.com/vi/UhGmvhc0BBk/default.jpg [width] => 120 [height] => 90 ) [medium] => stdClass Object ( [url] => https://i.ytimg.com/vi/UhGmvhc0BBk/mqdefault.jpg [width] => 320 [height] => 180 ) [high] => stdClass Object ( [url] => https://i.ytimg.com/vi/UhGmvhc0BBk/hqdefault.jpg [width] => 480 [height] => 360 ) ) [channelTitle] => valgert volderven [liveBroadcastContent] => none ) ) [2] => stdClass Object ( [kind] => youtube#searchResult [etag] => «m2yskBQFythfE4irbTIeOgYYfBU/Dqigi8sZhaL1HbTVyYAzx0emqOA» [id] => stdClass Object ( [kind] => youtube#video [videoId] => rGQtwBqqHos ) [snippet] => stdClass Object ( [publishedAt] => 2016-12-23T09:19:26.000Z [channelId] => UCYgNWi7GmvIzaajt23UZcOg [title] => Покемон: фильм 19 — Вулканион и Механическое чудо [description] => Перевод: lord666 Озвучка: lord666 и Анна Полевская. [thumbnails] => stdClass Object ( [default] => stdClass Object ( [url] => https://i.ytimg.com/vi/rGQtwBqqHos/default.jpg [width] => 120 [height] => 90 ) [medium] => stdClass Object ( [url] => https://i.ytimg.com/vi/rGQtwBqqHos/mqdefault.jpg [width] => 320 [height] => 180 ) [high] => stdClass Object ( [url] => https://i.ytimg.com/vi/rGQtwBqqHos/hqdefault.jpg [width] => 480 [height] => 360 ) ) [channelTitle] => B2tm2n1 [liveBroadcastContent] => none ) ) ) )
но как их вывести по отдельности, там надо переменную и массив уточнять? покажите плз как вывести картинку например из второго ролика
Могу немного напутать, но должно быть что-то вроде:
echo $res->items[1]->thumbnails->high->url;
Все понятно, все работает. Спасибо.
А вы не подскажите как в поисковый запрос ($search = «Поисковый запрос»;) передать переменную. Сайт на ВП, хочу передать заголовок. Например,:
$search = wp_title(); или $search = $drugaya_peremennaya; в переменной содержится заголовок страницы, но таким методом не работает. Не понимаю как правильно сделать это, точнее сделать поисковый запрос на основе заголовка страницы
Попробуйте:
$search = wp_get_document_title();
https://wp-kama.ru/function/wp_get_document_title
А wp_title() — не передает значение, а выводит его в браузер. Да еще и устаревшая.
Здравствуйте, у меня такой вопрос. Возможно-ли настроить так, чтоб с анкетной части моего сайта люди могли загружать свой видео на прямую на канал в Ютубе, и чтоб загруженное в анкете видео попадала в плей лист который указан в пункте анкеты??
У меня все работает, но результаты поисковых запросов не правильно отрабатывают. Например, если на ютубе https://www.youtube.com/ ввести запрос, то выдает много результатов, а через скрипт может найти только 2 видоса или 1
Денис, в строке №3:
$url = «https://www.googleapis.com/youtube/v3/search?part=snippet&q=$search&type=video&maxResults=$limit®ionCode=RU&key=$apikey»;
Посмотрите, возможно ®ionCode=RU ограничивает выборку. На сколько я помню, это поиск для России или типа того.
Умед, думаю это возможно. Только не настроить, а разработать соответствующий функционал. Основная проблема может быть — мощностей виртуального хостинга может не хватить на загрузку видео через php и надо будет брать сервер (ВПС или Дедик).
Денис, в строке №3… Алексей, не помогает, не знаю что делать блин
Ну или такой вопрос… можно ли передать несколько ключевых фраз по отдельности, а результат получить один в массиве
Денис, можно несколько запросов отправить и соединить результаты в один массив.
Я сейчас пишу без тестов (у меня не сохранены рабочие файлы), но даже если ошибки будут, то должно навести вас на правильную мысль.
Начиная с 19 строки:
$res_json = youtube_search($apikey, «Запрос 1», $limit) ;
$res = json_decode( $res_json, true ); // true- чтобы не объект, а ассоциативный массив получить
$res_json = youtube_search($apikey, «Запрос 2», $limit) ;
array_push( $res, json_decode( $res_json, true ) );
..
$res_json = youtube_search($apikey, «Запрос n», $limit) ;
array_push( $res, json_decode( $res_json, true ) );
Лех, ты, конечно, не обижайся, ты молодец. Ты потратил свое время и всё такое. Но людям хочется чего-то готового. Может ты будешь тем самым человеком, который выложит готовый плагин?
Просто эта статья полезна лишь некому узкому кругу людей, которые разбираются в этом. Я даже не разбирал код. Потому что время не хочу тратить. Я лучше его потрачу на написание этого поста. Так вот. Сделай какой-нибудь плагин или напиши код, напиши мануал и т.д., чтобы человек мог просто создать страницу в WP, вставил туда shortcode и после сохранения на этой странице появилась строка поиска и кнопка «Найти». И когда человек вводит какую-то фразу или словосочетание, ему выдает список ссылок с картинками видео, нажав на которые он сможет смотреть видео в нормальном Ajax плеере с рамкой, который не закрывается при перелистывании страниц и который можно двигать, изменять его размеры и т.д. Иначе эту статью прочитает максимум несколько человек.
«Я что, ишак тут распинаться бесплатно перед всеми», — подумаешь ты. Так а зачем ты время вообще тратишь на это все? Зачем тебе этот сайт, если тебя понимает лишь узкий круг аутистов, которые вообще не понятно о чём разговаривают, будь-то инопланетяне? Давай че-нить для людей, а не для НЛО.
Сергей, спасибо за фидбэк. Но у меня встречный вопрос, а почему именно для WP? Мне вот Битрикс нравится. А еще не плох ModX (обе ветки). Да думаю найдется и еще с десяток не плохих CMS.
По поводу для «людей», а не НЛО — так я определился с форматом этого блога. Это в большей степени моя записная книжка. Чтобы заносить сюда, то чего нету (небыло) на десятке других блогов. Чиркнуть о том, в чем пришлось самому разобраться, чтобы в будущем при аналогичной задаче было к чему вернуться, подсмотреть, как пользоваться. Т.е. в первую очередь для меня.
Что касается почему для WP, то, по-моему, это наиболее функциональная CMS благодаря обилию плагинов, которые пишут и выкладывают добрые господа и дамы. Может быть я другие не использовал, но вордпрес — классная штука.
Что касается того, что ваша это ваш блокнот, так это безусловно хорошо. Однако неплохо было бы внести свою лепту в многообразие предложений в рамках множества плагинов. Вам ведь это не стоит ничего, вы хорошо разбираетесь. За час бы создали, думаю. И прославились бы. А людям это принесло бы много радости. Аналогов пока что не существует.
Сергей, это не так работает) Чтобы прославиться — это удел молодых и беззаботных. Остальные выкладывают то, что пришлось разработать и этой разработкой можно и не стыдно поделиться.
Попробуйте внести свои предложения на форумах посвященных WP. Работать с готовым API под силу любому программисту.
А я этого API ютуба коснулся, только для того, чтобы автоматически подтягивать к товарам видеообзоры. Кстати для сайта на MODx. И это было куда более полезно, чем то что вы просите. Может со временем выложу этот сниппет для всех (если он достаточно универсальным получился).
ответ Денису на вопрос-«…результаты поисковых запросов не правильно отрабатывают…»:
это известный баг API ютуба
Здравствуйте! Теперь требует настроить ограничения по ip или рефереру, не могли бы вы проверить и обновить код? Если я ставлю ограничение по ip сервера, то ругается на реферер, а как передавать реферер не могу разобраться.
Я ошибся, дело было не в ограничениях, а в том, что доступ api закрывается, если не было запросов за последние 90 дней, полдня убил, только потом вспомнил, что письмо приходило такое. Ведь в самом проекте написано, что все активно. Решил проблему создав новый проект.
SDiQZ9kWTHTxC9QWZA3sTXfwIJO16