如何列出YouTube频道发布的所有视频?

时间:2019-06-02 01:24:28

标签: video youtube youtube-api youtube-data-api

我正在建立一个网站来伴随我的YouTube频道,并且我希望在该网站的页面上(类似于该网站:http://hermitcraft.com/)在我的频道上发布所有最新视频的列表。 但仅适用于一个特定频道。

我是google apis系统的新手,并发现它完全不知所措。

我的Web服务器是apache,运行php 7,但由于它是Web主机,所以我无权访问任何控制台。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

假设您能够使用PHP进行编程,建议您从小处着手,并逐步从YouTube Data API OverviewPHP QuickstartPHP Client Library: Getting Started开始。无论如何,the reference documentation是您最好的朋友-只是您必须熟悉它。

您将使用PHP客户端库code,从而将其本地克隆到您的计算机上。

暂时不打扰OAuth身份验证,只能从Google的developers consoleAPI key获取与API的PlaylistItems endpoint一起使用的查询给定的channel's uploads list

Github上有一些sample code用于获取用户的上传列表,但是该代码已经很旧了,很可能有问题(它也使用OAuth授权,我已经建议您不要打扰)。这是该代码的必要部分(我做了一些修改:用'mine' => 'true'替换了'id' => $YOUR_CHANNEL_ID;但是您必须测试此代码):

  try {
    // Call the channels.list method to retrieve information about the
    // currently authenticated user's channel.
    $channelsResponse = $youtube->channels->listChannels('contentDetails', array(
      'id' => $YOUR_CHANNEL_ID,
    ));

    $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 .= "<h3>Videos in list $uploadsListId</h3><ul>";
      foreach ($playlistItemsResponse['items'] as $playlistItem) {
        $htmlBody .= sprintf('<li>%s (%s)</li>', $playlistItem['snippet']['title'],
          $playlistItem['snippet']['resourceId']['videoId']);
      }
      $htmlBody .= '</ul>';
    }
  } catch (Google_Service_Exception $e) {
    $htmlBody = sprintf('<p>A service error occurred: <code>%s</code></p>',
      htmlspecialchars($e->getMessage()));
  } catch (Google_Exception $e) {
    $htmlBody = sprintf('<p>An client error occurred: <code>%s</code></p>',
      htmlspecialchars($e->getMessage()));
  }

从一开始,您必须知道the quota system API正在实现。根据使用模式,配额可以在允许用户在API的各种端点上进行的调用次数上加上rather tight limits。任何时候,Google的开发人员控制台都会向您显示您当前的配额。

最后,是调试应用的有用工具:APIs Explorer。它允许您调用API端点并查看它们各自的JSON响应文本。