From 4faf8099ce8ec77957049ab64eab72d7216fcb0b Mon Sep 17 00:00:00 2001 From: Timothyxxx <384084775@qq.com> Date: Sat, 16 Dec 2023 22:10:11 +0800 Subject: [PATCH] Add nextPageToken call for exhausting the content --- .../youtube/vlc_player/vlc_player.py | 42 ++++++++++++------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/resouce_collection/youtube/vlc_player/vlc_player.py b/resouce_collection/youtube/vlc_player/vlc_player.py index c33a653..9533761 100644 --- a/resouce_collection/youtube/vlc_player/vlc_player.py +++ b/resouce_collection/youtube/vlc_player/vlc_player.py @@ -3,25 +3,39 @@ import os from googleapiclient.discovery import build -def search_youtube(api_key, query, max_results=50): +def search_youtube(api_key, query, max_results=50, language="en"): youtube = build('youtube', 'v3', developerKey=api_key) - search_response = youtube.search().list( - q=query, - part="id,snippet", - maxResults=max_results, - type="video" - ).execute() - videos = [] + next_page_token = None + total_results = 0 - for search_result in search_response.get("items", []): - if search_result["id"]["kind"] == "youtube#video": - video_id = search_result["id"]["videoId"] - video_metadata = get_video_metadata(api_key, video_id) - videos.append(video_metadata) + while True: + search_response = youtube.search().list( + q=query, + part="id,snippet", + maxResults=max_results, + pageToken=next_page_token, + type="video", + relevanceLanguage=language + ).execute() - return videos + video_ids = [item['id']['videoId'] for item in search_response.get("items", []) if + item['id']['kind'] == 'youtube#video'] + + # Fetch metadata for each video + videos.extend([get_video_metadata(api_key, video_id) for video_id in video_ids]) + + total_results += len(video_ids) + next_page_token = search_response.get('nextPageToken') + + if not next_page_token or total_results >= max_results: + break + + # Sort videos by view count + sorted_videos = sorted(videos, key=lambda x: int(x['items'][0]['statistics']['viewCount']), reverse=True) + + return sorted_videos def get_video_metadata(api_key, video_id):