Spaces:
Running
Running
File size: 3,643 Bytes
1b93e2c 073280f 1b93e2c 09d03cf 1b93e2c 09d03cf 1b93e2c 09d03cf 1b93e2c 09d03cf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
import yt_dlp
import logging
# Configure logging for debugging purposes
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')
# Function to search YouTube videos using yt-dlp for better reliability
def youtube_search(query, max_results=50):
ydl_opts = {
'quiet': False, # Set to False to get more detailed output from yt-dlp
'extract_flat': 'in_playlist',
'logger': logging.getLogger(), # Use the logging module to capture yt-dlp logs
'simulate': True,
'noplaylist': True, # To avoid playlist entries
}
search_url = f"ytsearch{max_results}:{query}"
logging.debug(f"Starting YouTube search for query: {query}")
try:
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
result = ydl.extract_info(search_url, download=False)
detailed_entries = []
if 'entries' in result:
logging.debug(f"Number of entries found: {len(result['entries'])}")
for entry in result['entries']:
# Collect and print each field separately
print("\n==============================")
print("Video Details:")
print("==============================")
print(f"ID: {entry.get('id', 'N/A')}")
print(f"Title: {entry.get('title', 'N/A')}")
print(f"Uploader: {entry.get('uploader', 'N/A')}")
print(f"Uploader ID: {entry.get('uploader_id', 'N/A')}")
print(f"Upload Date: {entry.get('upload_date', 'N/A')}")
print(f"Description: {entry.get('description', 'N/A')}")
print(f"Duration (seconds): {entry.get('duration', 'N/A')}")
print(f"View Count: {entry.get('view_count', 'N/A')}")
print(f"Like Count: {entry.get('like_count', 'N/A')}")
print(f"Dislike Count: {entry.get('dislike_count', 'N/A')}")
print(f"Comment Count: {entry.get('comment_count', 'N/A')}")
print(f"Average Rating: {entry.get('average_rating', 'N/A')}")
print(f"Thumbnail URL: {entry.get('thumbnail', 'N/A')}")
print(f"Webpage URL: {entry.get('webpage_url', 'N/A')}")
print(f"Channel URL: {entry.get('channel_url', 'N/A')}")
print(f"Categories: {entry.get('categories', 'N/A')}")
print(f"Tags: {entry.get('tags', 'N/A')}")
print(f"Channel ID: {entry.get('channel_id', 'N/A')}")
print(f"Age Restriction: {entry.get('age_limit', 'N/A')}")
print(f"Is Live: {entry.get('is_live', 'N/A')}")
print(f"FPS: {entry.get('fps', 'N/A')}")
print(f"Resolution: {entry.get('resolution', 'N/A')}")
print(f"Aspect Ratio: {entry.get('aspect_ratio', 'N/A')}")
print(f"Video Codec: {entry.get('vcodec', 'N/A')}")
print(f"Audio Codec: {entry.get('acodec', 'N/A')}")
print("==============================\n")
# Add the entry details to the list if needed
detailed_entries.append(entry)
else:
logging.warning("No entries found in search result.")
return detailed_entries
except Exception as e:
error_message = f"Error during YouTube yt-dlp request: {e}"
logging.error(error_message)
return []
# Test the function with a sample query
youtube_search("test video")
|