Javascript 获取50000个最多订阅频道的列表
我正试图找到一种方法,用javascript抓取订阅量最高的5万个youtube频道。这些只需要抓取一次,并将存储在一个文件中,用于网页中的自动完成输入 通过使用参数Javascript 获取50000个最多订阅频道的列表,javascript,youtube,youtube-api,youtube-data-api,Javascript,Youtube,Youtube Api,Youtube Data Api,我正试图找到一种方法,用javascript抓取订阅量最高的5万个youtube频道。这些只需要抓取一次,并将存储在一个文件中,用于网页中的自动完成输入 通过使用参数maxResults=50,order=viewCount,part=snippet,type=channel,fields=nextPageToken,items(snippet(channelId,title)),我已经非常接近于获得前50名了 返回: { "nextPageToken": "CDIQAA", "items"
maxResults=50,order=viewCount,part=snippet,type=channel,fields=nextPageToken,items(snippet(channelId,title)),我已经非常接近于获得前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次,以获得前50000名的列表
不幸的是,按相关性
,评级
,浏览次数
,或者什么都不排序,并不能产生50个订阅量最多的频道,而且似乎没有任何方法根据文档按订阅人数排序;所以我似乎被卡住了。要做的是运行一个服务器端脚本,在循环中进行RESTful api调用,并将结果写入.JSON文件以保存结果。为此,您可以创建PHP脚本,使RESTAPI调用google,获取前50个结果,然后使用文件写入操作写入结果。将PHP脚本作为corn作业运行,定期更新结果。在设置的每个特定时间间隔执行corn作业可保持结果的新鲜度
点击CURL命令并循环下一步,每次获取50个结果,并创建临时文件,所有结果保存在.JSON文件中。获取结果后,用新创建的临时文件替换旧JSON文件。这将生成新的JSON文件,如果对数据进行了任何更改,将产生新的结果
然而,使用临时文件的想法是避免脚本由于对同一文件执行一致的读写操作而导致AJAX的等待/减慢。写入临时文件后,只需使用move命令替换实际文件
确保在AJAX结果中使用缓存控制头来保持数据的新鲜度。在将50个结果写入文件(或数据库)之前,您可以使用结果中的channelId
字段再进行一次API调用,并使用逗号分隔符合并所有结果并进行另一次API调用。
例如,在该页面上,您可以使用以下参数:
(这些是上面示例中的ID)
结果如下所示:
{
"kind": "youtube#channel",
"etag": "\"m2yskBQFythfE4irbTIeOgYYfBU/MG6zgnd09mqb3nAdyRnPDgFwfkE\"",
"id": "UC-lHJZR3Gqxm24_Vd_AJ5Yw",
"statistics": {
"viewCount": "15194203723",
"commentCount": "289181",
"subscriberCount": "54913094",
"hiddenSubscriberCount": false,
"videoCount": "3175"
}
}
您可以从每个频道的结果中获取subscriberCount
。
我知道,这不是在写入文件时对50个结果进行排序的方法,
但有了这一功能,您可以在从文件中提取用于自动完成输入的数据时,按“订户数”对结果进行排序。
我没有找到任何其他方法按订阅者数量对结果进行排序,因此这可能会有所帮助。可能的解决方法:刮取感谢@paolo的建议,但我已经这样做了,只有5000个最高频道不会为我减少。API没有直接的方法可以做到这一点。我能找到的前10名都在中,没有提到前10名的订户。因为你写了“用于自动完成”,我想知道:你在任何时候都需要自动完成以外的数据吗?自动完成与一个频道有多少订户有关吗?因为在其他情况下,只要在输入更改时使用输入字段的当前值进行搜索,可能会得到更好的自动完成结果。除了用于自动完成之外,该列表还可用于各种其他用途,如用于将用户ID转换为用户名的字典。不过,你说得很好。如果使用列表的搜索没有发现任何内容,我可以使用该api。这是如何回答问题的?同意,要完全回答问题,您必须使用javascript
,使用youtube-api-v3
,列出搜索参数和URL,并提出关于如何获取列表的精确解释、伪代码、,或者使用javascript。不幸的是,这似乎是实现这一点的唯一方法。谢谢你的回答。我会在几天内将其标记为正确,除非有人提出更好的解决方案。不幸的是,由于页面标记的工作方式,此方法仅限于500个结果
{
"kind": "youtube#channel",
"etag": "\"m2yskBQFythfE4irbTIeOgYYfBU/MG6zgnd09mqb3nAdyRnPDgFwfkE\"",
"id": "UC-lHJZR3Gqxm24_Vd_AJ5Yw",
"statistics": {
"viewCount": "15194203723",
"commentCount": "289181",
"subscriberCount": "54913094",
"hiddenSubscriberCount": false,
"videoCount": "3175"
}
}