Adobe AIRでTwitterクライアントを作る
ActionScriptの勉強の為にTwitterクライアントを自作しようとして挫折した数日前でしたが、昨日こんなページを発見。
【連載】今からはじめるAIRプログラミング(13) HTTPリクエスト用API - Web上のサービスをローカルアプリに取り込む
今回の記事は、URLRequestのこうした機能拡張を試すため、非常に単純なTwitterのクライアントをサンプルコードとして用意した。
ちょうどよいところに!
これを使って作ってしまうのが早い!ということで作りました。が、いざ実行してみると、ユーザー名とパスワードを入力して"ログイン"ボタンを押したところで止まってしまう。
なぜだろう?ということでちゃんとソースを読んでみることに。
// ログインボタン押下字の処理 private function login():void { // (1) 以降のURLRequestが全て認証情報付きで行われるように、デフォルト値としてセット URLRequestDefaults.setLoginCredentialsForHost("twitter.com", userName.text, password.text); // (2) 以降、TwitterにHTTPリクエストを送信する処理 var req:URLRequest = new URLRequest("http://twitter.com/statuses/update.xml"); // POSTメソッドでなければいけない req.method = "POST"; // Twitterは明示的に認証を行うためのAPIが提供されていないので、 // 長さゼロの文字列でステータスを変更してみることによって代用 var variables:URLVariables = new URLVariables(); variables.status = ""; // HTTPリクエストを実行。 var loader:URLLoader = new URLLoader(req); // (3) HTTPレスポンスイベントを捕捉 loader.addEventListener(HTTPStatusEvent.HTTP_RESPONSE_STATUS, onHTTPResponse); }
そしてmineは気がつきました。
HTTPリクエストを実行した後にloaderにレスポンスイベントのリスナを追加しても意味ないんじゃねーの?
と。
つまり、リクエストを実行する前にレスポンスイベントを補足するリスナを追加するべきではなかろうか。
ってことでコードを以下のように書き換え。
// HTTPリクエストを生成。 var loader:URLLoader = new URLLoader(); // (3) HTTPレスポンスイベントを捕捉 loader.addEventListener(HTTPStatusEvent.HTTP_RESPONSE_STATUS, onHTTPResponse); // HTTPリクエストを実行。 loader.load(req);
これで動くようになりました。ばんざいばんざい。
後はこれを投稿とかも出来るように改良していくのがいい気がするね!
ここ数日お世話になっている本。結構面白いです。ActionScriptとJavaScript(←個人的にこれにはあまり興味が無い)、Adobe AIRについて結構しっかり学ぶことが出来ます。
- 作者: 布留川英一
- 出版社/メーカー: 毎日コミュニケーションズ
- 発売日: 2007/12/22
- メディア: 単行本(ソフトカバー)
- 購入: 1人 クリック: 50回
- この商品を含むブログ (17件) を見る