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")