我正在创建一个tampermonkey脚本,该脚本将从网页中读取包含艺术家和歌曲标题的文本行,并创建一个链接,该链接将打开一个新选项卡,指向从youtube api返回的第一个结果。我的问题是,根据我的youtube api信息中心,加载该页面并说该特定页面上有5首歌曲时,我对该单个页面发出了大约1200个api请求。我猜这是因为当我查询单个歌手/歌曲时,它会在其服务器上获得所有结果。我尝试将maxResults限制为1,但这无济于事。由于youtube减少了单个API获得的查询数量,因此我想知道是否有一种方法可以减少它进行的查询数量。实际上,我只需要GET请求的第一个结果,因为很有可能是正确的视频。
这是我的代码片段,可解析json数据:
function getLink(artist, song){
// API Key
var key = "MY_KEY";
// Setup url for api
var url = 'https://www.googleapis.com/youtube/v3/search?part=id&q=' + artist + "-" + song + '&maxResults=1&key=' + key;
// call api and get videoId
var xhReq = new XMLHttpRequest();
xhReq.open("GET", url, false);
xhReq.send(null);
var id = JSON.parse(xhReq.responseText);
return id.items[0].id.videoId;
}
答案 0 :(得分:0)
请务必使用artist
之类的符号来使title
和encodeURIComponent
转义。可能是这些变量中的字符串破坏了您要处理的预期URL。
甚至更多,如果您使用Youtube API沙箱进行测试,则可以自己进行检查。在我的情况下,我尝试了“ Radiohead”和“ Paranoid Android”,并获得了3个最大结果,而且效果很好。 See here
答案 1 :(得分:0)
我不确定是否要查看相同的Google文档,但它表示对于Search:list调用, part 参数应该为 snippet 。我知道不同的通话会占用不同的配额金额。使用下面的查询,我只会返回一首歌曲。似乎只使用Search:list所需的正常100个配额单位:
https://www.googleapis.com/youtube/v3/search?part=snippet&maxResults=1&q=Adele+Hello&fields=items(id(videoId))&key=API_key
它返回:
{
"items": [
{
"id": {
"videoId": "YQHsXMglC9A"
}
}
]
}