#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
.