Я использую YouTube api v3 для извлечения списка видео с помощью примера на странице https://developers.google.com/youtube/v3/code_samples/php#retrieve_my_uploads
Я открываю страницу, приложение запрашивает авторизацию. Я нажимаю ссылку для авторизации, выбираю свою учетную запись gmail и получаю листинг.
Проблема в том, что когда я вернусь в приложение даже через несколько секунд, я должен снова авторизовать приложение.
Я подумал, что когда приложение будет разрешено, вы можете обменять токен на токен обновления.
Есть ли где-нибудь, что показывает некоторый код, как получить токен обновления, поскольку документация или любая ссылка на него в Интернете очень бедна.
Мне действительно нужна помощь, чтобы эта работа работала, поскольку я пытался за последние пару недель и никуда не денусь.
У меня длинный ответ, но это должно быть большой помощью. У меня была такая же проблема с плохой документацией, и я также пытаюсь получить список видео из плейлиста для моего проекта. API v3 волшебным образом начал работать для меня после битвы за последние пару дней, вот что я сделал.
Сначала был фактически получен ключ API. Я уверен, что вы уже были в Google Developers Console, но на всякий случай вот что нужно сделать для этого шага:
Это серьезная проблема, потому что вам нужен ключ API для простого запроса данных без авторизации, например, получение списка видео из списка воспроизведения. Чтобы получить ключ API, вернитесь в раздел «API», нажмите «API данных YouTube 3», и вот экран с индикатором загрузки, который никогда ничего не нагружает. Однако вы можете нажать «Квота» здесь, и он перенесет вас в более старую версию Консоли разработчиков.
Из этой старой версии вы можете перейти к «API-доступу» и добавить ключи простого доступа к API (ключи API работают в этой старой версии, но не в новой версии Консоли разработчиков). Я мог ошибаться в этом, но я думаю, что «Создать новый ключ сервера …» для серверных языков, таких как PHP, и «Создать новый ключ браузера …» – для клиентских языков, таких как Javascript. Есть также кнопки для Android и iOS-ключей, но я предполагаю, что вам это не нужны. Во всяком случае, я использую cURL в PHP, и для меня работал серверный ключ, я настроил его на любые рефереры, пока мой проект все еще находится в разработке.
После того, как вы получите свой Ключ для серверных приложений под Простым API-доступом , может быть какое-то время, прежде чем все запросы, использующие ключ, действительно будут работать. Для меня мой сценарий не работал около 4-5 часов (я думаю, что на этой неделе у Google возникают настоящие проблемы с их серверами, и именно поэтому мне пришлось «обмануть» его, предоставив мне ключ API. почему страница «Учетные данные» не загружает ничего).
Теперь воспользуйтесь инструментом https://developers.google.com/apis-explorer/#p/youtube/v3/youtube.playlists.list, чтобы помочь создать запрос GET. Введите «фрагмент» в поле детали и целое число для maxResults, если это необходимо. Затем получите идентификатор списка воспроизведения из URL-адреса на Youtube. Например, серия «Clueless Gamer» Конана – https://www.youtube.com/playlist?list=PLVL8S3lUHf0RqD7TZ6hohWk8Sd3asaqnY , поэтому идентификатор PLVL8S3lUHf0RqD7TZ6hohWk8Sd3asaqnY . Затем нажмите « Выполнить» .
Теперь он даст вам запрос GET, что-то вроде
GET https://www.googleapis.com/youtube/v3/playlists?part=snippet&id=PLVL8S3lUHf0RqD7TZ6hohWk8Sd3asaqnY&maxResults=20&key={YOUR_API_KEY} X-JavaScript-User-Agent: Google APIs Explorer
Просто возьмите URL-адрес после слова GET и замените {YOUR_API_KEY} на свой ключ API.
Теперь вы можете использовать этот URL-адрес в запросе cURL, например, где $ request_url – это URL-адрес выше с вашим ключом API в нем:
//http://codular.com/curl-with-php // Get cURL resource $curl = curl_init(); // Set some options - we are passing in a useragent too here curl_setopt_array($curl, array( CURLOPT_RETURNTRANSFER => 1, CURLOPT_URL => $request_url, CURLOPT_USERAGENT => 'Codular Sample cURL Request' )); // Send the request & save response to $resp $resp = curl_exec($curl); // Close request to clear up some resources curl_close($curl);
Теперь $ resp будет содержать строку JSON, которую вы можете проанализировать и получить данные для видео этого плейлиста. Я оставлю JSON синтаксический анализ до вас, но именно так вы получаете данные, похожие на старый gdata путь в v2. И нет аутентификации 🙂
Он может сообщить об ошибке, что ваш ключ API не авторизован, и в этом случае вам нужно будет подождать несколько часов. Опять же, я думаю, что Google в последнее время испытывает проблемы с сервером, поэтому будьте терпеливы; это не ваш скрипт, который не работает, это Google;)
Отмечу, что
$resp = file_get_contents($request_url);
похоже, работает, но я честно не знаю, какой метод «лучше» между cURL и file_get_contents ().
Мне приходилось заниматься этим, потому что я не мог найти примеров того, как это сделать легко.
Оказалось, что мне нужно создать запрос POST для получения кода доступа и обновления токена, и это было достигнуто с помощью Curlfrom командной строки
url --data "code=AUHROISATON_CODE&client_id=CLIENT_ID.apps.googleusercontent.com&client_secret=CLINET_SECRET&redirect_uri=http://www.example.com&grant_type=authorization_code" https://accounts.google.com/o/oauth2/token
После нескольких ошибок, таких как «Отсутствует grant_type», «Недопустимый код» теперь работает.
Я отозвал доступ к приложению, выполнил следующий запрос GET (взятый из https://developers.google.com/accounts/docs/OAuth2WebServer#formingtheurl ), чтобы получить код и смог использовать код в приведенном выше описании Curl
https://accounts.google.com/o/oauth2/auth ? scope = https://www.googleapis.com/auth/youtube& state = security_token% 3D138r5719ru3e1% 26url% 3Dhttps: //oa2cb.example.com/myHome& redirect_uri = https% 3A% 2F% 2Foauth2-login-demo.appspot. com% 2Fcode &, response_type = code & client_id = 812741506391.apps.googleusercontent.com & approved_prompt = force