AndroidでTwitterのタイムラインを取得する【XmlPullParser】

By daichi1128
このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

こんにちは。daichi1128です。

以前、ListViewのカスタマイズとしてTwitter風のListViewを作成しました。
ListViewをカスタマイズする | Techfirm Android Lab

せっかくなので、今回は続きとしてネットワーク通信をしてTwitterのタイムラインを取得する部分を作ってみます。

今回必要な作業は

  • Twitter APIの理解
  • AndroidでHTTP通信
  • XMLデータのパース

です。

Twitter APIの理解

Twitterのタイムラインを取得するにはTwitter APIを利用します。
Twitter API Wiki / Twitter API Documentation

今回はアカウントの認証が不要なpublicなタイムラインを取得することにします。
Twitter API Wiki / Twitter REST API Method: statuses public_timeline

リンク先のドキュメントによると、http://twitter.com/statuses/public_timeline.xmlへGETメソッドでアクセスすればXML形式のレスポンスが受け取れるとあります。

レスポンスデータは以下の形式です。

この中から、名前とつぶやきを表示したいので、textとscreen_nameを取得します。
今回はアイコン画像(profile_image_url)や日付(created_at)は遠慮しておきます。

AndroidでHTTP通信

HTTP通信部分はユーティリティクラスとして作成してみます。
URL文字列を渡すと、byte配列をかえすメソッドです。

Android特有の処理はまったくありません。
Pure Javaの処理だけです。

androidのHTTP通信のユーティリティを作った。 – hidecheckの日記
ソースは猛烈に参考にさせていただきました。

あとはAndroidManifest.xmlに以下の1行を追加。

これでHTTP通信が可能になります。

XMLデータのパース

パーサはSAXパーサやDOMパーサよりも高速なXmlPullParserを使います。

XmlPullParser parser = Xml.newPullParser();
でXmlPullParserインスタンスを生成します。

byte[] data = HttpClient.getByteArrayFromURL(urlStr);
でレスポンスデータをbyte配列で取得。

parser.setInput(new StringReader(new String(data, “UTF-8″)));
でパーサにパースする文字列を渡しています。

parser.getEventType();
ではドキュメントの開始やタグの開始、終了といったイベントを取得できます。

上の処理では、ドキュメントの開始、すなわち、最初の読み込みのタイミングでTwitterStatusを保持するリストを生成。
タグの開始のタイミングで、TwitterStatusのインスタンスを生成しています。
タグが来たら、1つ分のつぶやきデータは終了なので、listにaddします。

また、タグの中にいる状態で、タグの開始が現れたら、それをTwitterStatusのtextへセット。
が現れたら、TwitterStatusのscreen_nameへセットしています。

上であげたTwitter APIのレスポンスと見比べてみてください。

あとは前回のソースでcreateDummyData()を読んでいた部分をgetTwitterTimeline()などとして、その中でパーサを生成、パースの実行を行えばHTTP通信でtwitterタイムラインの取得は完成です。

※画像は今後非同期通信で取得するため、まだ決めうちのままです。キャッシュも行いたいです。


timeline

関連する投稿