youtube.subscriptions.list(api v3) – nextPageToken不可用

我正试图从我的订阅中获取所有频道。 但是“nextPageToken”不可用。

响应应该包含“nextPageToken”:

(来自developers.google.com – YouTube(v3) – 订阅:列表)

{ "kind": "youtube#subscriptionListResponse", "etag": etag, "nextPageToken": string, "prevPageToken": string, "pageInfo": { "totalResults": integer, "resultsPerPage": integer }, "items": [ subscription Resource ] } 

这是我的要求:

 GET https://www.googleapis.com/youtube/v3/subscriptions?part=snippet&maxResults=10&mine=true&key={YOUR_API_KEY} 

API Explorer – YouTube(v3) – Subscriptions.list:

https://developers.google.com/apis-explorer/#p/youtube/v3/youtube.subscriptions.list?part=snippet&maxResults=10&mine=true

我的回复:

 { "kind": "youtube#subscriptionListResponse", "etag": "\"XXXXX/XXXXX\"", "pageInfo": { "totalResults": 115, "resultsPerPage": 10 }, "items": [ ... 

你能告诉我为什么nextPageToken丢失了吗?

这是一个我想出的JS片段来生成至少1024的pageTokens,我不能保证它会生成任何有效的东西,因为我找不到任何服务,它会让我的代币为450> off来validation我的猜测和假设。

 var d0 = "AEIMQUYcgkosw048"; var d1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; var d2 = d1; var d1c = 0; var d2c = 0; var overflowSuffix = "Q"; var direction = "AA"; var d2OverflowCounter = 0; var pageSize = 50; for (i = 0; i < 1024; i++) { if (i % pageSize == 0) console.log("C" + d1.charAt((d1c / d0.length) % d1.length) + d0.charAt(i % d0.length) + overflowSuffix + direction, ":", i); if (++d1c % (1 << 8) == 0) d1c = 1 << 7; if (++d2c % (1 << 7) == 0) overflowSuffix = d2.charAt(++d2OverflowCounter) + "E"; } 

我现在有一个解决方法。 请告诉我这是否有帮助。

对于其他API Youtube V3 API调用的每个页面,令牌似乎是相同的,因此我可以使用它来获取我需要的所有订阅页面。

 tokens = ['CDIQAA','CGQQAA','CJYBEAA','CMgBEAA','CPoBEAA','CKwCEAA','CN4CEAA','CJADEAA','CMIDEAA','CPQDEAA','CKYEEAA', ...] 

如果您需要更多,可以使用另一个Youtube API获取更多页面令牌。 只需一次获取1个元素并记录要在此API中使用的标记。

我只需知道何时停止…所以我检查API调用何时没有返回通道!

 @retry(stop_max_attempt_number=7) def get_subscription_page(self, channel_id, pageToken): print 'Retrieving subscription page using Youtube API (token: %s)' % pageToken res = self.youtube_data_api.subscriptions().list(part="id,snippet,contentDetails",channelId=channel_id, maxResults=50, pageToken=pageToken).execute() return res def get_subscriptions(self, channel_id): self.authorize(channel_id) subs = [] # Tokens to deal with api bug... # https://code.google.com/p/gdata-issues/issues/detail?id=7163 tokens = ['CDIQAA','CGQQAA','CJYBEAA','CMgBEAA','CPoBEAA','CKwCEAA','CN4CEAA','CJADEAA','CMIDEAA','CPQDEAA','CKYEEAA'] iPage = 0 pageToken = '' while True: res = self.get_subscription_page(channel_id, pageToken) channelIds = [] for channel in res['items']: channelIds.append(channel.get('snippet').get('resourceId').get('channelId')) pageToken = res.get('nextPageToken') # If no next page token is returned... it might be caused by a bug. # This workaroud will only have effect when the bug still lives. if not pageToken: if not channelIds: # Workaroud for this: https://code.google.com/p/gdata-issues/issues/detail?id=7163 print ' (Workaround due to API bug) No channels returned in this API call! Finished!' break else: pageToken = tokens[iPage] # get channel info for each channel ID channelsInfo = self.get_channel_info(channelIds) subs += channelsInfo print ' Itens already retrieved: %d ' % len(subs) iPage += 1 if args.debug: break if pageToken: continue print 'No more pages to retrieve!' break return subs 

我有一个基于这个Youtube API V3每小时运行的脚本,并且它在4小时前停止工作。 nextPageToken不再可用。 之前,它与您发布的第一个代码完全相同。