erlang-oauthからTwitterに投稿するだけのプログラムがかけたよ

erlang-oauthを利用する。

動いて満足したので、リファクタリングとかしてない。

プログラム

-module(helloworld).
-export([hello/0]).

hello() ->
        ssl:start(),
        Consumer = {"<consumer key>", "consumer secret", hmac_sha1},
        RequestTokenURL = "https://api.twitter.com/oauth/request_token",
        {ok, RequestTokenResponse} = oauth:get(RequestTokenURL, [], Consumer),
        RequestTokenParams = oauth:params_decode(RequestTokenResponse),
        RequestToken = oauth:token(RequestTokenParams),
        RequestTokenSecret = oauth:token_secret(RequestTokenParams),
        {_, _, OauthToken} = RequestTokenResponse,
        AuthorizeURL = "https://api.twitter.com/oauth/authorize",
        io:format("confirm : ~s?~s~n", [AuthorizeURL, OauthToken]),
        io:format("input PIN : "),
        UserInput = io:get_line(standard_io,''),
        Pin = string:substr(UserInput, 1, length(UserInput)-1),
        AccessTokenURL = "https://api.twitter.com/oauth/access_token",
        {ok, AccessTokenResponse} = oauth:get(AccessTokenURL, [{"oauth_verifier", Pin}], Consumer, RequestToken, RequestTokenSecret),
        AccessTokenParams = oauth:params_decode(AccessTokenResponse),
        AccessToken = oauth:token(AccessTokenParams),
        AccessTokenSecret = oauth:token_secret(AccessTokenParams),
        URL = "http://api.twitter.com/1/statuses/update.json",
        {ok, Response} = oauth:post(URL, [{"status", "hello erlang-oauth world!"}], Consumer, AccessToken, AccessTokenSecret).

実行する

$ erl -pa ebin -s crypto -s inets
1> c(helloworld).
WARNINGが出るけど無視。
2> helloworld:hello().
confirm : https://api.twitter.com/oauth/authorize?oauth_token=hogehogehogehoge
↑ URLが表示されるので、アクセスして認証する。
input PIN :
↑ 上のURLで認証するとPINが表示されるので入力する
何か表示される。文字列の中に「200, "OK"」があればOK