Add nextPageToken call for exhausting the content
This commit is contained in:
@@ -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):
|
||||||
|
|||||||
Reference in New Issue
Block a user