Skip to content

Instantly share code, notes, and snippets.

@tatat
Created March 28, 2012 05:08
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 tatat/2223804 to your computer and use it in GitHub Desktop.
Save tatat/2223804 to your computer and use it in GitHub Desktop.
カジュアルにTwitterからoauth_access_tokenとoauth_access_token_secretを持ってくる
#!/usr/bin/env node
var util = require('util')
, express = require('express') // npm install express
, OAuth = require('oauth').OAuth // npm install oauth
, opts = require('opts'); // npm install opts
opts.parse([{
'short': 'p'
, 'long': 'port'
, 'value': true
, 'description': 'port to listen on'
}, {
'short': 'h'
, 'long': 'hostname'
, 'value': true
, 'description': 'callback hostname'
}, {
'short': 'a'
, 'long': 'authenticate'
, 'value': false
, 'description': 'use authenticate url'
}], [{
'name': 'consumer_key'
, 'required': true
, 'description': 'consumer key'
}, {
'name': 'consumer_key_secret'
, 'required': true
, 'description': 'consumer key secret'
}], true);
var NotFoundException = function() {
Error.apply(this, arguments);
this.status = 404;
};
NotFoundException.prototype.__proto__ = Error.prototype;
var urls = {
'request_token': 'https://api.twitter.com/oauth/request_token'
, 'access_token': 'https://api.twitter.com/oauth/access_token'
, 'authorize': 'https://api.twitter.com/oauth/authorize'
, 'authenticate': 'https://api.twitter.com/oauth/authenticate'
, 'verify_credentials': 'http://api.twitter.com/1/account/verify_credentials.json'
}
, authenticate = opts.get('authenticate')
, port = opts.get('port') - 0 || 3000
, hostname = opts.get('hostname') || 'localhost'
, consumer_key = opts.arg('consumer_key')
, consumer_key_secret = opts.arg('consumer_key_secret');
var app = express.createServer();
app.configure(function() {
// app.use(express.logger());
app.use(express.bodyParser());
app.use(express.cookieParser());
app.use(express.session({
secret: '⊂( っ☉ω☉)っ'
}));
app.use(app.router);
app.use(function (req, res, next) {
next(new NotFoundException);
}).use(function (err, req, res, next) {
res.send(err.status || 500);
console.error(err);
});
});
var oauth = new OAuth(
urls.request_token
, urls.access_token
, consumer_key
, consumer_key_secret
, '1.0'
, 'http://' + hostname + ':' + port + '/callback'
, 'HMAC-SHA1'
);
app.get('/', function(req, res, next) {
oauth.getOAuthRequestToken(function(err, token, token_secret, results) {
if (err) return next(new Error(err.data));
req.session.oauth_token = token;
req.session.oauth_token_secret = token_secret;
console.log([
'request_token: %s'
, 'request_token_secret: %s'
].join('\n'), token, token_secret);
res.redirect((authenticate ? urls.authenticate : urls.authorize) + '?oauth_token=' + encodeURIComponent(token));
});
});
app.get('/callback', function(req, res, next) {
var session = req.session;
if (!session.oauth_token || !session.oauth_token_secret)
return res.redirect('/');
oauth.getOAuthAccessToken(
session.oauth_token
, session.oauth_token_secret
, req.param('oauth_verifier')
, function(err, access_token, access_token_secret, results) {
if (err) return next(new Error(err.data));
session.oauth_access_token = access_token;
session.oauth_access_token_secret = access_token_secret;
console.log([
'access_token: %s'
, 'access_token_secret: %s'
].join('\n'), access_token, access_token_secret);
res.redirect('/verify_credentials');
}
);
delete session.oauth_token;
delete session.oauth_token_secret;
});
app.get('/verify_credentials', function(req, res, next) {
var session = req.session;
if (!session.oauth_access_token || !session.oauth_access_token_secret)
return res.redirect('/');
var access_token = session.oauth_access_token
, access_token_secret = session.oauth_access_token_secret;
oauth.getProtectedResource(
urls.verify_credentials
, 'GET'
, access_token
, access_token_secret
, function (err, data, response) {
if (err) {
if (err.statusCode === 401) {
res.redirect('/');
} else {
next(err);
}
return;
}
res.charset = 'utf8';
res.contentType('txt');
try {
var results = util.inspect(JSON.parse(data));
console.log('results: %s', results);
res.send([
'oauth_access_token: ' + access_token
, 'oauth_access_token_secret: ' + access_token_secret
, 'results: ' + results
].join('\n'));
} catch (err) {
return next(err);
}
}
);
});
app.listen(port);
console.log('Server listening on port %d', app.address().port);
process.on('uncaughtException', function(err) {
console.error('Caught exception: %s', err.message);
process.exit(1);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment