有没有办法限制来自youtube api的查询数量?

时间:2019-05-10 20:27:28

标签: javascript jquery api youtube-data-api

我正在创建一个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;
}

2 个答案:

答案 0 :(得分:0)

请务必使用artist之类的符号来使titleencodeURIComponent转义。可能是这些变量中的字符串破坏了您要处理的预期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"
   }
  }
 ]
}