Доброго дня! Я изучаю php по книге Мориссона М. "Изучаем PHP и MySQL". В главе 12 описано как производить поиск на YouTube видеозаписей и показывать результат этого поиска на своей странице . Но код с книги не работает, а мои поиски ответа в сети не увенчались успехом. Вопрос: как переработать код с книги, чтобы результаты запросов данных с сайта УouTube виводились в динамическом режиме на на моей веб-странице? Код приведенный ниже включается в сценарий веб-страницы с помощью require_once('youtube.php'): PHP: <?php define('YOUTUBE_URL', 'http://gdata.youtube.com/feeds/api/users/aliensabductedme/favorites'); define('NUM_VIDEOS', 5); // Read the XML data into an object $xml = simplexml_load_file(YOUTUBE_URL); $num_videos_found = count($xml->entry); if ($num_videos_found > 0) { echo '<table><tr>'; for ($i = 0; $i < min($num_videos_found, NUM_VIDEOS); $i++) { // Get the title $entry = $xml->entry[$i]; $media = $entry->children('http://search.yahoo.com/mrss/'); $title = $media->group->title; // Get the duration in minutes and seconds, and then format it $yt = $media->children('http://gdata.youtube.com/schemas/2007'); $attrs = $yt->duration->attributes(); $length_min = floor($attrs['seconds'] / 60); $length_sec = $attrs['seconds'] % 60; $length_formatted = $length_min . (($length_min != 1) ? ' minutes, ':' minute, ') . $length_sec . (($length_sec != 1) ? ' seconds':' second'); // Get the video URL $attrs = $media->group->player->attributes(); $video_url = $attrs['url']; // Get the thumbnail image URL $attrs = $media->group->thumbnail[0]->attributes(); $thumbnail_url = $attrs['url']; // Display the results for this entry echo '<td style="vertical-align:bottom; text-align:center" width="' . (100 / NUM_VIDEOS) . '%"><a href="' . $video_url . '">' . $title . '<br /><span style="font-size:smaller">' . $length_formatted . '</span><br /><img src="' . $thumbnail_url . '" /></a></td>'; } echo '</tr></table>'; } else { echo '<p>Sorry, no videos were found.</p>'; } ?> Буду очень благодарен за конкретный ответ с кодом.
Ты дочитал до 12 главы и не знаешь как исправить код? Надо тебе отладку освоить. отладка/debug http://phpfaq.ru/debug https://netbeans.org/kb/docs/php/debugging_ru.html https://php.ru/forum/threads/howto-...i-po-shagam-i-s-kartinkami.58974/#post-474550
Я ознакомился с ссылками и настроил Netbeans и Xdebug. Теперь можна поставить вопрос конкретно: как правильно сформулировать YOUTUBE_URL (строка 1 файла youtube.php)? У меня в открытом окне браузера Firefox появились сообщения об ошибках: Warning: simplexml_load_file(http://gdata.youtube.com/feeds/api/users/aliensabductedme/favorites): failed to open stream: HTTP request failed! HTTP/1.0 410 Gone in /var/www/html/MyBlog/RSS/RSS/youtube.php on line6 Warning: simplexml_load_file(): I/O warning : failed to load external entity "http://gdata.youtube.com/feeds/api/users/aliensabductedme/favorites" in /var/www/html/MyBlog/RSS/RSS/youtube.php on line6
На этот вопрос может ответить документация по youtube api, будут сложности с её поиском, пиши тут, поможем найти
Я ознакомился с https://developers.google.com/youtube/v3/guides/implementation/favorites и изменил YOUTUBE_URL на https://developers.google.com/apis-...s.list?part=contentDetails&forUsername=Google' . Но появляются следующие сообщения в окне браузера при тестировании на локалхосте: Предполагаю, что проблема в имени заданного URL. Но как правильно сформулировать, не знаю. На что мне обратить внимание?
ругается на содержание, что там гугл возвращает такого? давай посмотрим --- Добавлено --- я кликнул по ссылки, возможно там данные в JSON приходят, но ты всё равно посмотри, а ximple_xml_load_file() работает с XML, надо json_decode использовать, если там JSON.
Подскажите, пожалуйста, Вы решили данную проблему? А то у меня такое же, и никак не могу разобраться...
Во-первых, у гугла есть php-sdk для Youtube API, там всё очень просто, правда тащит 20 МБайт с собой всякой хрени по зависимостям. В проекте, где это было для меня неприемлемо, навоял простенький класс, но там только поиск по запросу. И да, там json, а не XML. Читай текущую доку от гугла, по ходу в книге рассмотрена какая-то старая версия API.
Да, ты читал невнимательно доку по API. Запрос должен быть таким: Код (Text): GET https://www.googleapis.com/youtube/v3/playlistItems?part=snippet%2CcontentDetails%2Cstatus&playlistId=FLK8sQmJBp8GCxrOtXWBpyEA&key={YOUR_API_KEY} Тот запрос, что ты привёл - это google-исполнялка тестовых запросов. --- Добавлено --- {YOUR_API_KEY} заменить на полученный в консоли google ключ, плюс в аккаунте должно быть включено youtube API --- Добавлено --- Ну и playlistId свой подставить, естественно
Я тут недавно тоже с ютюбчиком работал, в общем вот, шикарнейшая весчь: https://github.com/madcoda/php-youtube-api
Да, я нашёл решение. А зараз вспомнил о данной проблеме. Может быть, кто-то проанализировал данное решение, не наступит на мои "грабли". PHP: <?php> $list=PLWZ2nof_PR9tSPoYCL7cpSd5cDTv09yPg; //тут в переменной id плейлиста; define('YOUTUBE_URL', 'https://www.googleapis.com/youtube/v3/playlistItems?part=snippet,contentDetails&playlistId=PLWZ2nof_PR9tSPoYCL7cpSd5cDTv09yPg&maxResults=2&key=тут прописываете свой API ключ'); define('NUM_VIDEOS', 2); $data = file_get_contents(YOUTUBE_URL); $json = json_decode($data); // поскольку данные в json приходят, нужно использовать json_decode; //$num_videos_found = $json->totalReults; if (NUM_VIDEOS > 0) { echo '<table><tr>'; for ($i = 0; $i <= NUM_VIDEOS; $i++) { $duration = $json->items[$i]->contentDetails->duration; $title=$json->items[$i]->snippet->title; $thumbnail_url = $json->items[$i]->snippet->thumbnails->medium->url; $id= $json->items[$i]->snippet->resourceId->videoId; $video_url='https://youtu.be/' . $id . '?list=' . $list; $durationText = array("PT", "H", "M", "S"); $Change = array("", ":", ":", ""); $time = str_replace($durationText, $Change, $duration); // c помощью str_replace убираю символы "PT", "H", "M", "S", чтобы время продолжительности видео виводилось без них, и заменяю на то, что в массиве $Change между ""; echo '<td style="vertical-align:bottom; text-align:center" width="' . (100 / NUM_VIDEOS) . '%"><a href="' . $video_url . '">' . $title . '<br /><span style="font-size:smaller">' . $time . '</span><br /><img src="' . $thumbnail_url . '" /></a></td>'; } echo '</tr></table>'; } else { echo '<p>Sorry, no videos were found.</p>'; } ?> Чтобы создать плейлист, в ютубе заходжу по ссилке My channel, далее Video Manager, потом Playlists, нажимаю New playlist. Когда плейлист доданный, нажимаю мишкою на картинку с видео плейлиста, попадаю на страницу youtube с видео мого плейлиста. Сверху, где строка url, копирую то, что идет после "https://www.youtube.com/watch?v=". Это id мого плейлиста. Важный момент. Нужно вбить ваш YOUTUBE_URL в поисковую строку браузера, что сверху, и внимательно проанализировать данные, что появлятся в результате запроса. Исходя с их структуры (вложеность), строим, например, путь до $title=$json->items[$i]->snippet->title. Начинаем цепочку с $json. Её можно построить только после применения функции json_decode($data).
@Drobotko Taras, нормас. А можно просто использовать класс, который я дал выше. Делает вообще всё, что нужно. И тебе даже думать не надо, как он это делает
Я исполнил команду $ composer require madcoda/php-youtube-api:^1.2 в командной строке, открытой в моём проекте, madcoda/php-youtube-api (v1.2.1) установилось. Я прописал в /var/www/html/MyBlog/RSS/RSS/youtube.php : PHP: require 'vendor/autoload.php'; use Madcoda\Youtube; $youtube = new Youtube(array('key' => '/* Your API key here */')); Мне видало при запуске данного файла: Fatal error: Call to undefined function Madcoda\Youtube\curl_init() in /var/www/html/MyBlog/RSS/RSS/vendor/madcoda/php-youtube-api/src/Youtube.php on line589 На что мне обратить внимание?
Спасибо. Я встановливал Curl. Пишет: "Вже встановлена найновіша версія curl". в файле php.ini виражения ;extension=php_curl.dll нет, прописал вручну, расскоментировал. Но, к сожалению, по прежнему виводится уведомление об ошибке (скриншот ниже).
@Drobotko Taras, о, у тебя линукс. как-то провтыкал этот момент. в линуксе вместо extension=php_curl.dll надо раскомментить extension=curl.so
Сработало, даже когда прописал в php.ini: "extension=php_curl.dll". Просто надо было перезапустить apache.
Пример с https://github.com/madcoda/php-youtube-api/wiki/started-with-php-composer работает! Но, к сожалению, непонятно, как вивести видео плейлиста с помощью php-youtube-api. На что мне обратить внимание?
Читаем дальше. https://github.com/madcoda/php-youtube-api/wiki/api-reference Единственное, тут не реализована функция API для определения Id плейлиста избранного, но тут можно или расширить класс, или для своего канала один раз посмотреть через исполнялку API от google
Посмотрел невнимательно. Есть там нужная функция https://developers.google.com/youtube/v3/guides/implementation/favorites Пробовать надо, а мне пока без надобности