Azure Functions で tumblr の API を叩く

Function App (Java Script) で Tumblr API を叩いてダッシュボードを取得するメモです。

もともと、Azure Logic Apps から Tumblr のダッシュボードを取得したいという目的があったのですが、そのためのコネクタがないので Function App として作成しました。なので、作成する関数は、HTTP 要求を受けて JSON を返すという Tumblr API のラッパーのような感じになっています(というより出来上がったものは完全にライブラリのラッパーです)。

また、前提として、あらかじめ Tumblr API のアクセストークンを取得しています。取得にあたってはNode.jsでTumblr APIのAccess Tokenを取得するを参考にしました(OAuthのURLをhttp→httpsに変更する必要があります)。

実装

ダッシュボードを取得する Tumblr API には OAuth 1.0a でアクセスする必要があるのですが、楽をしたいので tumblr.js を使いました。

tumblr.js をインストールするには、Function App を作成した後に、プラットフォーム機能 → コンソールから次のコマンドを実行します。

npm install --save tumblr.js

 

それから、Function App の index.js を次のように編集します。

module.exports = function (context, req) {
    var oauth = {
        consumer_key: 'xxxxxx',
        consumer_secret: 'xxxxxx',
        token: 'xxxxxx',
        token_secret: 'xxxxxx'
    };

    var tumblr = require('tumblr.js');
    var client = tumblr.createClient({
        credentials: oauth,
        returnPromises: true,
    });

    return client.userDashboard(req.query)
        .then(function(resp) {
            context.res = { body: resp };
        })
        .catch(function(err) {
            context.res = { status: 500, body: err };
        });
};

このコードでは、関数の戻り値として Promise を返し、then 関数のコールバックで応答を設定しています。Promise を返すときは context.done() を呼び出さなくてもいいらしいです。

また、client.userDashboard 関数に req.query を指定しているのは、

https://<関数のURL>?limit=10&type=text

のように要求することで、その条件に一致する投稿を取得するためです(雑ですね)。

 

以上、Azure Functions で tumblr.js をラップする方法でした。

コメントを残す

*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>