我正在使用youtube api,并根据搜索发出api请求。
这一切都有效。你可以在操场上看到它。
在我的代码中,它看起来像这样:
fetch(`https://www.googleapis.com/youtube/v3/search?part=snippet&q=${query}&key=${API_KEY}`)
.then(res => {
return res.json();
}).then(res => {
setResults(res.items);
});
});
我在url中将它作为part
传递给snippet
。这给了我一些数据,但我想得到更多,比如视频持续时间等。看起来可以通过更多的参数来检索。
如果我添加contentDetails
,则api请求失败。有人知道如何获取除片段之外的更多数据吗?
据我所知,您必须进行另一次调用来检索这些详细信息(例如duration
),但这一次,您需要videoId
并对videos.list
API进行调用。
因此,使用您在问题中添加的第一个调用(稍作修改),您将获得以下URL:
请求#1-搜索:
GET https://www.googleapis.com/youtube/v3/search?part=snippet&maxResults=5&q=lfc&fields=items(id%2FvideoId%2Csnippet%2Ftitle)%2CpageInfo&key={YOUR_API_KEY}
您可以在此处测试请求#1。
第一个请求("搜索"请求)的结果为:
{
"pageInfo": {
"totalResults": 1000000,
"resultsPerPage": 5
},
"items": [
{
"snippet": {
"title": "Liverpool FC"
}
},
{
"id": {
"videoId": "a0IrBTg6zcI"
},
"snippet": {
"title": "Bob Paisley: The Humble Genius | Liverpool's most successful manager in his own words"
}
},
{
"id": {
"videoId": "sxMbgeBreJ0"
},
"snippet": {
"title": "Inside Anfield: Liverpool 4-3 Crystal Palace | TUNNEL CAM from the Reds' dramatic win"
}
},
{
"id": {
"videoId": "g4TknSKYG98"
},
"snippet": {
"title": "1000 Premier League Goals at Anfield | Some of our favourite strikes"
}
},
{
"id": {
"videoId": "pMYCN506lXk"
},
"snippet": {
"title": "What Alex Oxlade-Chamberlain return REALLY means for Liverpool midfield? ● LFC News"
}
}
]
}
使用第一个项目videoId
a0IrBTg6zcI
,创建对videos.list
API的请求,如下所示。
请求#2-视频:
GET https://www.googleapis.com/youtube/v3/videos?part=snippet%2C+contentDetails&id=a0IrBTg6zcI&fields=items(contentDetails%2Fduration%2Csnippet%2Ftitle%2Cstatistics%2Cstatus(embeddable%2CpublishAt))%2CpageInfo&key={YOUR_API_KEY}
您可以在此处测试请求#2。
第二个请求("视频"请求)的结果为:
{
"pageInfo": {
"totalResults": 1,
"resultsPerPage": 1
},
"items": [
{
"snippet": {
"title": "Bob Paisley: The Humble Genius | Liverpool's most successful manager in his own words"
},
"contentDetails": {
"duration": "PT1M47S"
}
}
]
}
您可以在"contentDetails"部分检查"duration"值。
您还可以尝试YouTube数据API(v3)参考文档中提供的(try-it)功能。
上面链接的try-it具有获取视频ID为a0IrBTg6zcI
的视频信息的参数,与此答案中使用的参数相同,但是,此请求可能需要更多数据。