YouTube API搜索 - 优先VEVO视频

时间:2015-03-31 13:03:46

标签: youtube-api

我有一个使用YouTube API(v3)的脚本,可以根据艺术家的名字和音乐的名称查找音乐视频。

然而,在某些情况下,第一选择(按相关性排序)不是官方视频VEVO。

我尝试在我的查询中添加VEVO(在艺术家姓名和音乐名称之后),但是当没有视频VEVO时,API不会返回任何结果。

是否可以强制选择VEVO视频(如果存在)?

谢谢。

文森特

3 个答案:

答案 0 :(得分:2)

var request = gapi.client.youtube.search.list
({
    q: artiste+' '+track,
    part: 'snippet',
    order: 'relevance'
});

request.execute(function(response) 
{
    idVideo=response.result.items[0].id.videoId;
});

这是允许根据艺术家的名字和音乐名称选择视频ID的部分

答案 1 :(得分:0)

更新:我不认为我在下面提到的联合视频会运行良好,但我会留在那里以防你想要探索它。什么可能更好,同样没有保证,但应该更准确只是希望最好只是按viewCount而不是相关性排序...一般来说,VEVO视频拥有最多的观点。

示例:https://developers.google.com/apis-explorer/#p/youtube/v3/youtube.search.list?part=snippet&order=viewCount&q=nicki+minaj+anaconda&type=video&_h=3&

GET https://www.googleapis.com/youtube/v3/search?part=snippet&order=viewCount&q=nicki+minaj+anaconda&type=video&key={YOUR_API_KEY}

-

原始答案

我还没能测试它,并不一定会将其限制为仅限vevo视频,但您可以尝试使用联合选项https://developers.google.com/youtube/v3/docs/search/list#videoSyndicated

string
The videoSyndicated parameter lets you to restrict a search to only videos that can be played outside youtube.com. If you specify a value for this parameter, you must also set the type parameter's value to video.

Acceptable values are:
any – Return all videos, syndicated or not.
true – Only retrieve syndicated videos.

如果没有返回任何内容,那么在没有联合的情况下进行相同的搜索并使用第一个选项。

答案 2 :(得分:0)

实际上很容易。你需要做的是添加' VEVO'你搜索查询。这将确保来自VEVO频道的任何内容都是第一个结果。看起来应该是这样的。

var request = gapi.client.youtube.search.list
({
    q: artiste+' '+track + 'VEVO',
    part: 'snippet',
    order: 'relevance'
});

如果您不想确保获得VEVO视频,最简单的方法是解析频道标题,确保其中包含单词" VEVO"。该代码看起来像这样

var request = gapi.client.youtube.search.list
({
    q: artiste+' '+track + 'VEVO',
    part: 'snippet',
    order: 'relevance'
});
  var obj = JSON.parse(result.content);
  var findChannelTitle = obj.items[0].snippet.channelTitle;
  var isVevo = findChannelTitle.match(/VEVO/g); //checks to see if this is VEVO content. We only wan't to use Vevo videos. 
  if (isVevo){ //returns true if VEVO is found in the channel title
    var youtubeVideoId = obj.items[0].id.videoId; //finds the video ID
    return youtubeVideoId;
  }else{
    return null;
  }