Nano Hash - криптовалюты, майнинг, программирование

YouTube API - открытый ключ доступа в PHP

как я могу заменить доступ OAuth2 к общедоступному ключу доступа API в Youtube API v3? Должен ли я использовать функцию setDeveloperKey? Если я сделаю так, как показано ниже, он вернется:

Доступ не настроен. Пожалуйста, используйте Google Developers Console, чтобы активировать API для своего проекта.

Я установил свой Public Access API в консоли Google, так что все должно быть в порядке.

Когда я пытаюсь получить доступ через OAuth, он работает отлично.

CORRECTED CODE:
  // Call set_include_path() as needed to point to your client library.
require_once 'Google/Client.php';
require_once 'Google/Service/YouTube.php';
session_start();

$API_KEY = 'AIzaSyB7HuVrtyiUV8ow1SegS6xxxxxxxxx';
$client = new Google_Client();
$client->setDeveloperKey($API_KEY);
$client->setScopes('https://www.googleapis.com/auth/youtube');
$redirect = filter_var('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'],
  FILTER_SANITIZE_URL);
$client->setRedirectUri($redirect);

// Define an object that will be used to make all API requests.
$youtube = new Google_Service_YouTube($client);
    // Call the channels.list method to retrieve information about the
    // currently authenticated user's channel.
    $channelsResponse = $youtube->channels->listChannels('contentDetails', array(
      'id' => 'UUJQ2_kh7m7muj2xxxx',
    ));

    $htmlBody = '';

      $playlistItemsResponse = $youtube->playlistItems->listPlaylistItems('snippet', array(
        'playlistId' => => 'UUJQ2_kh7m7muj2xxxx',
        'maxResults' => 50
      ));

      $htmlBody .= "";
      foreach ($playlistItemsResponse['items'] as $playlistItem) {
       $title =  $playlistItem['snippet']['title'];
       $video_id = $playlistItem['snippet']['resourceId']['videoId'];
          $htmlBody .= "<a href='https://www.youtube.com/watch?v=".$video_id."'>";
          $htmlBody .= "<img src='http://img.youtube.com/vi/".$video_id."/1.jpg'>".$title."</a></br>";
      }
      $htmlBody .= '</ul>';
?>

<!doctype html>
<meta charset="utf-8">
<html>
  <head>
    <title>My Uploads</title>
  </head>
  <body>
    <?=$htmlBody?>
  </body>
</html>

ОШИБКА ПРИ ПОЛУЧЕНИИ:

"domain": "usageLimits", "reason": "accessNotConfigured", "message": "Доступ не настроен. Используйте Google Developers Console, чтобы активировать API для вашего проекта". }], «code»: 403, «message»: «Доступ не настроен. Используйте Google Developers Console, чтобы активировать API для вашего проекта».

19.06.2014

  • В каком запросе выдается ошибка? YouTube API версии 3 не использует developerKey. Добавьте ключ api в качестве параметра в свой запрос, например: & key = AIzaSyBsRpXjl8oAymwFZ0CMxxxxxxxxxx 19.06.2014
  • И как я могу заменить проверку OAuth на решение ключа API? Я пытался изменить пример с сайта разработчиков Google. Могу ли я использовать это решение с ключом API? Я использовал именно это (конечно, со своим ключом доступа) - developers.google.com / youtube / v3 / code_samples / 19.06.2014
  • OAuth 2 также будет работать для запросов более старых версий API, если они не устарели. OAuth 2 используется для получения access_token, необходимого для доступа к частным данным YouTube. Затем для запроса GET вы можете добавить параметр & access_token = ..... вместо & key = ..... 19.06.2014
  • Этот пример Получить мои загрузки, на которые вы ссылаетесь: работал ли этот пример до того, как вы внесли какие-либо изменения в код? 19.06.2014
  • Да, он отлично работает, если я использую OAuth, но я хочу, чтобы мои друзья могли видеть список моих загруженных видео (только общедоступных), и если я использую OAuth, им придется входить в систему через мою учетную запись google. Вот почему я решил использовать открытый ключ доступа, но не могу понять, как изменить отправленный мной пример, чтобы использовать ключ API вместо OAuth. 19.06.2014
  • Чтобы показывать общедоступные видео с использованием API версии 3, вы указываете только ключ API. Например с параметром & key = ... (ваш api-ключ). В списке каналов вы меняете параметр mine на параметр id и в качестве значения свой идентификатор каналов. ($ youtube- ›каналы-› listChannels ('contentDetails', array ('mine' = ›'true',) Вы больше не можете использовать мой. 19.06.2014
  • Я исправил код (см. Выше), но теперь он предупреждает: Ошибка при вызове GET googleapis.com/youtube/v3/: (403) Доступ не настроен. Пожалуйста, используйте Google Developers Console, чтобы активировать API для своего проекта. Любая помощь, пожалуйста? 19.06.2014
  • Я проверил ваш код и обнаружил ошибку. Я вставлю свой измененный и рабочий код в ответ. 19.06.2014

Ответы:


1

Изменил ваш код. У меня это работает.

<?PHP
 // (1): Choose a valid channel_id
 $myChannelId = 'UUJQ2_kh7m7muj2xxxx';              // 'REPLACE_ME';
 // (2): api version 3
 $API_KEY = 'AIzaSyB7HuVrtyiUV8ow1SegS6xxxxxxxxx';  // 'REPLACE_ME';

 // (3): Library from: https://github.com/google/google-api-php-client
 // set_include_path();  // REPLACE_ME as needed to point to your client library.
 require_once 'Google/Client.php';
 require_once 'Google/Service/YouTube.php';

session_start();

$client = new Google_Client();
$client->setDeveloperKey($API_KEY);
//$client->setScopes('https://www.googleapis.com/auth/youtube');
//$redirect = filter_var('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'],
//  FILTER_SANITIZE_URL);
//$client->setRedirectUri($redirect);

// Define an object that will be used to make all API requests.
$youtube = new Google_Service_YouTube($client);
    // Call the channels.list method to retrieve information about the
    // currently authenticated user's channel.
    $channelsResponse = $youtube->channels->listChannels('contentDetails', array(
      'id' => $myChannelId,
    ));

    $htmlBody = '';
    foreach ($channelsResponse['items'] as $channel) {
      // Extract the unique playlist ID that identifies the list of videos
      // uploaded to the channel, and then call the playlistItems.list method
      // to retrieve that list.
      $uploadsListId = $channel['contentDetails']['relatedPlaylists']['uploads'];
      $playlistItemsResponse = $youtube->playlistItems->listPlaylistItems('snippet', array(
        'playlistId' => $uploadsListId,
        'maxResults' => 50
      ));
      $htmlBody .= " ";

      foreach ($playlistItemsResponse['items'] as $playlistItem) {
       $title =  $playlistItem['snippet']['title'];
       $video_id = $playlistItem['snippet']['resourceId']['videoId'];
       $htmlBody .= "<a href='https://www.youtube.com/watch?v=".$video_id."'>";
       $htmlBody .= "<img src='http://img.youtube.com/vi/".$video_id."/1.jpg'>".$title."</a></br>";
      }
      $htmlBody .= '</ul>';
      }
?>

<!doctype html>
<meta charset="utf-8">
<html>
  <head>
    <title>My Uploads</title>
  </head>
  <body>
    <?PHP print $htmlBody?>
  </body>
</html>
19.06.2014
  • Большое спасибо за ваши усилия, Алс, но, к сожалению, это все еще дает мне ошибку (я также пытался сгенерировать новые ключи, но все еще безуспешно). Я поставил предупреждение об ошибке после исходного кода. 19.06.2014
  • @ LukášJežek Я запускал ваш код с самого начала: это тоже было неправильным для меня. Итак, я внес несколько изменений. Замените свой код обновленным, чтобы я мог снова запустить код ypur. 19.06.2014
  • Спасибо, Als, я постараюсь, но может возникнуть проблема где-то еще, потому что, если я использую следующий URL, я получаю ошибки, пожалуйста, см. Выше, googleapis.com/youtube/v3/ 20.06.2014
  • @ LukášJežek Да, я тоже это вижу. В своем рабочем коде я только заменил свой API-ключ на ваш, а потом получаю сообщение об ошибке. Проверьте настройки в Консоли и сгенерируйте новый API-ключ 20.06.2014
  • Спасибо, Алс, я попытался сгенерировать 3 новых ключа API, а также создать новый проект, но все тот же. Но в этом должна быть какая-то проблема, код в порядке. Большое спасибо за ваши усилия, если я разберусь, дам обновление. 20.06.2014
  • @ LukášJežek Я думаю, это должно быть легко. Вы видели это видео об api-key: youtube.com/watch?v=Im69kzhpR3I 20.06.2014
  • Итак, наконец, он начал работать, я создал новый проект и новый ключ API, затем мне пришлось ждать около 8 часов (он не работал с новым ключом api сразу), он работает :-) Должно быть что-то застряло. БОЛЬШОЕ СПАСИБО! 20.06.2014
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..