Приветствую, друзья!
Это уже становится не смешно: сто́ит мне разместить информацию по API для какого-либо сервиса, как в скором времени сервис умирает. Очень надеюсь, что в этот раз статья будет актуальной более длительное время. Итак, сегодняшняя тема — Youtube API версии 3.
Для работы нам потребуется всего лишь PHP версии 5.2.0 или выше. Если учесть, что версия 5.3 появилась уже в середине 2009 года, нужно «иметь» ооочень древнего хостера, чтобы не заработало. По плану у нас следующее:
- — получаем API key;
- — исследуем описание (увы, на английском);
- — получаем содержимое плейлиста и выводим его на странице.
Старый код, к сожалению, не актуален. Запрос фида выдаёт ошибку — «No longer available». Возможно, Google пойдёт навстречу массовым жалобам пользователей, но рассчитывать на это не нужно. Посему, обновим наш код так, чтобы всё работало, как и раньше.
Список доступных методов можно посмотреть на этой странице. Там же ссылка на официальную докуменатцию.
Недолгие копания приведут к следующему адресу, на который должен осуществляться запрос:
{PLAY_LIST_ID} имеет то же значение, что и в прошлой статье. Но для продолжения работы жизненно необходим {YOUR_API_KEY}.
Получаем API key
1. Идём сюда.
2. Жмём кнопку Create Project. В появившемся окошке вводим имя. Я использую my-test-youtube-api. Ставим галочку согласия I agree… и нажимаем кнопку Create. Подождём, пока проект создастся.
3. Для открытия, в пункте «Boost your app with a Google API» активируем кнопку Enable an API.
4. Нам необходимо работаmь с данными YouTube, поэтому выбираем «YouTube Data API».
5. Нажимаем на кнопку «Enable API». Теперь всё готово, можно осуществлять запросы. Выделенная квота находится во вкладке Quotas. Но ещё нужен ключ.
6. Для получения ключа выбираем в меню слева API & auth → Credentials. Правее нажимаем кнопку «Create new Key».
7. Жмём «Browser key». По необходимости указываем домены, с которых разрешаются запросы. Я ничего не вбивал (разрешены запросы с любых доменов) и сразу нажал «Create». Значимая информация это API key — он понадобится для работы.
Youtube API v3
Нам нужен метод PlaylistItems: list.
Описания доступных параметров приведены на странице, хотя и на английском. Мы же будет использовать четыре:
- part — через запятую перечисляются значения свойств, которые должны быть возвращены. Чтобы всё было без гемороя, используем спецслово snippet;
- playlistId — идентификатор плейлиста;
- maxResults — сколько результатов (данных по видеороликам) возвращать;
- key — API key, ключ, полученный на шаге 7.
Данные возвращаются в виде JSON-объекта, осталось разрулить их и сформировать «старый» массив.
Решение
<?php
/**
* Получить список последних видео заданного плейлиста
*
* @param string $ytlist идентификатор плейлиста
* @param int $cnt по сколько позиций обрабатывать (не всегда нужно содержимое всего плейлиста)
* @param int $cache_life время жизни кеша в секундах (чтобы не получить бан IP за рилтайм запросы)
* @return array список найденных видео, не более $cnt штук
*/
function getYoutubePlaylistDataXml($ytlist, $cnt = 5, $cache_life = 3600) {
# файл, содержащий копию ленты
$cache_file = dirname(__FILE__) . DIRECTORY_SEPARATOR . $ytlist . '.json';
# Ключ для запросов
$api_key = 'ВАШ-API-KEY';
# специальный адрес, отвечающий за выдачу фида
$url = 'https://www.googleapis.com/youtube/v3/playlistItems?part=snippet'
. '&playlistId=' . $ytlist
. '&maxResults=' . $cnt
. '&key=' . $api_key;
# если кеш устарел...
if (time() - @filemtime($cache_file) >= $cache_life) {
# ...пытаемся обновить его
$buf = file_get_contents($url);
# в случае успеха запишем в файл обновлённые данные
# проверка на пустоту нужна для того, чтобы не запороть кеш при ошибке
if ($buf) file_put_contents($cache_file, $buf);
}
# если фид получить не удалось...
if (empty($buf)) {
# ...просто берём содержимое из кеша
$buf = file_get_contents($cache_file);
}
# декодируем JSON данные
$json = json_decode($buf, 1);
$arr = array();
# если данных нет — на выход
if (empty($json['items'])) return $arr;
# перебор доступных значений
foreach ($json['items'] as $v) {
$t = array(
'title' => $v['snippet']['title'], # название
'desc' => $v['snippet']['description'], # описание
'url' => $v['snippet']['resourceId']['videoId'], # адрес
);
# изображения
if (isset($v['snippet']['thumbnails'])) {
$t['imgs']['all'] = array();
foreach ($v['snippet']['thumbnails'] as $name => $item) {
$t['imgs']['all'][] = $item['url'];
$wh = $item['width'] . 'x' . $item['height'];
$t['imgs'][$wh][0] = $item['url'];
}
}
$arr[] = $t;
}
return $arr;
}
В представленном коде забейте ВАШ-API-KEY, полученный на седьмом шаге (без этого код не будет работать!).
Обратите внимание, что в коде происходит запрос файла по HTTPS протоколу. Если вы испытываете скрипт на локальной машине, под Windows, и код не работает (скрипт ругается на https), необходимо в файле php.ini раскомментировать (удалить точку с запятой ; в начала строки) инструкцию extension=php_openssl.dll и перезагрузить веб-сервер.
Вот, собственно, и всё. Работать с функцией можно так же, как и в прошлой статье. Функция либо добавляется в ваш файл, либо в новосозданный документ, например, youtube_api.php, после чего подключается стандартным способом:
require_once 'youtube_api.php';
Возвращаемый массив данных сделан совместимым со старым решением, таким образом, достаточно лишь заменить тело функции.
Пользуйтесь на здоровье!
Полезные ссылки
- Скачать Google APIs Client Library for PHP — клиентские библиотеки
- Скачать API Client Library for PHP — библиотека для работы с API
Примеры кода
Получение последних видео из указанный плейлистов и сохранение информации в файл
<?php
/*
Получение последних видео для указанных каналов
*/
header('Content-Type:text/plain;charset=utf-8');
function getYoutubeDataXml($id) {
// Ключ для запросов
$api_key = 'ВАШ-API-KEY';
// специальный адрес, отвечающий за выдачу фида
$url = 'https://www.googleapis.com/youtube/v3/search?part=snippet'
. '&channelId=' . $id
. '&order=date' // упорядочивать по дате добавления
. '&maxResults=5' // за раз получать не более 5 результатов
. '&fields=items/id/videoId' // нам нужны только идентификаторы видео
. '&key=' . $api_key;
$buf = file_get_contents($url);
// декодируем JSON данные
$json = json_decode($buf, 1);
return $json;
}
// список каналов
$channel_list = array(
'UCmOpCyZ1j406Qyun7dJgOFg',
'UCvBGdmck9fnkFa1jWucN87Q',
);
// хэш в виде: array('id_канала-1' => [vid1, vid2, ...], 'id_канала-2' => [vid1, vid2, ...])
$lastvideo = array();
// пробежаться по каналам, получить для них идентификаторы последних видео
foreach ($channel_list as $channel_id) {
$tarr = getYoutubeDataXml($channel_id);
$lastvideo[$channel_id] = array();
if ( !empty($tarr['items']) ) {
foreach ($tarr['items'] as $v) {
$lastvideo[$channel_id][] = $v['id']['videoId'];
}
}
}
// сохранить в текстовой файл, каждая строка: id-канала|id-видео через пробел
$s = '';
foreach ($lastvideo as $channel_id => $video_list) {
$s .= $channel_id . '|' . implode(' ', $video_list) . "\r\n";
}
// файл создаётся в директории с ЭТИМ скриптом
file_put_contents( __DIR__ . DIRECTORY_SEPARATOR . 'lastvideo.txt', $s );
// вывод результата в браузер, для визуального контроля
print_r($lastvideo);
днём интернета
шоколадкой для работы мозга
коробочкой ароматного чая для бодрости
продлением хостинга на +1 месяц
Да уж, гугля решил усложнить все в край.
Гуглей понять можно, сервисы-то ихние.
Захотят, в любой момент порежут лимиты, или плату введут.
Ну можно ж как-то было оставить старое и подключить новое, как например делал яндекс с апи карт. Захотел перешел или остался. Дуров верни стену
Согласен, лучше бы оставили, чтоб не переписывать лишний раз
Для крупных компаний это норма. Старые версии API для карт уже отменялись, для поиска изменялся (а потом ещё и лимиты жёстко порезали).
В общем, всё для вящей выгоды. Но это бизнес)
Добрый день. Подскажите пожалуйста как получить список плейлиста из вашей статьи https://a-panov.ru/2015/06/youtube-api-v3-api-key/ начиная с момента подключения функции. В программировании я совсем нуб, пыталась взять код из прошлой статьи с html, но как html встроить в php или наоборот нужно встраивать в html php.
Здравствуйте.
В прошлой статье рабочий вариант. Только если вставить код в простую html-страницу, ничего не выйдет. Файл должен пропускаться через механизм php. По умолчанию на хостингах это файлы с расширением *.php
Если это условие выполняется, то достаточно несколько шагов:
1. сохранить код выше под каким-либо именем (имеется ввиду в файл), залить его на хостинг и подключить скрипт в требуемом файле:
require_once ‘/путь/к/файлу/имя_файла.php’;
2. получить содержимое плейлиста:
$playlist_id = ‘PLC6A0625DCA9AAE2D’;
$arr = getYoutubePlaylistDataXml($playlist_id);
3. вывести его.
Все подробно расписано здесь:
https://a-panov.ru/2015/04/parse-youtube-feed/#example-code
Ещё раз повторюсь: если добавить код в html-файл и запустить в браузере (двойным кликом), ничего не случится. Для просмотра результата в браузере необходим веб-сервер (например, apache) и сам пых.
Добрый день. Голову уже сломал, никак не могу сообразить… Получил API key. Можно ли вывести только количество подписчиков по YouTube API? Необходимо чтобы по ссылке выводилось только количество подписчиков и всё. Как это можно сделать и какими способами? Спасибо за помощь
Вячеслав, здравствуйте.
Используйте запрос:
_https://www.googleapis.com/youtube/v3/channels?part=statistics&key={API-KEY}&forUsername={ЮЗЕР}
В [‘items’][‘subscriberCount’] будет результат.
Если имени нет, то подставляем идентификатор канала в таком контексте:
_https://www.googleapis.com/youtube/v3/channels?part=statistics&key={API-KEY}&id={КАНАЛ}
Добрый день. Подскажите пожалуйста как выводить больше 50 видео? Выяснил, что есть некий параметр nextPageToken, добавил его в строку адреса (значение взял из json), но выводит все равно только последние 50 видео.
Спасибо
Евгений,
здравствуйте.
Для получения токенов запрос нужно несколько видоизменить, вместо snippet используйте хотя бы id:
part=id
В результате, вернётся массив, в котором будет определён элемент nextPageToken. Его и подставляем.
&pageToken=[полученный nextPageToken]
Запросив API с этим «хвостиком», получим очередной массив, но в нём уже будут параметры nextPageToken (следующая страница) и prevPageToken (предыдущая страница).
Общее число результатов в значении-массиве pageInfo, ключ — totalResults. И, да, количество возвращаемых элементов ограничивается числом 50. Потом снова делаем запрос с nextPageToken, и ещё раз, пока не получим все токены.
Теперь получилось Спасибо за развернутый ответ
Огромное спасибо. Как раз то что нужно. Всё получилось, работает.
Сергей, здравствуйте.
Рад что помог
Андрюш, помоги со скриптом одним, как будешь в сети Вроде все сделала правильно, но не работает…
Как подключить в html дайте простой пример в хтмл пжлста
Евгений, здравствуйте.
HTML — клиентский «язык», как и JavaScript. Код же — для серверного языка, PHP.
Вам нужен хостинг с поддержкой PHP, причём, бесплатные скорее всего не подойдут — на них отключена функция получения данных из сети, что в данном случае необходимо.
Добрый день!
Вас не затруднит подсказать, почему может возникать эта ошибка? Я так понимаю на этапе формирования урл он сталкивается с тем, что не может получить доступ к сформированному урлу (о чем говорит 403)
[12-Feb-2016 17:48:30] PHP Warning: file_get_contents(https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&playlistId=PLC6A0625DCA9AAE2D&maxResults=6&key=мой ключ) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden in /путь/к/файлу/parser.php on line 26
Максим, здравствуйте.
403 — доступ запрещён. Причины? Наиболее вероятно — неверный ключ.
По поводу вопроса выше — разобрался, спасибо.
А можете подсказать, как записать полученные данные в БД mysql? Соответствующая табличка есть, но сутки попыток не увенчались успехом (только начинаю постигать php).
За основу брал _http://www.kodingmadesimple.com/2014/12/how-to-insert-json-data-into-mysql-php.html
Пробовал выводить вставку и со страницы с кодом парсера, и со страницы, где в UI выводятся результаты парсинга. Даже если отрабатывает без ошибок — в базе от этого записи не появляются. Если сможете помочь — будет супер.
Максим, через echo выводите запрос, потом пытаетесь выполнить в phpMyAdmin.
Без запроса здесь трудно что-то конкретное посоветовать.
А как можно сделать вывод у себя на сайте последних комментариев к видео (которое на ютубе)?
Макс, здравствуйте.
Посмотрите в сторону commentThreads. В минимальном варианте указываете videoId — идентификатор видео (из url, ?v=Video_ID) и part=snippet
Как получить доступ ко всем своим комментариям?
Здравствуйте.
Не знаю, есть ли у них такая штука.
А можно ли вывести комментарии под выбранным видео а также количество лайков под кажным из них?
Глеб, здравствуйте.
Используйте метод commentThreads и параметр videoId (идентификатор видео). Там же, в глубине информации по комментариям, есть likeCount — это оно.
Здравствуйте, большое спасибо за пример! Когда-то у меня был скрипт для APIv2, сейчас я решил заняться этой темой и переделать его. Посмотрел другие методы этого API и не пойму, как получить список видео определённого пользователя / канала. Здесь только плейлист.
Илья, здравствуйте.
Посмотрите в сторону методов channels (возвращает список каналов пользователя). С помощью метода playlists можно получить список идентификаторов плейлистов. Видео с плейлистов — тема статьи.
Здравствуйте, спасибо, но слишком сложно — получается много запросов, а они у Google теперь каждый на счету… Я нашёл проще: в методе youtube.search.list есть поля channelId и type — в первом передаётся id канала, с которого надо взять что-то. В другом можно просто указать «video» — таким образом можно получить все видео с определённого канала. Id копируется просто из ссылки на канал. Единственный минус — видео будут идти по порядку с самого первого из загруженных. Чтобы это обойти, придётся их фильтровать ещё и по времени, но этого я ещё не делал.
Ещё раз спасибо, благодаря Вам разобрался с этой ерунденью!
Илья, здравствуйте. Да что Вы, решительно не за что.
Ещё посмотрите в сторону метода activities, который возвращает список событий для заданного канала. Например, последние загруженные видео.
search дорогой, 100 единиц квоты за вызов требует.
Да, я уже смотрел. Дело в том, что там нельзя отделить видео от других типов активности, их надо будет фильтровать скриптом, т.е. выдача оказывается в основном заспамлена лайками (т.к. их обычно больше, чем видео). Думаю, 100 единиц — нормальная стоимость с учётом того, что запрашиваться будут только новые данные, а существующие — браться из кэша. Если заспамленную лайками выдачу запрашивать несколько раз, вместо одного вызова search придётся делать несколько activities, что может оказаться ещё дороже.
Илья, спасибо!
Про это как-то не подумал; лучше +99 поинтов на запрос потратить, чем в цикле строить дерево и упорядочивать для получения аналогичного результата.
Здравствуйте, спасибо за полезную информацию. А подскажите пожалуйста формат запроса для поиска видео на конкретном канале по какому-нибудь слову, куда его (это слово) всунуть?
Виталий, приветствую.
Для Ваших нужд вполне подойдёт метод search:
https://www.googleapis.com/youtube/v3/search?part=snippet
&channelId={ИДЕНТИФИКАТОР_КАНАЛА}
&q={ЧТО_ИЩЕМ}
&key={ВАШ_КЛЮЧ}
Естественно, всё одной строкой.
Ясно. Большое спасибо за ответ)
Виталий, уверен, Вы бы сделали для меня то же самое. Тем более, что это было просто)
Подскажите, а есть возможность использовать «загрузчик» у ютуба на своем сайте с помощью АПИ?
Например у меня есть форма, где человек выкладывает свое сообщение и подкрепляет видео, которое в свою очередь грузится на сервера ютуба и подкрепляются к сообщению уже ссылкой?)
Если это возможно, то задайте пожалуйста вектор направления, если не трудно) куда копать.
Заранее спасибо за ответ!
Антонина, здравствуйте.
Посмотрите в сторону метода Videos: insert . Там есть ссылка на пример.
Здравствуйте, спасибо вам за статью.
А есть способ получить информацию:
— лайкнул ли пользователь определенное видео
— подписался ли на определенный канал ?
Может можно зайти немного с другой стороны и искать среди айдишников подписчиков/лайкнувших определнный айди пользователя
Анатолий, здравствуйте.
На данный момент затрудняюсь дать точный ответ.
По логике, этой возможности быть не должно. Но получить статус своего действия можно, однако вряд ли это требуется.
Возможно, стоит использовать метод youtube.subscriptions.list (правда, я до конца не понимаю, как он работает), а потом youtube.activities.list — там выдаётся и список лайков тоже. Потом надо выбрать оттуда интересующие данные (отфильтровать по полям массива) и попробовать найти лайки таким образом. Но это в теории. Чтобы понять, можете ли Вы на практике сделать так, лучше зайдите в консоль API: https://developers.google.com/apis-explorer/#p/youtube/v3/ — и там попробуйте подставить свои данные. Посмотрите, что выдаст.
Здравствуйте.
Скажите, применима ли в качестве веб-сервера для работы созданных *.PHP скиптов программа Denwer?
далее, при работе с Denwer, когда я кладу в виртуальную Z:\111 скрипт с API, и скрипт ID-плейлистом,
тогда исполняемый (ID-плейлистовый) скрипт будет такой
require_once ‘http://111/youtube_from_API.php’;
# пример работы с функцией
$playlist_id = ‘PLzSKREVb38LFKjZG7tZOlKjtDR7OE6tcg’;
$arr = getYoutubePlaylistDataXml($playlist_id);
Warning: require_once() [function.require-once]: http:// wrapper is disabled in the server configuration by allow_url_include=0 in Z:\home\mysite1\www\test_youtube.php on line 2
Warning: require_once(http://mysite1/youtube_from_API.php) [function.require-once]: failed to open stream: no suitable wrapper could be found in Z:\home\mysite1\www\test_youtube.php on line 2
Fatal error: require_once() [function.require]: Failed opening required ‘http://mysite1/youtube_from_API.php’ (include_path=’.;C:\php\pear’) in Z:\home\mysite1\www\test_youtube.php on line 2
Алексей, здравствуйте.
Денвер вполне годится. В данном случае проблема не в нём, а в том, что Вы подключаете исполняемый скрипт по http; это запрещено конфигурацией (allow_url_include).
Если оба скрипта лежат в одном месте, подключить можно так:
require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . ‘youtube_from_API.php’;
Здравствуйте!
Извините за столь глупый вопрос!
Подскажите пожалуйста, — Youtube API v3 — позволяет получать прямую ссылку на видео?
По логике не должен, но а вдруг
Вчера хотел скачать видео в 1080р но FlashGot показал только 720р. Поставил Ummi Downloader, но тот тоже показывает максимум 720р. При этом смотрю-то я в 1080р. В общем перебрал несколько загрузчиков и везде одна и та же картина. Написал парсер на Python для получения прямых ссылок на видео.
Но мне не нравится как это все выглядит. Должен быть способ более лаконичным, очевидным.
Глянул мельком https://developers.google.com/youtube/v3, но не нашел такой возможности.
Может вы в курсе?
Заранее благодарю!
Здравствуйте.
Сервис принципиально не даёт возможности получить прямые урлы видео. Методов, что позволяют это сделать через API, мне неизвестны. Как неизвестно, почему FG и UD отказались качать — не пользуюсь ими.
Сомневаюсь, что есть что-то более правильное, нежели Ваш парсер. Гугл привязывает прямой адрес к IP и устанавливает время действия линка, так что, получить уникальный урл навсегда и для всех вряд ли возможно.
Благодарю за ответ!
Время линка ограничено, IP привязывает, но при вызове ссылки youtube сам обновит информацию. Можете сами попробовать. Замечу, что изначально IP в ссылке будет не ваш.
Сгенерирует прямую ссылку: http://rus.lostcut.net/youtube/g.php?v=mcixldqDIEQ&link_only=1&min_height=720
Генератор хостится в Новосибирске. И его IP будет в линке. Но скачать сможет кто угодно.
Только опять же, — нету 1080р. Так что алгоритм старый, до смены формата. И писался скорее по этой статье: https://habrahabr.ru/post/137496/
Нашел несколько англоязычных ресурсов, которые генерят прямые ссылки нормально. И программу хорошую нашел (4K Video Downloader), но она естественно платная.
Доброго утра!
Спасибо за ссылочку. Интересно получается: IP указывается явно, но не участвует в проверке.
По статье формируемые адреса не рабочие (у меня белый экран с 403 ошибкой вываливается). Попробую ещё посидеть над этим хаком, не для соревнования с платными программами, конечно, но вдруг что выйдет.
Ещё раз спасибо за наводки!
Добрый вечер!
Выйдет, конечно! У других же выходит! ;)
Я вообще только начал изучать программирование. 2 недели тому назад закончил бесплатный курс от «codecademy.com».
Я самым первым делом попробовал как в статье сделать, но потерпел фиаско по понятным уже причинам. А потом целый день сниферил WireShark’ом. И за 2 часа написал первую в жизни рабочую программу. Правда без сортировки и отброса мусора. Видео я скачал в 1080р (41 шт.). В ручном режиме (каждое видео по отдельности), но потом нормально сделаю.
Вчера вечером приходил друг (программист с 14 летним стажем) и похвалил и пальцем покрутил у виска, когда про WireShark услышал. Показал мне инструменты разработчика… Теперь чувствую себя идиотом т.к. мог бы и сам догадаться…
P.S. Еще интересный факт. Если отправлять запрос https то и ссылки будут начинаться с https://. Но если отправить http, то ссылки будут начинаться http://
Вот как это выглядит у меня.
Вы молодец!
Что-то понравилось, прошли обучение, а после сразу стали применять полученные знания, попутно значительно повысив свой скилл.
Встречались программисты, окончившие университеты и пришедшие на работу, которые не понимали, для чего нужен отладчик, к примеру.
Ещё раз спасибо, что подтолкнули к такой интересной теме.
Спасибо! Мне очень понравилось программировать, но начинать было очень тяжело. А начал из-за того, что 2 грыжи на спине заработал и пришлось уйти с работы. Теперь даже сидеть подолгу не могу.
Вот бы начать лет 15 назад заниматься этим ремеслом…
P.S. Это вам спасибо! Сэкономили мне много времени.
Здравствуйте, Bugap!
А не поделитесь ссылками — «Нашел несколько англоязычных ресурсов, которые генерят прямые ссылки нормально»
И еще «Написал парсер на Python для получения прямых ссылок на видео. »
Была бы очень признательна
Добрый день. Ответьте, пожалуйста, не приходилось ли сталкиваться с такой задачей: на странице в помещён видеоролик с youtube, а за пределами есть кнопочка «Later», по нажатию на которую видеоролик должен попасть в список «Watch Later» пользователя youtube. Если не лень и есть время, поделитесь, пожалуйста, соображениями, как это можно сделать.
Влад, здравствуйте.
К сожалению, ютубом почти не пользуюсь, поэтому даже примерно не знаю, в какую сторону копать.
Есть мнение, что API для этого не нужно: пользователь же хочет добавить в свой список новое видео, соответственно, должен быть как минимум авторизован.
Здравствуйте!
Спасибо за полезную статью.
Вопрос такой: можно ли скачивать превью-фото через curl?
Не забанят за это?
Или можно скачать через API?
Ильдар, здравствуйте.
Миниатюры находятся на серверах, раздающих статику. Теоретически, способны выдержать почти любые нагрузки.
Десятки изображений за секунду получаются без проблем. Но гарантировать, что это сохранится на тысячах, либо в течение долгого времени при постоянной нагрузке, не могу. Про баны не слышал. Однако это не значит, что их никогда не было. Может, и были. Если на компьютере динамический IP, я бы хоть с него запустил тест на несколько тысяч картинок.
Спасибо за ответ!
Картинок думаю получится не тысячи, запрос по ключевому слову и за последний час (каждый час).
В таком случае видимо придется предварительно тестировать на нерабочем месте.
Думал может уже есть проверенный опыт)
Ильдар, да пожалуйста)
Успехов в изысканиях!
Здравствуйте не могу понять почему не работает: [скрыл адрес]
Пишет про какие-то лимиты.
если в запросе ставлю search за место playlistItems то все норм.
Алексей, здравствуйте!
Метод playlistItems требует обязательного задания playlistId или id.
Здравствуйте с чем может быть связана ошибка:
{
«error»: {
«errors»: [
{
«domain»: «usageLimits»,
«reason»: «dailyLimitExceededUnreg»,
«message»: «Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup.»,
«extendedHelp»: «https://code.google.com/apis/console»
}
],
«code»: 403,
«message»: «Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup.»
}
}
Алексей, Вы почти всё верно сделали.
Отсутствуют обязательные параметры: PlaylistItems: list
После добавления вылезет другое предупреждение: Invalid field selection videoId
Для получения этого парамтра нужно указать полный путь:
fields=items/snippet/resourceId/videoId
Либо вообще не использовать fields и работать с полным содержимым.
Здравствуйте!
Меня интересует Как создать АПИ ключ YouTube v.3. НО новая инструкция! У вас сайт не обновлялся с 2009?!
Здравствуйте.
Хорошая шутка, учитывая, что третью версию API выкатили году так в 2015.
Доброго времени суток. Спасибо за хороший материал! Но одно место никак не могу понять… Создал я проект, получил все необходимые данные. все хорошо, но… Ведь я же буду ограничен только своим аккаунтом. А хотелка звучит так, как получить содержимое произвольного аккаунтв ютуб, зная его логин и пароль. Подскажите плиз направление куда копать… Заранее спасибо!
Здравствуйте.
Получить для этих аккаунтов API KEY и работать через него.
Спасибо за ответ! Но этот путь не возможен… Мне хочется сделать так, чтобы польз-ли сами прописывали свои логин с паролем и… имели возможность видеть содержимое своего аккаунта. Ведь как-то же это реализовано в виджете ютуб для смарт-тв, насколько я помню.
Приветствую!
Что то не могу «догнать»!
Запрос: https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&playlistId={PLAY_LIST_ID}&maxResults=5&key={YOUR_API_KEY} результат выдаёт. Список любого плёйлиста.
А вот в конструкции файла youtube_api.php ничего не выдаёт.
Вот чувствую что какая-то «фигня» а не пойму…
Влас, здравствуйте.
Функция рабочая, только что проверил.
Возможные проблемы:
1. Используете функцию как есть, не вызывая её.
2. Заместо идентификатора плейлиста используется что-то другое.
3. Хостер запрещает внешние запросы или запросы на конкретные сайты (Гугл-апи).
4. Гугл забанил IP хостера, возможно, сосед по серверу/сети создавал дикую нагрузку на их сервера.
Вообще, включите вывод ошибок и посмотрите, на что ругается.
Здравствуйте! Я слабо понимаю о чём вы написали… )))
1. Используете функцию как есть, не вызывая её.
Я и использую ваш код и только вношу свои id.
2. Заместо идентификатора плейлиста используется что-то другое.
Например номер телефона? (шутка), какая разница, что если совсем не выводит (и почему-то ошибки не выводит)
3. Хостер запрещает внешние запросы или запросы на конкретные сайты (Гугл-апи).
Такого точно нет. Очень серьёзный хостинг с большими расширенными возможностями.
4. Гугл забанил IP хостера, возможно, сосед по серверу/сети создавал дикую нагрузку на их сервера.
Слабо себе представляю, чтобы гугл банил рег.ру.
Видимо буду сам писать. Спасибо.
1. Мне неизвестен Ваш уровень. Это рабочее:
но код, в данном контексте, никогда не выполнится. Почему? Да потому, что не вызывается.
2. Хорошо, что у Вас есть чю. Но код, тем не менее, требует идентификатора плейлиста. Не видео, не канала, не имя владельца.
Для вывода всех ошибок в пыхе есть функции:
Юзать в начала скрипта.
3. Из серьёзных хостингов раньше был Зенон. Сейчас это шарашка, ютящаяся на съёмной площади рядом с Наунетом.
4. Гугл не банит (как правило) конкретного хостера. Он банит IP, с которых создаётся повышенная нагрузка на его инфраструктуру. В особых случаях в бан может подсеть улететь.
Пожалуйста.
ini_set( ‘display_errors’, 1);
error_reporting(-1);
ставил и результат 0! Почемуто не срабатывает.
Уровень мой в зависимости от «ватерлинии».
Про хостинг я тоже написал REG.RU, не там причина.
Ладно нет смысла «мереться» чуйками и знаниями. Я наверно совершил ошибку и в начале не обозначил свою задачу.
Мне нужно было только вывод с определенного канала всех видео галереей.
Решил так может кому-то пригодиться.
//Get videos from channel by YouTube Data API
$API_key = ‘API_Key’;
$channelID = ‘Channel_ID’;
$maxResults = 10;
$videoGallery = json_decode(file_get_contents(‘https://www.googleapis.com/youtube/v3/search?order=date&part=snippet&channelId=’.$channelID.’&maxResults=’.$maxResults.’&key=’.$API_key.»));
и вывел:
foreach($videoGallery->items as $item){
//Embed video
if(isset($item->id->videoId)){
echo ‘
id->videoId.'» frameborder=»0″ allowfullscreen>
‘. $item->snippet->title .’
‘;
}
}
Извините за неточности.