【发布时间】:2018-06-02 08:49:17
【问题描述】:
我正在尝试为 youtube 用户创建每个视频的观看次数的 json 对象。
首先,我进行 api 调用以获取来自特定频道的所有视频 ID,这些 ID 被推送到一个空数组。然后我遍历所有视频 ID,为每个视频进行多次 API 调用,以获取有关视图的数据。
现在每个视频都有自己的 API 调用,我似乎无法找到将所有调用中的所有数据合并到一个对象中的方法。
我确信这不是这样做的方法,这就是为什么我希望你们能推荐我一个更好的方法来解决这个问题。
谢谢!
var channelId = 'UCO1cgjhGzsSYb1rsB4bFe4Q'
var url = 'https://www.googleapis.com/youtube/v3/search?key=' + apiKey + '&channelId=' + channelId + '&part=snippet,id&order=date&maxResults=20'
fetch(url).then((resp) => resp.json()).then(function(data) {
var videoIds = []
for (var i = 0; i < data.items.length; i++) {
videoIds.push(data.items[i].id.videoId)
}
return videoIds
}).then(function(ids) {
var urls = []
for (var i = 0; i < ids.length; i++) {
urls.push('https://www.googleapis.com/youtube/v3/videos?part=statistics&id=' + ids[i] + '&key=' + apiKey)
}
return urls
}).then(function(urls) {
for (var i = 0; i < urls.length; i++) {
fetch(urls[i]).then((resp) => resp.json()).then(function(data) {
console.log(data)
})
}
更新
我设法通过使用另一个 fetch url 和 d3.json 函数来解决这个问题。
var search = 'https://www.googleapis.com/youtube/v3/search?key=' + apiKey + '&channelId=' + channelId + '&part=snippet,id&order=date&maxResults=5'
var videoIds = []
fetch(search).then((resp) => resp.json())
.then(function(data) {
for (var i = 0; i < data.items.length; i++) {
videoIds.push(data.items[i].id.videoId)
}
return fetch("https://www.googleapis.com/youtube/v3/videos?id=" +videoIds + "&part=snippet%2CcontentDetails%2Cstatistics&key=" + apiKey);
}).then(function(response) {
d3.json(response.url, function(error, data) {
if (error) throw error;
console.log(data)
【问题讨论】:
-
进展如何?我的回答有帮助吗?
-
@Matt 是的,谢谢,您的回答确实有帮助。只是返回的对象不包括每个单独视频的统计信息。现在我正在尝试各种方法来从这些提取中提取 statistics.viewCount 到一个组合对象中。您对此有什么建议吗?
-
根据
video的API 参考,您应该能够使用以下点符号videoObj.statistics.viewCount通过JSON 访问viewCount。这是截至 2017 年 12 月的当前文档的链接YouTube Video API Reference -
在查看了上面的请求之后,也许可以尝试从请求中删除
part=statistics。我猜该请求应该返回完整的video对象,然后您可以按照上面列出的评论的方向进行操作。 -
一切顺利吗?如果是这样,请投票/确认答案。如果没有,我很乐意帮助您解决这个问题。
标签: javascript json api object youtube