Подтвердить что ты не робот

Список из 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 наиболее подписанных каналов, и, похоже, не существует способа заказать их по количеству подписчиков в соответствии с документация; поэтому кажется, что я застрял.

4b9b3361

Ответ 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, чтобы сохранить свежесть данных.