Youtube Api来获取频道上的所有video

我们需要YouTube的频道名称(使用API​​)

我们可以通过使用下面的API获得频道列表(仅ChannelName)

https://gdata.youtube.com/feeds/api/channels?v=2&q=tendulkar 

下面是渠道的直接链接

 https://www.youtube.com/channel/UCqAEtEr0A0Eo2IVcuWBfB9g 

要么

 WWW.YouTube.com/channel/HC-8jgBP-4rlI 

现在我们需要频道的video>> UCqAEtEr0A0Eo2IVcuWBfB9g或HC-8jgBP-4rlI

我们尝试了

https://gdata.youtube.com/feeds/api/videos?v=2&uploader=partner&User=UC7Xayrf2k0NZiz3S04WuDNQ https://gdata.youtube.com/feeds/api/videos?v=2&uploader=partner&q=UC7Xayrf2k0NZiz3S04WuDNQ

但是,这并没有帮助。 我们需要在该频道上发布的所有video。 上传到频道的video可以来自多个用户,因此我不认为提供用户参数会有所帮助。

您需要查看YouTube Data API 。 你会发现有关如何访问API的文档。 你也可以find客户端库 。

你也可以自己提出要求。 以下是从频道中检索最新video的示例url:

 https://www.googleapis.com/youtube/v3/search?key={your_key_here}&channelId={channel_id_here}&part=snippet,id&order=date&maxResults=20 

之后,您将收到带有videoID和细节的JSON ,您可以像这样构buildvideourl:

 http://www.youtube.com/watch?v={video_id_here} 

首先,您需要获取代表用户/频道上传的播放列表的ID:

https://developers.google.com/youtube/v3/docs/channels/list#try-it

您可以使用forUsername={username}参数指定forUsername={username} ,或指定mine=true来获取您自己的(您需要首先进行身份validation)。 包含part=contentDetails以查看播放列表。

GET https://www.googleapis.com/youtube/v3/channels?part=contentDetails&forUsername=jambrose42&key={YOUR_API_KEY}

结果"relatedPlaylists"将包括"likes""uploads"播放列表。 抓住那个"upload"播放列表ID。 另外请注意, "id"是您的channelID供将来参考。

接下来,获取该播放列表中的video列表:

https://developers.google.com/youtube/v3/docs/playlistItems/list#try-it

只需放在播放列表中!

GET https://www.googleapis.com/youtube/v3/playlistItems?part=snippet%2CcontentDetails&maxResults=50&playlistId=UUpRmvjdu3ixew5ahydZ67uA&key={YOUR_API_KEY}

以下是来自Google Developers的video,展示了如何在Youtube API的第v3中列出频道中的所有video。

有两个步骤:

  1. 查询频道以获取“上传”ID。 例如https://www.googleapis.com/youtube/v3/channels?id={channel Id}&key={API key}&part=contentDetails
  2. 使用此“上传”ID来查询PlaylistItems以获取video列表。 例如https://www.googleapis.com/youtube/v3/playlistItems?playlistId={"uploads" Id}&key={API key}&part=snippet&maxResults=50

试试像这样可以帮助你:

https://gdata.youtube.com/feeds/api/videos?author=cnn&v=2&orderby=updated&alt=jsonc&q=news

这里的作者,你可以指定你的频道名称和“q”,因为你可以给你的search关键词。

使用不推荐使用的api版本2,上传(频道UCqAEtEr0A0Eo2IVcuWBfB9g)的url为: https ://gdata.youtube.com/feeds/users/UCqAEtEr0A0Eo2IVcuWBfB9g/uploads

有一个api版本3。

只需3步

1)订阅:列表 – > https://www.googleapis.com/youtube/v3/subscriptions?part=snippet&maxResults=50&mine=true&access_token= {oauth_token}

2)渠道:列表 – > https://www.googleapis.com/youtube/v3/channels?part=contentDetails&id= {channel_id}&key = {YOUR_API_KEY}

3)PlaylistItems:列表 – > https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&playlistId= {playlist_id}&key = {YOUR_API_KEY}

这是将返回您的频道下的所有videoID的代码

 <?php $baseUrl = 'https://www.googleapis.com/youtube/v3/'; // https://developers.google.com/youtube/v3/getting-started $apiKey = 'API_KEY'; // If you don't know the channel ID see below $channelId = 'CHANNEL_ID'; $params = [ 'id'=> $channelId, 'part'=> 'contentDetails', 'key'=> $apiKey ]; $url = $baseUrl . 'channels?' . http_build_query($params); $json = json_decode(file_get_contents($url), true); $playlist = $json['items'][0]['contentDetails']['relatedPlaylists']['uploads']; $params = [ 'part'=> 'snippet', 'playlistId' => $playlist, 'maxResults'=> '50', 'key'=> $apiKey ]; $url = $baseUrl . 'playlistItems?' . http_build_query($params); $json = json_decode(file_get_contents($url), true); $videos = []; foreach($json['items'] as $video) $videos[] = $video['snippet']['resourceId']['videoId']; while(isset($json['nextPageToken'])){ $nextUrl = $url . '&pageToken=' . $json['nextPageToken']; $json = json_decode(file_get_contents($nextUrl), true); foreach($json['items'] as $video) $videos[] = $video['snippet']['resourceId']['videoId']; } print_r($videos); 

注意 :login后,您可以通过https://www.youtube.com/account_advanced获取频道ID。;

最近不得不从频道检索所有video,并根据YouTube开发者文档: https : //developers.google.com/youtube/v3/docs/playlistItems/list

 function playlistItemsListByPlaylistId($service, $part, $params) { $params = array_filter($params); $response = $service->playlistItems->listPlaylistItems( $part, $params ); print_r($response); } playlistItemsListByPlaylistId($service, 'snippet,contentDetails', array('maxResults' => 25, 'playlistId' => 'id of "uploads" playlist')); 

$service是您的Google_Service_YouTube对象。

因此,您必须从频道获取信息以检索“上传”播放列表,该列表实际上是该频道上传的所有video: https : //developers.google.com/youtube/v3/docs/channels/list

如果新增了此API,我强烈build议将代码示例从默认片段转换为完整示例。

因此,从一个频道中检索所有video的基本代码可以是:

 class Youtube { const DEV_KEY = 'YOUR_DEVELOPPER_KEY'; private $client; private $youtube; private $lastChannel; public function __construct() { $this->client = new Google_Client(); $this->client->setDeveloperKey(self::DEV_KEY); $this->youtube = new Google_Service_YouTube($this->client); $this->lastChannel = false; } public function getChannelInfoFromName($channel_name) { if ($this->lastChannel && $this->lastChannel['modelData']['items'][0]['snippet']['title'] == $channel_name) { return $this->lastChannel; } $this->lastChannel = $this->youtube->channels->listChannels('snippet, contentDetails, statistics', array( 'forUsername' => $channel_name, )); return ($this->lastChannel); } public function getVideosFromChannelName($channel_name, $max_result = 5) { $this->getChannelInfoFromName($channel_name); $params = [ 'playlistId' => $this->lastChannel['modelData']['items'][0]['contentDetails']['relatedPlaylists']['uploads'], 'maxResults'=> $max_result, ]; return ($this->youtube->playlistItems->listPlaylistItems('snippet,contentDetails', $params)); } } $yt = new Youtube(); echo '<pre>' . print_r($yt->getVideosFromChannelName('CHANNEL_NAME'), true) . '</pre>'; 

由于这个线程中的每个人都有问题,由于500video的限制,这里是使用Python 3中的 youtube_dl的替代解决scheme。 另外, 不需要API密钥

  1. 安装youtube_dl: sudo pip3 install youtube-dl
  2. 找出您的目标频道的频道ID 。 ID将以UC开始。 将U上传的频道replace为U(即UU …),这是上传播放列表
  3. 使用youtube-dl中的播放列表下载器function 。 理想情况下,您不希望下载默认的播放列表中的所有video,但只能下载元数据。

示例(警告 – 需要几十分钟):

 import youtube_dl, pickle # UCVTyTA7-g9nopHeHbeuvpRA is the channel id (1517+ videos) PLAYLIST_ID = 'UUVTyTA7-g9nopHeHbeuvpRA' # Late Night with Seth Meyers with youtube_dl.YoutubeDL({'ignoreerrors': True}) as ydl: playd = ydl.extract_info(PLAYLIST_ID, download=False) with open('playlist.pickle', 'wb') as f: pickle.dump(playd, f, pickle.HIGHEST_PROTOCOL) vids = [vid for vid in playd['entries'] if 'A Closer Look' in vid['title']] print(sum('Trump' in vid['title'] for vid in vids), '/', len(vids)) 

下面是一个Python的替代品,不需要任何特殊的软件包。 通过提供频道ID,它将返回该频道的video链接列表。 请注意,您需要一个API密钥才能使用。

 import urllib import json def get_all_video_in_channel(channel_id): api_key = YOUR API KEY base_video_url = 'https://www.youtube.com/watch?v=' base_search_url = 'https://www.googleapis.com/youtube/v3/search?' first_url = base_search_url+'key={}&channelId={}&part=snippet,id&order=date&maxResults=25'.format(api_key, channel_id) video_links = [] url = first_url while True: inp = urllib.urlopen(url) resp = json.load(inp) for i in resp['items']: if i['id']['kind'] == "youtube#video": video_links.append(base_video_url + i['id']['videoId']) try: next_page_token = resp['nextPageToken'] url = first_url + '&pageToken={}'.format(next_page_token) except: break return video_links 

由于文档状态链接,您可以使用频道资源types和操作列表来获取频道中的所有video。此操作必须使用参数“频道ID”执行。