Указывая те же идентификаторы канала youtube при использовании youtube.search().list

#python #youtube-api #youtube-data-api

Вопрос:

Я использую api Youtube, чтобы получить 10 случайных идентификаторов каналов YouTube и поместить их в список, поэтому я создал функцию для возврата этого списка :

 
def youtube_search():
    all_data = []
    search_response = youtube.search().list(
        part='snippet',
        maxResults=10,
        location=None,
        locationRadius=None,
        regionCode = 'TN',
        )
    response = search_response.execute() 
    for i in range(len(response['items'])):
  
       data = response['items'][i]['snippet']['channelId']

       all_data.append(data)
    
    return all_data

 

Проблема в том, что он возвращает мне один и тот же идентификатор 10 раз, ровно 2 разных идентификатора ( 1 идентификатор 2 раза и еще один 8 раз). :

 channel_data = youtube_search()
channel_data
['UC6UL29enLNe4mqwTfAyeNuw',
 'UC6UL29enLNe4mqwTfAyeNuw',
 'UCvR2R7j218tzejtTsb_X6Rw',
 'UCvR2R7j218tzejtTsb_X6Rw',
 'UCvR2R7j218tzejtTsb_X6Rw',
 'UCvR2R7j218tzejtTsb_X6Rw',
 'UCvR2R7j218tzejtTsb_X6Rw',
 'UCvR2R7j218tzejtTsb_X6Rw',
 'UCvR2R7j218tzejtTsb_X6Rw',
 'UCvR2R7j218tzejtTsb_X6Rw']
 

Что случилось ? почему я получаю одинаковые удостоверения личности, а не все разные?

Комментарии:

1. это работает, когда я использовал type = «канал», но почему я получаю случайные каналы, а не в конкретном регионе, который я упомянул в поиске. конечная точка списка? ( Код региона=’TN’), это означает, что я хотел получить тунисские каналы в своем примере .

2. Возможно, TN регион не поддерживается (цитата отсюда ): Если указан неподдерживаемый регион, YouTube все равно может выбрать другой регион, а не значение по умолчанию, для обработки запроса.

Ответ №1:

Для получения из Search.list конечной точки API только элементов канала существует следующий параметр запроса:

type (строка)

type Параметр ограничивает поисковый запрос только получением определенного типа ресурса. Значение представляет собой разделенный запятыми список типов ресурсов. Значение по умолчанию равно video,channel,playlist .

Допустимыми значениями являются:

  • channel
  • playlist
  • video

Поэтому измените свой вызов API на:

 search_response = youtube.search().list(
    type='channel',
    part='snippet',
    maxResults=10,
    location=None,
    locationRadius=None,
    regionCode = 'TN',
)
 

и items массив, который вы получите обратно, будет содержать только элементы, ссылающиеся на каналы YouTube.

Комментарии:

1. это работает , но вы хоть представляете, почему я получаю случайные каналы, а не в конкретном регионе, который я упомянул в поиске. конечная точка списка? ( Код региона=’TN’), это означает, что я хотел получить тунисские каналы в своем примере .

2. Возможно, TN регион не поддерживается (цитата отсюда ): Если указан неподдерживаемый регион, YouTube все равно может выбрать другой регион, а не значение по умолчанию, для обработки запроса.

3. Вы также можете отправить сообщение об ошибке непосредственно в Google с этой проблемой через собственный сайт отслеживания проблем компании.

4. Я использовал другие коды регионов, но он всегда выдает мне один и тот же список с одинаковыми идентификаторами, я думаю, что параметр regionCode даже не учитывается, даже когда я его удалил, он показывает мне тот же список.

5. Я считаю такое поведение ошибкой API. Поэтому я бы рекомендовал отправить сообщение об ошибке в Google. У них есть все средства, чтобы узнать, почему это не работает, как указано в официальной документации Search.list .