25
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Node.jsでTumblr APIのAccess Tokenを取得する

Last updated at Posted at 2015-03-10

##バージョン

※2015/03/10時点

  • Node.js v0.12
  • express v4.12.2
  • oauth(Node.jsモジュール) v0.9.12

##はじめに

最近tumblrの連携を色々調べてます。API経由でPOSTする方法を調べてたのですが、twitterとかでよくあるOAuthな認証らしく、

  • Consumer Key
  • Consumer Secret
  • Access Token
  • Access Token Secret

が必要みたいですね。twitter bot とか作るときによくみるアレです。

参考: OAuthとは?―OAuthの概念とOAuthでできること

Consumer KeyとConsumer Secretの取得

こちらからアプリ登録をして進めていけばこの二つの情報は取得できます。

Access Token と Access Token Secretの取得

ここが面倒くさいところです。Twitterだとアプリの管理画面からこの二つの情報は取得できますが、Tumblrは独自で実装しないといけないみたい。

Node.jsから取得してみるモチベーション

PHPとかのサンプルはよく見るんですけど、Node.jsサンプルはあまりなかったのでまとめてみます。

Tumblr APIのAccess-Tokenを取得するサービスを作ってみた。 とやっている人もいたのですが、上手く動いてませんでした汗

内容見ると簡単そうなのでサクッと作ってしまいましょう。

実装

参考: http://www.blake-anderson.com/post/50e7db311e31c2020000000a

参考サイトのコードはexpressの古いバージョンらしく、こちらで書き換えてみました。

モジュールインストール

$ npm i --save express oauth

tumblrConsumerKeyとtumblrConsumerSecretにそれぞれ取得したConsumer KeyとConsumer Secretを指定します。あとはコピペで動くと思います。

app.js
var express = require('express'),
    oauth = require('oauth'),
    http = require('http');

var app = express();
app.set('port', process.env.PORT || 3000);

var tumblrConsumerKey = "****************",
    tumblrConsumerSecret = "*******************",
    tumblrOauthAccessToken = undefined,
    tumblrOauthAccessTokenSecret = undefined,
    oauthRequestToken,
    oauthRequestTokenSecret;

//OAuth用オブジェクト
var consumer = new oauth.OAuth(
  "http://www.tumblr.com/oauth/request_token",
  "http://www.tumblr.com/oauth/access_token",
  tumblrConsumerKey,
  tumblrConsumerSecret,
  "1.0A",
  "http://localhost:3000/auth/callback",
  "HMAC-SHA1"
);

//リクエストトークン生成
app.get('/', function (req, res) {
  consumer.getOAuthRequestToken(function(error, oauthToken, oauthTokenSecret){
    if (error) {
      res.send("Error getting OAuth request token: " + error, 500);
    } else {
      oauthRequestToken = oauthToken,
      oauthRequestTokenSecret = oauthTokenSecret;

      res.redirect("http://www.tumblr.com/oauth/authorize?oauth_token=" + oauthRequestToken);
    }
  });
});

//アクセストークン取得
app.get('/auth/callback', function (req, res) {
  consumer.getOAuthAccessToken(oauthRequestToken, oauthRequestTokenSecret, req.query.oauth_verifier, function(error, _oauthAccessToken, _oauthAccessTokenSecret) {
    if (error) {
      res.send("Error getting OAuth access token: " + error, 500);
    } else {
      tumblrOauthAccessToken = _oauthAccessToken;
      tumblrOauthAccessTokenSecret = _oauthAccessTokenSecret;
      //AccessTokenとAccessTokenSecretを表示
      res.send('Access Token:' + tumblrOauthAccessToken +'<br/>Access Token Secret:'+tumblrOauthAccessTokenSecret);
    }
  });
});

http.createServer(app).listen(app.get('port'), function () {
  console.log('Express server listening on port ' + app.get('port'));
});

###実行

$ node app.js
Express server listening on port 3000

http://localhost:3000 にアクセスすると

こんな感じのページにリダイレクトされます。

Allow を選択しましょう。

Access Token:*******************************
Access Token Secret:***************************

こんな感じで二つの情報が取得できるはずです。

あとはAPI経由でPOSTしたり色々できますね。

25
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?