如何使用博主api nodejs插入post

根据文档,我已经通过request callvalidation了我的应用,并尝试插入post:

 var blogger = google.blogger('v3'); app.post('/creatGoogleBloggerPost', function(req, res, next){ console.log('creatGoogleBloggerPost called'); var oauth2Client = new google.auth.OAuth2(); var key = require('./public_html/SoulSeeker2-1bxxxaaa727d.json'); var jwtClient; jwtClient = new google.auth.JWT(key.client_email, null, key.private_key, ['https://www.googleapis.com/auth/blogger'], null); jwtClient.authorize(function(err, tokens) { console.log('retrieved tokens.access_token from google', tokens.access_token); google.options({ auth: jwtClient }); if (err) { console.log(err); return; } else { blogger.posts.insert({ auth: jwtClient, blogId: '4113791741191234135', resource: { title: 'Sample rootscope', content: 'Content rootscope' } }, function(){ console.log('success'); }); } }); }); 

我得到的令牌,也打印回电success message ,但是,当我检查博客没有插入post。 也没有错误。 这里有什么可能是错的?

更新:

其实google-blogger-api不接受服务帐户令牌。 所以修改我的代码使用oauth2.0node-passport但仍然得到login error

 blogger.posts.insert({ Authorization: 'Bearer ' +USERS.accessToken, blogId: '4113796741591234135', resource: { title: 'Sample rootscope', content: 'Content rootscope' } }, function(err, reponse){ if(err){ console.log('error ', err); } else { console.log('blog post success in google blogger' , reponse); } }); 

我已经通过身份validationtoken但现在我得到这样的错误:

 error { [Error: Login Required] code: 401, errors: [ { domain: 'global', reason: 'required', message: 'Login Required', locationType: 'header', location: 'Authorization' } ] } 

我正在使用官方的谷歌博客API 。 我想我没有通过标题中的令牌。 我如何正确传递令牌来解决这个问题?

实际的问题是我不能通过原始access token ,我需要像这样包装它:

 authObj = new google.auth.OAuth2(); authObj.setCredentials({ access_token: USERS.accessToken }); 

上面的“包装部分”没有明显logging为blogger-api

然后在下面的调用中传递它,如auth:authObj

 blogger.posts.insert({ auth: authObj, blogId: '4113796741591234135', resource: { title: 'Sample rootscope', content: 'Content rootscope' } }, function(err, reponse){ if(err){ console.log('error ', err); } else { console.log('blog post success in google blogger' , reponse); } }); 

花了这么多天才能正确使用nodejs的方式(不使用passportjs)。 希望这可以帮助。

发布到博客API的另一种方法如下:

注意:我正在使用nodejs和expressjs。

 var express = require('express'); var app = express(); var request = require('request'); var rp = require('request-promise'); app.get('/creatGoogleBloggerPost', blogPost); app.get("/auth/google/Bloggercallback", blogCallBack); 

获取Auth客户端:

 function getOAuthClient() { return new OAuth2('client id', 'client secret', 'callback url'); } 

获取Authurl:

 function getAuthUrl() { var oauth2Client = getOAuthClient(); var url = oauth2Client.generateAuthUrl({ access_type: 'offline', scope: 'https://www.googleapis.com/auth/blogger' }); return url; } function blogPost(req, res, next) { var params = { name: "sample", auth: getAuthUrl() }; console.log(''); console.log('======================================================================='); console.log('blogger api auth url: ', params); console.log('======================================================================='); console.log(''); res.send(params.auth); //on the front-end view, I am doing window.location.replace to route `params.auth` } 

发布到博客里面callback:

 function blogCallBack(req, res, next) { var oauth2Client = getOAuthClient(); var code = req.query.code; oauth2Client.getToken(code, function (err, tokens) { if (!err) { oauth2Client.setCredentials(tokens); console.log(''); console.log('==============================================================='); console.log('BloggerAPI Callback....'); console.log('Success Getting BloggerAPI Token', tokens); console.log('==============================================================='); console.log(''); var params = { title: 'Sample title', content: 'Sample Content' }; var options = { uri: 'https://www.googleapis.com/blogger/v3/blogs/1939594269984333602/posts/', method: 'POST', body: params, headers: { 'User-Agent': 'Request-Promise', "Authorization": 'Bearer ' + tokens.access_token }, json: true // Automatically parses the JSON string in the response }; rp(options) .then(function (response) { console.log('================================='); console.log('================================='); console.log("RESPONSE.STATUSCODE: ", res.statusCode); console.log('================================='); console.log('================================='); if (res.statusCode >= 100 && res.statusCode < 600) return res.redirect('/'); else return res.status(500); }) .catch(function (err) { console.log('================================='); console.log('================================='); console.log('POST error ', err.stack); console.log('================================='); console.log('================================='); return res.status(res.statusCode).send(err); }); } else { console.log('Error Getting BloggerAPI Token', err); } }); } 

唯一的问题是我传递硬编码的值在callback中发布博客。 如果任何人都可以帮助我,这将是伟大的。 谢谢

你的问题是令牌,就像你需要encryption一样。

 blogger.posts.insert({ Authorization: 'Bearer ' + btoa(USERS.accessToken), blogId: '4113796741591234135', resource: { title: 'Sample rootscope', content: 'Content rootscope' } }, function(err, reponse){ if(err){ console.log('error ', err); } else { console.log('blog post success in google blogger' , reponse); } });