我试图找到一种方法来使用javascript获取前5个订阅量最多的YouTube频道。这些只需要抓取一次,并存储在一个文件中,用于网页中的自动完成输入。
通过使用参数search:list
搜索maxResults=50, order=viewCount, part=snippet, type=channel, fields=nextPageToken,items(snippet(channelId,title))
(/youtube/v3/search),我已经非常接近获得第一个前50名
返回:
{
"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"
}
},...
然后我需要做的就是使用nextPageToken
获取1000次以获得前50,000名的列表。
不幸的是,按relevance
,rating
,viewCount
排序,或者什么也没有,不会产生50个订阅最多的频道,而且似乎没有任何方式根据文件按订户数量订购;所以好像我被卡住了。
答案 0 :(得分:1)
在您将50个结果写入文件(或数据库)之前,您可以使用结果中的channelId
字段再次进行一次API调用,并使用逗号分隔合并所有这些调用并进行另一次API调用{ {3}}。
例如,在该页面上,您可以使用以下参数:
(这些是上例中的ID)
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个结果进行排序的方法,
但是使用此功能,您可以在从文件中获取自动完成输入时按“订阅者计数”对结果进行排序
我没有找到任何其他方式按订阅者数量排序结果,所以这可能会有所帮助。
答案 1 :(得分:-6)
要做的是运行服务器端脚本,在循环中进行RESTful api调用,并将结果写入.JSON文件,以保存结果。为此,您可以创建PHP脚本,使REST API调用谷歌,并获取前50个结果,然后使用文件写入操作来编写结果。将该PHP脚本作为玉米作业运行,以定期更新结果。在您设定的每个特定时间间隔执行玉米作业可使结果保持新鲜。
使用循环下载CURL命令,每次获取50个结果并创建临时文件,并将所有结果保存在.JSON文件中。获取结果后,将旧的JSON文件替换为新创建的临时文件。这将生成新的JSON文件是常规的,如果对数据进行任何更改,则会产生新的结果。
但是,使用临时文件的想法是避免脚本因为对同一文件的一致读写操作而避免AJAX的等待/慢速等待。写入临时文件后,只需使用move命令替换实际文件即可。
确保在AJAX结果中使用缓存控制标头以保持数据的新鲜度。