Node.js에서 Tumblr API의 Access Token 얻기

## 버전

※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을 취득하는 서비스를 만들어 보았다. 하고 있는 사람도 있었지만, 잘 움직이지 않았던 땀

    내용 보면 간단할 것 같기 때문에 바삭하게 만들어 버립니다.

    구현



    참고 : h tp // w w.ぁけーあんでr그래. 코 m / 포 st / 50에 7db311에 31c2020000000

    참고 사이트의 코드는 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하거나 여러가지 할 수 있네요.

    좋은 웹페이지 즐겨찾기