我在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"
要尝试的任何想法吗?
答案 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
需要我请求其他范围。
我的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) {
...
})