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