Azure Functions で tumblr の API を叩く

24 September 2018
#Azure#Azure Functions#tumblr

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 をラップする方法でした。

4423.ch