分页在 YouTube API (apiclient.discovery) 中如何工作?
How does Pagination work in YouTube API (apiclient.discovery)?
我对使用 YouTube API 还很陌生,我一直在寻找一种方法来收集大量频道数据。但是,API 每个请求限制为 50 个结果。为了获得更多结果,它允许您使用分页。当我查询结果时,我得到以下标记:
'nextPageToken': 'CDIQAA'
此令牌可用于查询下一组结果。因此,它允许我转到第 2 页并在那里获得新结果。但是,当我到达第 2 页时,此令牌值发生变化。这导致了以下问题:
如何使用页面 token/pagination 获得所有可能的结果?
我知道这个查询会给出很多结果,我需要过滤更多 ;)
from apiclient.discovery import build
api_key = "My_key"
youtube = build('youtube','v3',developerKey = api_key)
print(type(youtube))
request = youtube.search().list(
q='Fishing',
part='snippet',
type='channel',
maxResults=50
)
print(type(request))
res = request.execute()
print(res)
for item in res['items']:
print(item['snippet']['title'])
有一个名为 pageToken 的参数,您可以随请求一起发送。文档 implementation/pagination 中对此有一些介绍,但不多。
request = youtube.search().list(
q='Fishing',
part='snippet',
type='channel',
pageToken='tokenFromPrevousCall',
maxResults=50
)
诀窍是将其添加到循环中并递归执行。它接缝客户端库可能有一些可以帮助 docs/pagination
request = youtube.search().list(
q = 'A query',
part = 'id,snippet',
type = 'video',
maxResults = 50,
relevanceLanguage = 'en',
videoDuration = 'long'
)
while request:
response = request.execute()
for item in response['items']:
...
request = youtube.search().list_next(
request, response) // Get next set of results
我相信你的目标如下。
- 您想使用
pageToken
从 youtube.search().list(q = 'A query', part = 'id,snippet', type = 'video', maxResults = 50, relevanceLanguage = 'en', videoDuration = 'long')
检索数据。
这样的话,下面的修改怎么样?
修改后的脚本:
from apiclient.discovery import build
api_key = "My_key"
youtube = build('youtube', 'v3', developerKey=api_key)
data = []
pageToken = ""
while True:
res = youtube.search().list(
q='Fishing',
part='snippet',
type='channel',
maxResults=50,
pageToken=pageToken if pageToken != "" else ""
).execute()
v = res.get('items', [])
if v:
data.extend(v)
pageToken = res.get('nextPageToken')
if not pageToken:
break
# print(len(data)) # You can check the number of retrieved data.
for item in data:
print(item['snippet']['title'])
参考:
我对使用 YouTube API 还很陌生,我一直在寻找一种方法来收集大量频道数据。但是,API 每个请求限制为 50 个结果。为了获得更多结果,它允许您使用分页。当我查询结果时,我得到以下标记:
'nextPageToken': 'CDIQAA'
此令牌可用于查询下一组结果。因此,它允许我转到第 2 页并在那里获得新结果。但是,当我到达第 2 页时,此令牌值发生变化。这导致了以下问题:
如何使用页面 token/pagination 获得所有可能的结果?
我知道这个查询会给出很多结果,我需要过滤更多 ;)
from apiclient.discovery import build
api_key = "My_key"
youtube = build('youtube','v3',developerKey = api_key)
print(type(youtube))
request = youtube.search().list(
q='Fishing',
part='snippet',
type='channel',
maxResults=50
)
print(type(request))
res = request.execute()
print(res)
for item in res['items']:
print(item['snippet']['title'])
有一个名为 pageToken 的参数,您可以随请求一起发送。文档 implementation/pagination 中对此有一些介绍,但不多。
request = youtube.search().list(
q='Fishing',
part='snippet',
type='channel',
pageToken='tokenFromPrevousCall',
maxResults=50
)
诀窍是将其添加到循环中并递归执行。它接缝客户端库可能有一些可以帮助 docs/pagination
request = youtube.search().list(
q = 'A query',
part = 'id,snippet',
type = 'video',
maxResults = 50,
relevanceLanguage = 'en',
videoDuration = 'long'
)
while request:
response = request.execute()
for item in response['items']:
...
request = youtube.search().list_next(
request, response) // Get next set of results
我相信你的目标如下。
- 您想使用
pageToken
从youtube.search().list(q = 'A query', part = 'id,snippet', type = 'video', maxResults = 50, relevanceLanguage = 'en', videoDuration = 'long')
检索数据。
这样的话,下面的修改怎么样?
修改后的脚本:
from apiclient.discovery import build
api_key = "My_key"
youtube = build('youtube', 'v3', developerKey=api_key)
data = []
pageToken = ""
while True:
res = youtube.search().list(
q='Fishing',
part='snippet',
type='channel',
maxResults=50,
pageToken=pageToken if pageToken != "" else ""
).execute()
v = res.get('items', [])
if v:
data.extend(v)
pageToken = res.get('nextPageToken')
if not pageToken:
break
# print(len(data)) # You can check the number of retrieved data.
for item in data:
print(item['snippet']['title'])