YouTube API用于获取频道上的所有视频
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了YouTube API用于获取频道上的所有视频相关的知识,希望对你有一定的参考价值。
我们需要按YouTube频道名称的视频列表(使用API)。
我们可以使用以下API获取频道列表(仅限频道名称):
https://gdata.youtube.com/feeds/api/channels?v=2&q=tendulkar
以下是频道的直接链接
https://www.youtube.com/channel/UCqAEtEr0A0Eo2IVcuWBfB9g
要么
WWW.YouTube.com/channel/HC-8jgBP-4rlI
现在,我们需要频道>> 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
但是,它没有帮助。
我们需要在频道上发布的所有视频。上传到频道的视频可能来自多个用户,因此我认为提供用户参数不会有帮助......
你需要看看YouTube Data API。您将找到有关如何访问API的文档。你也可以找到client libraries。
您也可以自己提出请求。以下是从频道中检索最新视频的示例网址:
https://www.googleapis.com/youtube/v3/search?key={your_key_here}&channelId={channel_id_here}&part=snippet,id&order=date&maxResults=20
之后,您将收到带有视频ID和详细信息的JSON
,您可以像这样构建视频网址:
http://www.youtube.com/watch?v={video_id_here}
由于每个回答此问题的人都因为500视频限制而出现问题,因此这是使用Python 3中的youtube_dl的替代解决方案。此外,不需要API密钥。
- 安装youtube_dl:https://www.youtube.com/account_advanced
sudo pip3 install youtube-dl
。该ID将从UC开始。将U替换为用于上传的U(即UU ...),这是上传播放列表。- 使用youtube-dl中的播放列表下载程序功能。理想情况下,您不希望下载默认播放列表中的每个视频,而只下载元数据。
示例(警告 - 需要几十分钟):
Find out your target channel's channel id
使用不推荐使用的API版本2,上传的URL(通道UCqAEtEr0A0Eo2IVcuWBfB9g)是:
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))
有一个API版本3。
最近我不得不从一个频道中检索所有视频,并根据YouTube开发者文档:https://gdata.youtube.com/feeds/users/UCqAEtEr0A0Eo2IVcuWBfB9g/uploads
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
如果使用此API,我强烈建议您将代码示例从默认代码段转换为完整示例。
因此,从频道中检索所有视频的基本代码可以是:
https://developers.google.com/youtube/v3/docs/channels/list
Python中的示例解决方案。从这个视频中获取帮助: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>';
像许多其他答案一样,首先要从频道ID中检索上传ID。
import urllib.request import json key = "YOUR_YOUTUBE_API_v3_BROWSER_KEY" #List of channels : mention if you are pasting channel id or username - "id" or "forUsername" ytids = [["bbcnews","forUsername"],["UCjq4pjKj9X4W9i7UnYShpVg","id"]] newstitles = [] for ytid,ytparam in ytids: urld = "https://www.googleapis.com/youtube/v3/channels?part=contentDetails&"+ytparam+"="+ytid+"&key="+key with urllib.request.urlopen(urld) as url: datad = json.loads(url.read()) uploadsdet = datad['items'] #get upload id from channel id uploadid = uploadsdet[0]['contentDetails']['relatedPlaylists']['uploads'] #retrieve list urld = "https://www.googleapis.com/youtube/v3/playlistItems?part=snippet%2CcontentDetails&maxResults=50&playlistId="+uploadid+"&key="+key with urllib.request.urlopen(urld) as url: datad = json.loads(url.read()) for data in datad['items']: ntitle = data['snippet']['title'] nlink = data['contentDetails']['videoId'] newstitles.append([nlink,ntitle]) for link,title in newstitles: print(link, title)
如文档所述(video),您可以使用频道资源类型和操作列表来获取频道中的所有视频。必须使用参数'channel id'执行此操作。
首先,您需要从用户/频道获取代表上传的播放列表的ID:
https://developers.google.com/youtube/v3/docs/channels/list#try-it
您可以使用forUsername={username}
param指定用户名,或指定mine=true
以获取您自己的用户名(您需要先进行身份验证)。包括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以供将来参考。
接下来,获取该播放列表中的视频列表:
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}
Here is来自Google Developers的视频展示了如何在YouTube API的v3
中列出频道中的所有视频。
有两个步骤:
- 查询频道以获取“上传”ID。例如
https://www.googleapis.com/youtube/v3/channels?id={channel Id}&key={API key}&part=contentDetails
- 使用此“上传”ID可查询PlaylistItems以获取视频列表。例如
https://www.googleapis.com/youtube/v3/playlistItems?playlistId={"uploads" Id}&key={API key}&part=snippet&maxResults=50
获取频道列表:
通过forUserName获取频道列表: