しろログ

に関する記事

JavascriptでtwitterのxAuth

2011/02/06

久しぶりの技術ネタですよ。
web以外の、例えばデスクトップ・モバイルアプリケーションでtwitterクライアントを作る場合、OAuthより、xAuthが便利。
xAuthを使うには、twitterの中の人にメールで許可申請が必要なんですけど、その辺のノウハウ書いてる人はたくさんいるのでググってみませう。

で、はまってたのがJavascriptでxAuthを使ってアクセストークンをもらうまでの処理。
そうですね。普通はJavascriptとか使わないですね。コンシューマキーとか隠すのとか面倒そうですし。
大体想像つくかもしれませんけど、Titaniumを使ってるんです。はい。

能書きはこのくらいで、とりあえず結論だけ書くよ。
あ、oauth.jsとsha1.jsはロードしておくように。

(function() {

    var accessor = {
        consumerSecret: "[your secret]",
        tokenSecret: ""
    };

    var message = {
        method: "POST",
        action: "https://api.twitter.com/oauth/access_token",
        parameters: {
            oauth_consumer_key : "[your key]",
            oauth_signature_method: "HMAC-SHA1",
            oauth_version : "1.0",
            x_auth_username : "[username]",
            x_auth_password : "[password]",
            x_auth_mode : "client_auth"
        }
    };

    OAuth.setTimestampAndNonce(message);
    OAuth.SignatureMethod.sign(message, accessor);

    var xhr = new XMLHttpRequest();

    xhr.open('POST', "https://api.twitter.com/oauth/access_token", true);

    xhr.setRequestHeader('Authorization',
                         'OAuth oauth_nonce="' + message.parameters.oauth_nonce + '"'
                         + ', oauth_signature_method="HMAC-SHA1"'
                         + ', oauth_timestamp="' + message.parameters.oauth_timestamp + '"'
                         + ', oauth_consumer_key="' + message.parameters.oauth_consumer_key + '"'
                         + ', oauth_signature="' + escape(message.parameters.oauth_signature) + '"'
                         + ', oauth_version="1.0"');

    xhr.onreadystatechange = function() {
        if (xhr.readyState == 4 && xhr.status == 200) {
            var responseParams = OAuth.getParameterMap(xhr.responseText);
            accessToken = responseParams['oauth_token'];
            accessTokenSecret = responseParams['oauth_token_secret'];
            alert(accessToken);
            alert(accessTokenSecret);
        }
    };

    xhr.send('x_auth_username=[username]&x_auth_password=[password]&x_auth_mode=client_auth');

})();

確認用なので、クラス化とか作法無視です。
要点は
・https://api.twitter.com/oauth/access_token へ POST。クエリ文字はいらんよ。
・POSTの中身(sendの引数)はこれだけでOK
・Authorizationヘッダ付けてね
の三点。
たったこれだけのこと、どれもtwitterの公式ドキュメントに書いてるんですけど、なんか無駄に試行錯誤してたので、メモ。

# っていうか、ヘッダの付け忘れが全ての元凶だっただけなんですが。
# あと、Firefoxでテストしててクロスドメインを忘れてたとか(twitterはOPTIONSに対応してないよ)

ご意見・感想・ご質問 (0)

トラックバック URI :

カテゴリ:コンピューター

タグ:, , , , ,

あけましておめでとうございます

2010/01/24

って、「最新の記事」欄に去年の「あけましておめでとうございます」があるのはどうかと思うが。
とりあえず、よろしくお願いします。

最近はがっつりブログ記事書くことが無くなりましたね……
twitter始めてからは、他のサイトの日記も結構おろそか。

twitterとか、初めは何が面白いのか分からなかったけど、
とりあえず使ってるうちに面白くなってきた。

何が面白いって、一言で言えば、自分の好きなように生きた情報を整理できること。
twitter自体は140字のつぶやきを保存するシンプルなサービスだけど、
シンプルなだけに応用も利きやすい。

自分の興味があるテーマ(自分の場合将棋)でくくってフォローしたりすると、
かなり濃い情報がリアルタイムで収集できる。

あと、フォローし合ってると見知らぬ人同士でも声かけやすい。
大きなチャットに居る感覚。
でもチャットと違って気を使わなくていい。

自分なりの使い方を見つけられれば結構面白いサービスっぽい。

ということにようやく気が付いたここ何ヶ月か。

ご意見・感想・ご質問 (0)

トラックバック URI :

カテゴリ:つれづれ

タグ:,