Youtube API - 无法将视频添加到播放列表

时间:2015-10-02 23:27:22

标签: javascript jquery ajax youtube youtube-api

我在Youtube API v3中获得了GET请求的成功,但是在使用POST版本时遇到问题,将视频添加到播放列表中。我已经尝试了很多组合,比如把密钥放在查询字符串中,访问标记在查询字符串或标题中,json与jsonp,但仍然没有运气。

我让它在API Explorer中正常工作,但它打印出来的请求只是没有上下文代码的基本部分才能使它工作,所以我猜我在实现中弄乱了一些东西调用ajax post命令。这就是我正在做的事情:

var myAccessToken = "blahblah"; //from oauth2, works fine for other calls

$.ajax({
  type: "POST",

  url: "https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&access_token=" + myAccessToken, 

  data: {
    "snippet": {
      "playlistId": "PLIjo1t8cDbpGhOJrgEgMGFMb-VtAus_x9",  
      "resourceId": {
        "kind": "youtube#video",
        "videoId": "KMGuyGY5gvY"
      },
    }                
  },  

  success: function(data, textStatus, request) { 
    console.log("in success of ajax call, data: ", data);
  },

  dataType: 'jsonp' 
});

我当前的错误如下。不确定我是否真的需要“选择过滤器”,或者我的语法在某处是错误的。

Error 400:
domain: "youtube.parameter"
location: ""
locationType: "parameter"
message: "No filter selected."
reason: "missingRequiredParameter"

要尝试的任何想法吗?

3 个答案:

答案 0 :(得分:0)

我相信您在part: 'snippet',资源之前错过了data

答案 1 :(得分:0)

我得到了它的工作,虽然我不确定究竟是什么部分是问题。我遇到了这个例子:https://code.google.com/p/youtube-api-samples/source/browse/yt-upload-javascript/index.js 有一个例子就像我需要的那样做了几乎相同的东西,一旦我改变了我的语法,就可以了。这就是我最终的结果:

var accessToken = "blahblah";
var metadata = {
        snippet: {
                playlistId: "WL", //specifically works for WatchLater list, 
                                 //but a playlist ID can be used too
                resourceId: {
                    kind: "youtube#video",
                    videoId: "eNAajAflpBQ"
                },
        }
};

$.ajax({
    method: "POST", 
    url: "https://www.googleapis.com/youtube/v3/playlistItems?part=snippet", 

    data: JSON.stringify(metadata),

    headers: {
        Authorization: 'Bearer ' + accessToken
    },

    contentType: 'application/json',
}).done( function(data, textStatus, request) { 
    console.log("in success of ajax call, data: ", data);
});

感谢那些调查并提出建议的人!

答案 2 :(得分:0)

最初我请求SCOPES = 'https://www.googleapis.com/auth/youtube.readonly'

并根据this

  

授权

     

此请求需要获得以下至少一项的授权   以下范围(详细了解身份验证和   授权)。

     

范围

     

https://www.googleapis.com/auth/youtubepartner

     

https://www.googleapis.com/auth/youtube

     

https://www.googleapis.com/auth/youtube.force-ssl

需要我请求其他范围。

我的insert如下:

let request = gapi.client.youtube.playlistItems.insert({
  part: 'snippet',
  resource: {
    snippet: {
      playlistId: 'PLAYLIST_ID',
      resourceId: {
        videoId: 'YOUTUBE_TRACK_ID,
        kind: 'youtube#video'
      }
    }
  }
})
request.execute(function (response) {
  ...
})