読者です 読者をやめる 読者になる 読者になる

2-legged OAuthで認証して外部APIを利用する

Erlang OAuth

Erlangerlang-oauthを使い、2-legged OAuthで認証をして外部APIを利用したい。

外部APIというのは、具体的に言うと、ここではmixiのOpenSocial RESTful APIのこと。

ちょっと前まではどうやってやるのか分からない(対応していなかった?)のだが、思ったより簡単に出来た。

-module(mixi_friends).

-export([friends/1, test/0]).

-define(CONSUMER_KEY, "YOUR_CONSUMER_KEY").
-define(CONSUMER_SECRET, "YOUR_CONSUMER_SECRET").
-define(END_POINT_URL, "http://api.mixi-platform.com/os/0.8").

friends(ViewerId) ->
    URL = string:join([?END_POINT_URL, "/people/@me/@friends"], ""),
    ExtraParams = [
                   {"xoauth_requestor_id", ViewerId},
                   {"format", "json"},
                   {"filterBy", "hasApp"}
                  ],
    Consumer = {?CONSUMER_KEY, ?CONSUMER_SECRET, hmac_sha1},
    Token = "",
    TokenSecret = "",
    {ok, {_Code, _Headers, Body}} = oauth:get(URL, ExtraParams, Consumer, Token, TokenSecret),
    mochijson:decode(Body).

test() ->
    friends("00000000").

erlから実行する場合には最初に、crypto:start(), inets:start()をしなくてはいけないのはそういうものなのかと思うが、実際のアプリケーションでそういう初期化処理をどうするのが定石なのか分からん。

OpenSocial RESTful APIの呼び出しのキャッシュと非同期化っていうのは、OpenSocialアプリケーションを作る場合には必須かつ面倒な処理なんだけど、Erlangが候補に入るのは大きい。もちろん、何らかのMessaging Queueを使えば他の言語でもそれなりに簡単に書ける処理だけど。