Skip to content

Full working example for interacting with google

Tobbe edited this page Jul 14, 2011 · 3 revisions
var sys = require('sys');
var OAuth = require('oauth').OAuth;

var oa = new OAuth("https://www.google.com/accounts/OAuthGetRequestToken",
	"https://www.google.com/accounts/OAuthGetAccessToken", 
	"anonymous",  "anonymous", 
	"1.0A", undefined, "HMAC-SHA1");       

oa.getOAuthRequestToken({"scope":"http://www.google.com/calendar/feeds"}, function(error, oauth_token, oauth_token_secret, results) {
	if (error) {
		console.log('error: ' + JSON.stringify(error));
	} else {
		console.log('oauth_token: ' + oauth_token);
		console.log('oauth_token_secret: ' + oauth_token_secret);
		console.log('requestoken results: ' + sys.inspect(results));
		console.log("Requesting access token");
		console.log('Please go to https://www.google.com/accounts/OAuthAuthorizeToken?oauth_token=' + oauth_token);
		ask("Please enter the verification code:\n", /[\w\d]+/, function(data) {
			oa.getOAuthAccessToken(oauth_token, oauth_token_secret, data, accessTokenCallback);
		});
	}
});

function accessTokenCallback(error, access_token, access_token_secret, results) {
	if (error) {
		console.log('error: ' + JSON.stringify(error));
	} else {
		console.log('oauth_access_token: ' + access_token);
		console.log('oauth_access_token_secret: ' + access_token_secret);
		console.log('accesstoken results: ' + sys.inspect(results));

		console.log('getting a list of all your calendars');
		var url = 'http://www.google.com/calendar/feeds/default/allcalendars/full?v=2&alt=jsonc';
		var request = oa.get(url, access_token, access_token_secret, function(error, data) {
			if (error) {
				console.log(error);
			} else {
				var calendars = JSON.parse(data).data.items;
				for (var i = 0; i < calendars.length; ++i) {
					console.log(calendars[i].title);
				}
			}
		});
	}
}

function ask(question, format, callback) {
	var stdin = process.stdin;
	var stdout = process.stdout;

	stdin.resume();
	stdout.write(question);

	stdin.once('data', function(data) {
		data = data.toString().trim();

		if (format.test(data)) {
			callback(data);
		} else {
			stdout.write("It should match: "+ format +"\n");
			ask(question, format, callback);
		}
	});
}
Clone this wiki locally