[Python] Efficiently Filter YouTube API Search Results by Subscriber Count

Discussão em 'Python' iniciado por Stack, Setembro 24, 2024.

  1. Stack

    Stack Membro Participativo

    I'm using the YouTube Data API to search for channels that meet a specific subscriber count range (e.g., between 100,000 and 500,000 subscribers). However, the API consumes a lot of quota units because it searches through multiple channels, including many that don't fit my criteria, before returning a few suitable ones.

    For example, I make a search request using youtube.search().list to find channels based on a keyword. After retrieving the results, I manually check the subscriber count of each channel using the youtube.channels().list method, which further consumes quota. If I search 10 channels and only 3 fit the subscriber count range, I've used 10 units, 7 of which were wasted on channels outside my target range.

    Here’s a minimal reproducible example:

    python

    import requests

    API_KEY = 'YOUR_API_KEY'

    def search_youtube(query, max_results=10):
    url = 'https://www.googleapis.com/youtube/v3/search'
    params = {
    'part': 'snippet',
    'q': query,
    'type': 'channel',
    'maxResults': max_results,
    'key': API_KEY
    }
    response = requests.get(url, params=params)
    return response.json()

    def get_channel_details(channel_id):
    url = 'https://www.googleapis.com/youtube/v3/channels'
    params = {
    'part': 'statistics',
    'id': channel_id,
    'key': API_KEY
    }
    response = requests.get(url, params=params)
    return response.json()

    # Sample query and channel processing
    query = 'Minecraft'
    search_results = search_youtube(query)

    for item in search_results.get('items', []):
    channel_id = item['id']['channelId']
    channel_details = get_channel_details(channel_id)
    subscriber_count = int(channel_details['items'][0]['statistics']['subscriberCount'])

    if 100000 <= subscriber_count <= 500000:
    print(f"Channel: {item['snippet']['title']}, Subscribers: {subscriber_count}")


    Here's the link to my full code on Pastebin.

    Question: Is there a more efficient way to filter channels by subscriber count from the start, or to minimize API quota usage? Can I adjust my search parameters or use a different method to reduce the number of unnecessary API calls?

    Any suggestions or best practices would be greatly appreciated!

    Continue reading...

Compartilhe esta Página