Raj*_*ani 166 youtube youtube-api
我们需要按YouTube频道名称的视频列表(使用API).
我们可以使用以下API获取频道列表(仅限频道名称):
https://gdata.youtube.com/feeds/api/channels?v=2&q=tendulkar
Run Code Online (Sandbox Code Playgroud)
以下是频道的直接链接
https://www.youtube.com/channel/UCqAEtEr0A0Eo2IVcuWBfB9g
Run Code Online (Sandbox Code Playgroud)
要么
WWW.YouTube.com/channel/HC-8jgBP-4rlI
Run Code Online (Sandbox Code Playgroud)
现在,我们需要频道>> 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
但是,它没有帮助.
我们需要在频道上发布的所有视频.上传到频道的视频可能来自多个用户,因此我认为提供用户参数不会有帮助......
aks*_*hay 200
您需要查看YouTube数据API.您将找到有关如何访问API的文档.您还可以找到客户端库.
您也可以自己提出请求.以下是从频道中检索最新视频的示例网址:
https://www.googleapis.com/youtube/v3/search?key={your_key_here}&channelId={channel_id_here}&part=snippet,id&order=date&maxResults=20
Run Code Online (Sandbox Code Playgroud)
之后,您将收到JSON带有视频ID和详细信息的内容,您可以构建视频网址,如下所示:
http://www.youtube.com/watch?v={video_id_here}
Run Code Online (Sandbox Code Playgroud)
jam*_*ose 90
首先,您需要从用户/频道获取代表上传的播放列表的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}
vir*_*mic 58
以下是来自Google Developers的视频,其中展示了如何v3在YouTube API中列出频道中的所有视频.
有两个步骤:
https://www.googleapis.com/youtube/v3/channels?id={channel Id}&key={API key}&part=contentDetailshttps://www.googleapis.com/youtube/v3/playlistItems?playlistId={"uploads" Id}&key={API key}&part=snippet&maxResults=50iOS*_*iOS 19
获取频道列表:
通过forUserName获取频道列表:
按频道ID获取频道列表:
获取频道部分:
获取播放列表:
按频道ID获取播放列表:
通过带有pageToken的频道ID获取播放列表:
要获得PlaylistItems:
通过PlayListId获取PlaylistItems列表:
要获取视频:
按视频ID获取视频列表:
通过多个视频ID获取视频列表:
获取评论列表
通过视频ID获取评论列表:
https://www.googleapis.com/youtube/v3/commentThreads?part=snippet,replies&videoId=el **** kQak&key = A ********** k
通过频道ID获取评论列表:
https://www.googleapis.com/youtube/v3/commentThreads?part=snippet,replies&channelId=U ***** Q&key = AI ******** k
通过allThreadsRelatedToChannelId获取评论列表:
https://www.googleapis.com/youtube/v3/commentThreads?part=snippet,replies&allThreadsRelatedToChannelId=UC ***** ntcQ&key = AI ***** k
这里所有的api都是Get方法。
根据频道ID,我们不能直接获取所有视频,这很重要。
集成https://developers.google.com/youtube/v3/quickstart/ios?ver=swift
der*_*mid 10
简短回答:
这是一个名为scrapetube 的库,可以帮助解决这个问题。
pip install scrapetube
import scrapetube
import simplejson as json
videos = scrapetube.get_channel("UC9-y-6csu5WGm29I7JiwpnA")
for video in videos:
print(video['videoId'])
print(video['title']['runs'][0]['text'])
print(video['publishedTimeText']['simpleText'])
print('\r\n')
# DEBUG: print(json.dumps(video))
Run Code Online (Sandbox Code Playgroud)
长答案:
由于缺乏任何其他解决方案,上述模块是我创建的。这是我尝试过的:
import youtube_dl
youtube_dl_options = {
'skip_download': True,
'ignoreerrors': True
}
with youtube_dl.YoutubeDL(youtube_dl_options) as ydl:
videos = ydl.extract_info(f'https://www.youtube.com/channel/{channel_id}/videos')
Run Code Online (Sandbox Code Playgroud)
这也适用于小型频道,但对于较大的频道,我会因为在如此短的时间内发出如此多的请求而被 youtube 阻止(因为 youtube-dl 会为频道中的每个视频下载更多信息)。
scrapetube所以我制作了一个使用 Web API 来获取所有视频的库。
由于每个回答这个问题的人都因500 个视频限制而遇到问题,因此这里有一个使用Python 3中的youtube_dl的替代解决方案。此外,不需要 API 密钥。
sudo pip3 install youtube-dl示例(警告 - 需要数十分钟):
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))
Run Code Online (Sandbox Code Playgroud)
小智 7
尝试使用以下内容.它可能会帮助你.
https://gdata.youtube.com/feeds/api/videos?author=cnn&v=2&orderby=updated&alt=jsonc&q=news
在此作者,您可以指定频道名称和"q",因为您可以提供搜索关键字.
下面是一个Python替代品,不需要任何特殊包.通过提供频道ID,它返回该频道的视频链接列表.请注意,您需要一个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
Run Code Online (Sandbox Code Playgroud)
仅需三个步骤:
订阅:列表-> https://www.googleapis.com/youtube/v3/subscriptions?part=snippet&maxResults=50&mine=true&access_token= {oauth_token}
频道:列表-> https://www.googleapis.com/youtube/v3/channels?part=contentDetails&id= {channel_id}&key = {YOUR_API_KEY}
PlaylistItems:列表-> https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&playlistId= {playlist_id}&key = {YOUR_API_KEY}
这是将返回您频道下所有视频ID的代码
<?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);
Run Code Online (Sandbox Code Playgroud)
注意:登录后,您可以在https://www.youtube.com/account_advanced上获取频道ID 。
由于在这里和其他地方共享了这些参考,我制作了一个在线脚本/工具,可以用来获取频道的所有视频。
它结合了API调用youtube.channels.list,playlistItems,videos。它使用递归函数使异步回调在获得有效响应后运行下一次迭代。
这还可以限制一次发出的实际请求数,从而使您避免违反YouTube API规则。共享缩短的片段,然后共享完整代码。通过使用响应中包含的nextPageToken值来获取下一个50个结果,我每次调用限制得到的最大结果数为50个左右。
function getVideos(nextPageToken, vidsDone, params) {
$.getJSON("https://www.googleapis.com/youtube/v3/playlistItems", {
key: params.accessKey,
part: "snippet",
maxResults: 50,
playlistId: params.playlistId,
fields: "items(snippet(publishedAt, resourceId/videoId, title)), nextPageToken",
pageToken: ( nextPageToken || '')
},
function(data) {
// commands to process JSON variable, extract the 50 videos info
if ( vidsDone < params.vidslimit) {
// Recursive: the function is calling itself if
// all videos haven't been loaded yet
getVideos( data.nextPageToken, vidsDone, params);
}
else {
// Closing actions to do once we have listed the videos needed.
}
});
}
Run Code Online (Sandbox Code Playgroud)
这样就获得了视频的基本列表,包括ID,标题,发布日期等。但是要获得每个视频的更多细节(例如观看次数和喜欢),必须对进行API调用videos。
// Looping through an array of video id's
function fetchViddetails(i) {
$.getJSON("https://www.googleapis.com/youtube/v3/videos", {
key: document.getElementById("accesskey").value,
part: "snippet,statistics",
id: vidsList[i]
}, function(data) {
// Commands to process JSON variable, extract the video
// information and push it to a global array
if (i < vidsList.length - 1) {
fetchViddetails(i+1) // Recursive: calls itself if the
// list isn't over.
}
});
Run Code Online (Sandbox Code Playgroud)
在此处查看完整代码,并在此处查看实时版本。(编辑:固定github链接)
编辑:依赖关系:jQuery,Papa.parse
使用已弃用的 API 版本 2,上传(通道 UCqAEtEr0A0Eo2IVcuWBfB9g)的 URL 为:
https://gdata.youtube.com/feeds/users/UCqAEtEr0A0Eo2IVcuWBfB9g/uploads
有一个 API 版本 3。
| 归档时间: |
|
| 查看次数: |
194922 次 |
| 最近记录: |