Эффективно фильтруйте результаты поиска YouTube API по количеству подписчиков

Вопрос или проблема

Я использую YouTube Data API для поиска каналов, которые соответствуют определённому диапазону подписчиков (например, от 100 000 до 500 000 подписчиков). Однако API потребляет много единиц квоты, так как он ищет среди множества каналов, многие из которых не соответствуют моим критериям, прежде чем вернуть несколько подходящих.

Например, я отправляю запрос на поиск с помощью youtube.search().list, чтобы найти каналы на основе ключевого слова. После получения результатов я вручную проверяю количество подписчиков каждого канала с помощью метода youtube.channels().list, что дополнительно расходует квоту. Если я ищу 10 каналов и только 3 соответствуют диапазону подписчиков, я использовал 10 единиц, 7 из которых были потрачены на каналы вне моей целевой группы.

Вот минимальный воспроизводимый пример:

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

# Пример запроса и обработки каналов
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"Канал: {item['snippet']['title']}, Подписчики: {subscriber_count}")

Вот ссылка на мой полный код на Pastebin.

Вопрос:
Существует ли более эффективный способ фильтрации каналов по количеству подписчиков с самого начала, или чтобы минимизировать использование квоты API? Могу ли я изменить параметры поиска или использовать другой метод, чтобы уменьшить количество ненужных вызовов API?

Буду признателен за любые предложения или лучшие практики!

Ответ или решение

Чтобы эффективно фильтровать результаты поиска каналов на YouTube по количеству подписчиков и минимизировать использование квоты API, важно понимать ограничения YouTube Data API и использовать некоторые оптимальные подходы. Вот несколько рекомендаций, которые помогут вам достичь ваших целей:

1. Используйте параметр order

При выполнении запроса поиска через youtube.search().list, добавьте параметр order с значением relevance или viewCount. Это может помочь вам получить более целевые результаты, если вас интересуют популярные каналы в выбранной нише. Однако следует учитывать, что это не гарантирует получение каналов с нужным количеством подписчиков.

2. Объедините запросы

Измените свой подход так, чтобы сначала извлечь весь список каналов, а затем использовать один запрос, чтобы получить всю информацию о каналах с помощью метода youtube.channels().list. Сделать это можно в силу того, что youtube.search().list возвращает идентификаторы каналов, которые могут существовать в ответах, и вы можете передать несколько идентификаторов одновременно в одном запросе.

Вместо того чтобы запрашивать статистику каждого канала по отдельности, сгруппируйте их идентификаторы и запросите статистику для всех одновременно. Это поможет сэкономить квоту.

Пример кода

Вот оптимизированный пример кода:

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_multiple_channel_details(channel_ids):
    url = "https://www.googleapis.com/youtube/v3/channels"
    params = {
        'part': 'statistics',
        'id': ','.join(channel_ids),
        'key': API_KEY
    }
    response = requests.get(url, params=params)
    return response.json()

# Выполнение запроса
query = 'Minecraft'
search_results = search_youtube(query)

channel_ids = []
for item in search_results.get('items', []):
    channel_ids.append(item['id']['channelId'])

# Получаем статистику по всем найденным каналам за один запрос
channel_details = get_multiple_channel_details(channel_ids)

# Фильтрация по количеству подписчиков
for item in channel_details.get('items', []):
    subscriber_count = int(item['statistics']['subscriberCount'])
    if 100000 <= subscriber_count <= 500000:
        print(f"Канал: {item['snippet']['title']}, Подписчики: {subscriber_count}")

3. Используйте pageToken для постраничного доступа

Если вам нужно больше результатов, вы можете использовать pageToken для постраничного доступа и получения больших наборов данных. Это также помогает распределять запросы по времени, что может быть полезно в случае ограниченной квоты.

4. Чистка и фильтрация

Если количество подписчиков является критически важным для вашего проекта, возможно, стоит рассмотреть использование других ресурсов и методов. Например, вы можете проверить сторонние сервисы мониторинга YouTube, которые могут предоставить актуальную информацию о количествах подписчиков и способах фильтрации.

Следуя вышеуказанным рекомендациям, вы сможете более эффективно использовать квоту API YouTube и сократить количество ненужных запросов, что, в конечном итоге, упростит процесс поиска подходящих каналов.

Оцените материал
Добавить комментарий

Капча загружается...