しろログ

に関する記事

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 :

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

タグ:, , , , ,

Google AJAX Feed API

2007/04/20

Google AJAX Feed APIが公開された。

これは便利そう。
試しに貼ってみた(左下のファミ通.com by bulknews)

FeedのURL投げるだけでエントリ情報をJSONかXMLで返してくれる。
もう自分でXML解析したり、内容DBに保存したり、一生懸命巡回したりしなくていいんだね。

なお、FeedのキャッシュはGoogle Readerのそれと同じメカニズムで取ってあるので、常に最新じゃないかもしれないとのこと。
だいたい1時間ごと(更新頻度の高いところはもっとまめ)に収集してるらしい。

自身のサーバーに負荷もかからないし、
Javascriptで完結する時点ですごい。

URL投げたら勝手にフィード探してくれたらもっと(ry

ちなみに送られてくるフィードの文字列はescapeされているようで、
これで文字化けすることなく、表示できる・・
escapeってブラウザによって挙動が違ったと思うけど、
例によってうまいこと吸収されてるんだろう。

あと、ソースの一部にこんなのが・・

if(typeof DOMParser!="undefined"){
    return(new DOMParser).parseFromString(b,"application/xml")
}else if(typeof ActiveXObject!="undefined"){
    var c=new ActiveXObject("Microsoft.XMLDOM");
    c.loadXML(b);
    return c
}else{
    var d="data:text/xml;charset=utf-8,"+encodeURIComponent(b);
    var e=new XMLHttpRequest;
    e.open("GET",d,false);
    e.send(null);
    return e.responseXML
}

XMLパースでDOMParserやMicrosoft.XMLDOMが無かった場合、
XMLHttpRequestでパースしてる。
はー、なるほどね・・

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

トラックバック URI :

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

タグ:, ,

livedoor Auth

2007/04/19

livedoorが認証APIを公開した模様。

livedoor Auth

認証APIは便利だけど、公開しているところは、ユーザー数が微妙だった。
(海外のFlickrとかYahoo Incはいいけど)
日本の630万アカウントは大きい。

でも本当はYahoo Japanのが欲しかっ(ry

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

トラックバック URI :

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

タグ:,