我正在尝试通过JavaScript V3 API访问博客。如果我尝试访问我的(公共)测试博客,一切都会像预期的那样工作。
如果我使用相同的代码,但试图访问我的(私有)测试博客,我会得到一个错误。
以下是我的代码
var client_id = ['WWWW', 'XXXX'];
var api_key = ['YYYY','ZZZZ'];
var discoveryDocs = ['https://www.googleapis.com/discovery/v1/apis/blogger/v3/rest'];
var scope = 'https://www.googleapis.com/auth/blogger.readonly';
var blog_id = ['BLOG0', 'BLOG1'];
var appendResults = function(results) {
$('#results').append(JSON.stringify(results, undefined, 2) + '<hr/>');
};
getBlogs = function(client, key, blog) {
gapi.client.init({
'apiKey': key,
'clientId': client,
'discoveryDocs': discoveryDocs,
'scope': scope
}).then(function() {
return gapi.client.blogger.posts.list({
'blogId': blog
});
}).then(function(d) {
return d;
}).then(function(response) {
appendResults(response);
}, function(reason) {
appendResults(reason);
});
};
gapi.load('client', function() {
for(i=0; i<api_key.length; i++) {
getBlogs(client_id[i], api_key[i], blog_id[i]);
}
});api_key和blog_id中的第二个元素是我的私人博客。
以下是我的回应
{
"result": {
"kind": "blogger#postList",
"items": [
{
"kind": "blogger#post",
"id": "XXXX",
"blog": {
"id": "XXXX"
},
"published": "XXXX",
"updated": "XXXX",
"etag": "\"XXXX\"",
"url": "http://XXXX/2017/03/blog-post.html",
"selfLink": "https://www.googleapis.com/blogger/v3/blogs/XXXX/posts/XXXX",
"title": "",
"content": "XXXX",
"author": {
"id": "XXXX",
"displayName": "XXXX",
"url": "https://www.blogger.com/profile/XXXX",
"image": {
"url": "XXXX"
}
},
"replies": {
"totalItems": "0",
"selfLink": "XXXX"
}
}
],
"etag": "\"XXXX\""
},
"body": "{\n \"kind\": \"blogger#postList\",\n \"items\": [\n {\n \"kind\": \"blogger#post\",\n \"id\": \"XXXX\",\n \"blog\": {\n \"id\": \"639440130428294175\"\n },\n \"published\": \"XXXX\",\n \"updated\": \"XXXX\",\n \"etag\": \"\\\"XXXX\\\"\",\n \"url\": \"http://XXXX/2017/03/blog-post.html\",\n \"selfLink\": \"https://www.googleapis.com/blogger/v3/blogs/XXXX/posts/XXXX\",\n \"title\": \"\",\n \"content\": \"XXXX\",\n \"author\": {\n \"id\": \"XXXX\",\n \"displayName\": \"XXXX\",\n \"url\": \"https://www.blogger.com/profile/XXXX\",\n \"image\": {\n \"url\": \"XXXX\"\n }\n },\n \"replies\": {\n \"totalItems\": \"0\",\n \"selfLink\": \"https://www.googleapis.com/blogger/v3/blogs/XXXX/posts/XXXX/comments\"\n }\n }\n ],\n \"etag\": \"\\\"XXXX\\\"\"\n}\n",
"headers": {
"date": "XXXX",
"content-encoding": "gzip",
"vary": "Origin, X-Origin",
"content-length": "576",
"pragma": "no-cache",
"server": "GSE",
"etag": "\"XXXX\"",
"content-type": "application/json; charset=UTF-8",
"cache-control": "no-cache, no-store, max-age=0, must-revalidate",
"expires": "XXXX"
},
"status": 200,
"statusText": null
}和
{
"result": {
"error": {
"errors": [
{
"domain": "global",
"reason": "invalid",
"message": "We're sorry, but the requested resource could not be found."
}
],
"code": 400,
"message": "We're sorry, but the requested resource could not be found."
}
},
"body": "{\n \"error\": {\n \"errors\": [\n {\n \"domain\": \"global\",\n \"reason\": \"invalid\",\n \"message\": \"We're sorry, but the requested resource could not be found.\"\n }\n ],\n \"code\": 400,\n \"message\": \"We're sorry, but the requested resource could not be found.\"\n }\n}\n",
"headers": {
"date": "XXXX",
"content-encoding": "gzip",
"vary": "Origin, X-Origin",
"content-length": "160",
"server": "GSE",
"content-type": "application/json; charset=UTF-8",
"cache-control": "private, max-age=0",
"expires": "XXXX"
},
"status": 400,
"statusText": null
}我已经在开发人员控制台中设置了凭据。我通过localhost:5000/访问它,我已经在开发人员控制台中将localhost设置为一个有效域。
我唯一能想到的可能是
"result": {
"error": {
"errors": [
{
"domain": "global",
"reason": "invalid",
"message": "We're sorry, but the requested resource could not be found."
}
],
"code": 400,
"message": "We're sorry, but the requested resource could not be found."
}这可能是告诉我,我的要求原产地是无效的,但我不能肯定。
如果我将相同的(私有)博客公开并重新执行,那么这段代码适用于两个博客ID。
我哪里出问题了?
发布于 2017-03-27 07:01:20
Blogger要求您的应用程序在访问私有博客上的信息时必须具有OAuth 2.0令牌(请参阅这里的文件)。只有使用API密钥才不会使请求工作。
如果这些帖子是在私人博客上发布的,那么授权是必需的。如果这些帖子是在一个公开的博客上发布的,那么这个方法可以不经授权就被调用。
而且,当使用OAuth令牌时,作用域是不同的-
下面是Blogger的OAuth 2.0作用域信息: https://www.googleapis.com/auth/blogger 要使用Google2.0请求访问,您的应用程序需要范围信息以及OAuth在应用程序注册期间提供的信息(例如客户机ID和/或客户端机密)。
您可以通过https://developers.google.com/apis-explorer/#search/blogger.posts.list/m/blogger/v3/blogger.posts.list测试此API。
https://stackoverflow.com/questions/42979441
复制相似问题