Список из 50 000 наиболее подписанных каналов
Я пытаюсь найти способ захватить 50 000 наиболее подписанных каналов YouTube с помощью javascript. Их нужно только один раз схватить и сохранить в файле, который будет использоваться для ввода автозаполнения на веб-странице.
Мне очень понравилось получать первые 50 лучших, используя search:list
(/youtube/v3/search), выполнив поиск с помощью параметры maxResults=50, order=viewCount, part=snippet, type=channel, fields=nextPageToken,items(snippet(channelId,title))
Возврат:
{
"nextPageToken": "CDIQAA",
"items": [{
"snippet": {
"channelId": "UC-9-kyTW8ZkZNDHQJ6FgpwQ",
"title": "Music"
}
},{
"snippet": {
"channelId": "UC-lHJZR3Gqxm24_Vd_AJ5Yw",
"title": "PewDiePie"
}
},{
"snippet": {
"channelId": "UCVPYbobPRzz0SjinWekjUBw",
"title": "Анатолий Шарий"
}
},{
"snippet": {
"channelId": "UCam8T03EOFBsNdR0thrFHdQ",
"title": "VEGETTA777"
}
},...
Тогда все, что мне нужно сделать, - это получить еще 1000 раз, используя nextPageToken
, чтобы получить список из 50 000 лучших.
К сожалению, сортировка по relevance
, rating
, viewCount
или ничего не дает 50 наиболее подписанных каналов, и, похоже, не существует способа заказать их по количеству подписчиков в соответствии с документация; поэтому кажется, что я застрял.
Ответы
Ответ 1
Как только вы напишете 50 результатов в файле (или базе данных), вы можете сделать еще один вызов API, используя поле channelId
из вашего результата и объединить все из них с разделителями-запятыми и сделать еще один вызов API Каналы: список.
На этой странице, например, вы можете использовать следующие параметры:
(это идентификаторы из вашего примера выше)
part=statistics
id=UC-9-kyTW8ZkZNDHQJ6FgpwQ,UC-lHJZR3Gqxm24_Vd_AJ5Yw,UCVPYbobPRzz0SjinWekjUBw,UCam8T03EOFBsNdR0thrFHdQ`
И результат будет выглядеть примерно так:
{
"kind": "youtube#channel",
"etag": "\"m2yskBQFythfE4irbTIeOgYYfBU/MG6zgnd09mqb3nAdyRnPDgFwfkE\"",
"id": "UC-lHJZR3Gqxm24_Vd_AJ5Yw",
"statistics": {
"viewCount": "15194203723",
"commentCount": "289181",
"subscriberCount": "54913094",
"hiddenSubscriberCount": false,
"videoCount": "3175"
}
}
И вы можете взять subscriberCount
из результата для каждого канала.
Я знаю, это не способ сортировать ваши 50 результатов при записи в файл,
но при этом вы можете сортировать свои результаты по "подсчету подписчиков" при извлечении из файла для ввода автозаполнения.
Я не нашел другого способа сортировки результатов по количеству подписчиков, поэтому, возможно, это может быть полезно.
Ответ 2
Идея состоит в том, чтобы запустить серверную сторону script, что делает вызовы RESTful api в цикле и записывает результаты в файл .JSON для сохранения результатов. Для этого вы можете создать PHP скрипт, что заставляет REST API вызывать google и извлекать первые 50 результатов, а затем использовать операции записи файлов для записи ваших результатов. Запустите PHP скрипт как задание кукурузы для регулярного обновления результатов. Выполнение работы кукурузы с каждым заданным временным интервалом сохраняет свежие результаты.
Команда Hit CURL с циклом для следующего, чтобы получать 50 результатов каждый раз и создавать временный файл со всеми результатами, сохраненными в файле .JSON. Как только ваши результаты будут получены, замените старый файл JSON на новый созданный временный файл. Это приведет к созданию нового файла JSON, который будет иметь регулярные значения, с новыми результатами, если любые изменения будут внесены в данные.
Однако идея использования временного файла заключается в том, чтобы избежать script избежать ожидания/замедления AJAX из-за последовательных операций чтения и записи в одном файле. После записи временного файла просто используйте команду move для замены фактического файла.
Убедитесь, что вы используете заголовки управления кешем в результатах AJAX, чтобы сохранить свежесть данных.