Add nextPageToken call for exhausting the content

This commit is contained in:
Timothyxxx
2023-12-16 22:10:11 +08:00
parent 4100a1db1e
commit 4faf8099ce

View File

@@ -3,25 +3,39 @@ import os
from googleapiclient.discovery import build 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) youtube = build('youtube', 'v3', developerKey=api_key)
search_response = youtube.search().list(
q=query,
part="id,snippet",
maxResults=max_results,
type="video"
).execute()
videos = [] videos = []
next_page_token = None
total_results = 0
for search_result in search_response.get("items", []): while True:
if search_result["id"]["kind"] == "youtube#video": search_response = youtube.search().list(
video_id = search_result["id"]["videoId"] q=query,
video_metadata = get_video_metadata(api_key, video_id) part="id,snippet",
videos.append(video_metadata) 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): def get_video_metadata(api_key, video_id):