YouTube API:不获取给定频道的所有视频



我一直在尝试获取给定频道ID的所有视频。但我没有获取的所有视频

代码我试图检索该频道的所有视频:

api_key =  API_KEY
base_video_url  =  'https://www.youtube.com/watch?v='
base_search_url  =  'https://www.googleapis.com/youtube/v3/search?'
raw_url = 'https://www.googleapis.com/youtube/v3/' 
'channels?key={}&forUsername={}&part=id'
def getChannelID(username):
''' returns the channel ID '''
r=requests.get(raw_url.format(api_key,username))
json=r.json()
print(json['items'][0]['id'])
return json['items'][0]['id']
def getchannelVideos():
''' returns list of all videos of a given channel '''
chanId=getChannelID('tseries')
first_url = base_search_url + 
'order=date&part=snippet&channelId={}&maxResults=50&key={}'
.format(chanId,api_key)
video_links = []
url = first_url
while True:
inp = requests.get(url)
resp = inp.json()
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
print('working') #used this to count repetitions of while loop
return video_links

这里给出的频道是T系列,到目前为止已经有11537个视频[点击查看显示计数的频道图像]但我只收到589个视频

我用这条线来计算迭代次数,而循环将进行

print('working')

为此,我观察到while循环在19次迭代后结束(我已经尝试了许多通道,但重复也是如此)

这是最后一次(第19次迭代)提供给我的Json数据

{'etag': "cbz3lIQ2N25AfwNr-BdxUVxJ_QY/7SEM6nSU4tBD7ZsR5Abt5L-uqAE",
'items': [],
'kind': 'youtube#searchListResponse',
'pageInfo': {'resultsPerPage': 50, 'totalResults': 15008},
'prevPageToken': 'CLYHEAE',
'regionCode': 'IN'}

为什么API没有提供nextpageID,尽管总结果是15008??

Search调用不用于枚举通道。

我一直在用HTML抓取频道>视频页面,直到最近发现这个。

https://stackoverflow.com/a/27872244/975887

从本质上讲,步骤是

  • 查找所需频道的频道ID
  • 列出播放列表(youtube.channels.listid设置为channelId,将部分设置为contentDetails)
  • 查找名称为uploads的播放列表的ID
  • 列出播放列表项(youtube.playlistItems.list设置playlistId,并将part设置为snippet,可选地将maxResults设置为50)
  • 使用nextPageToken浏览结果

如果您只知道视频ID,则可以调用ID设置为视频ID、part设置为snippetyoutube.videos.list,并从结果中提取频道ID。

这列出了该频道上传的所有视频,与搜索呼叫不同,它在100个项目后不会放弃,结果总是来自指定频道。

作为额外的奖励,与每次呼叫花费100多个配额点的搜索呼叫相比,每次呼叫仅花费1-3个配额点(取决于您请求的其他parts)。

正如评论中已经提到的,可以从结果中检索到的最大视频是50。因此,如果你想访问其他51-100等等,你必须使用nextPageToken:

pageToken

pageToken参数标识结果集中应返回的特定页面。在API响应中nextPageToken和prevPageToken属性标识其他页面可以检索到。

查看此Python on App Engine代码示例,了解使用Python进行Youtube API调用的示例。

相关内容

  • 没有找到相关文章

最新更新