Skip to content

Instantly share code, notes, and snippets.

@lucabelluccini
Created March 8, 2014 20:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lucabelluccini/9438522 to your computer and use it in GitHub Desktop.
Save lucabelluccini/9438522 to your computer and use it in GitHub Desktop.
A node.js script to perform bulk posting to Blogger. See comments to get your Auth key :D
// var gapi = require('googleapis'); // Cannot use it
var https = require('https');
// Template for Post content
swig = require('swig'),
extras = require('swig-extras');
extras.useFilter(swig, 'truncate');
var template = swig.compileFile('ABSOLUTE-PATH-TO-TEMPLATE/template.html');
// Read file containing information
var posts = require('./posts.json');
// Access google api documentation at this page: https://developers.google.com/blogger/docs/3.0/reference/posts/insert#try-it
// Login using OAuth and try an insert
// Copy the Authorization value in the Headers into our HEADER variable
var BLOG_ID = 'YOUR-BLOG-ID';
var METHOD = 'POST';
var HEADERS = { 'Content-Type': 'application/json', 'Authorization': 'YOUR-BEARER-KEY', 'X-JavaScript-User-Agent': 'Google APIs Explorer' };
var HOST = 'www.googleapis.com';
// YOUR_API_KEY must not be changed!
var ENDPOINT = '/blogger/v3/blogs/' + BLOG_ID + '/posts?fetchBody=false&fetchImages=false&isDraft=false&key={YOUR_API_KEY}'
var googleApiRequestForBloggerOptions = {
host: HOST,
path: ENDPOINT,
method: METHOD,
headers: HEADERS
};
function googleApiRequestForBloggerRequest(googleApiPayload, success) {
var googleApiRequestForBlogger = https.request(googleApiRequestForBloggerOptions, function(res) {
res.setEncoding('utf-8');
var responseString = '';
res.on('data', function(data) {
responseString += data;
});
res.on('end', function() {
var responseObject = JSON.parse(responseString);
success(responseObject);
});
});
googleApiRequestForBlogger.write(googleApiPayload);
googleApiRequestForBlogger.end();
}
/*
POST https://www.googleapis.com/blogger/v3/blogs/------------------/posts?fetchBody=false&fetchImages=false&isDraft=false&key={YOUR_API_KEY}
Content-Type: application/json
Authorization: Bearer *****************************************************
X-JavaScript-User-Agent: Google APIs Explorer
{
"labels": [
"asd"
],
"title": "asd",
"content": "asd"
}
*/
// For each post
function postToBlogger()
{
var post = posts.shift();
// Render post content
var insertPost = { labels: post.tags, title: post.title, content: template(post) };
var payload = JSON.stringify(insertPost);
// Post it
googleApiRequestForBloggerRequest(payload, function(success) { if(success.kind) { console.log(success); } else { console.log('Will retry...'); console.log(success); posts.push(post); } } );
}
setInterval(postToBlogger, 2000);
[
{
"links" : ["http://www.serfdom.io/"],
"title" : "Service discovery and orchestration for Go",
"tags" : [ "golang", "software architecture" ]
},
{
"links" : ["http://longomatch.org/"],
"title" : "Free application to record, tag and analyse videos in real-time (targeted for sport/games)",
"tags" : [ "software", "video", "analysis" ]
},
{
"links" : ["http://beta.slashdot.org/story/199013"],
"title" : "Valve Prepping Source 2 Engine For VR",
"tags" : [ "vr", "valve", "game engine" ]
},
{
"links" : ["http://www.polygon.com/2014/3/5/5458072/portal-board-game-interview-valve-cryptozoic-entertainment"],
"title" : "Portal Board Game by Cryptozoic",
"tags" : [ "board game", "valve", "portal" ]
},
{
"links" : ["http://www.engadget.com/2014/03/04/apple-carplay-ferrari-ff-hands-on/?ncid=rss_truncated", "http://www.theregister.co.uk/2014/03/02/mercedes_plots_fandroid_future/", "http://www.engadget.com/2014/03/02/google-projected-mode-mercedes-benz-leak/?ncid=rss_truncated"],
"title" : "Google and Automotive IVI, Apple and CarPlay on Ferrari FF. Who will win?",
"tags" : [ "google", "apple", "automotive", "ivi", "carplay", "ferrari" ]
},
{
"links" : ["http://www.engadget.com/2014/03/04/skype-for-outlook-com-is-now-available-worldwide/?ncid=rss_truncated"],
"title" : "Skype on the browser. Finally.",
"tags" : [ "skype", "webapp" ]
},
{
"links" : ["http://www.mashery.com/product/io-docs", "http://swagger.wordnik.com/", "http://apiblueprint.org/", "http://raml.org/index.html"],
"title" : "Different ways to document/generate or model your REST API",
"tags" : [ "rest api", "documentation" ]
},
{
"links" : ["http://linuxgizmos.com/qt-embedded-gui-adds-yocto-recipes-hops-up-emulator/", "https://www.yoctoproject.org/"],
"title" : "Qt Embedded gains new platforms. Yocto link to provide some context.",
"tags" : [ "qt", "embedded", "yocto" ]
}
]
<p>
{% if desc %}{{ desc }}<br/>{% endif %}
<ul>
{% for link in links %}
<li><a href="{{ link }}">{{ link|truncate(60) }}</a></li>
{% endfor %}
</ul>
</p>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment