1 回答

TA貢獻1812條經驗 獲得超5個贊
它工作正常,
實際上,它沒有,除非你只有一個“下一頁” - 這個:
while nextPageToken:
url = 'https://www.googleapis.com/youtube/v3/search?part=snippet&channelId='+CHANNEL_ID+'&maxResults=50&type=video&key='+API_KEY+"&pageToken="+nextPageToken
response = urllib.request.urlopen(url)
videos_next_page = json.load(response)
nextPageToken = videos_next_page.get("nextPageToken")
每次迭代都會覆蓋videos_next_page ,所以你只會得到最后一頁。
如何將來自多個 JSON 響應的結果存儲在列表中
一旦反序列化,“來自 JSON 響應的結果”就是普通的 Python 對象(通常是dicts)。并且您將它們附加到列表中,就像您對其他任何事情一樣。
這是一個可能的重寫,可以正確處理這個問題(并且也可以更好地利用內存) - 警告:未經測試的代碼,所以我不能保證沒有錯字或其他什么,但至少你明白了。
def load_page(page_token=None):
url = "https://www.googleapis.com/youtube/v3/search?part=snippet&channelId={}&maxResults=50&type=video&key={}".format(CHANNEL_ID, API_KEY)
if page_token:
url += ("&pageToken={}".format(page_token))
response = urllib.request.urlopen(url) #makes the call to YouTube
return json.load(response)
def collect_videos_meta(page):
return [video['id']['videoId'] for video in page['items'] if video['id']['kind'] == 'youtube#video']
def main():
videoMetadata = []
nextPageToken = None # default initial value for the first page
# using `while True` and `break` avoids having to repeat the same
# code twice (once before the loop and once within the loop).
# This is a very common pattern in Python, you just have to make
# sure you will break out of the loop at some point...
while True:
page = load_page(nextPageToken)
videoMetadata.extend(collect_videos_meta(page))
nextPageToken = page.get("nextPageToken")
if not nextPageToken:
break
# now do what you want with those data...
print(videoMetadata)
if __name__ = "__main__":
main()
添加回答
舉報