javaからtwitter APIを叩いて、あるユーザーのuser_timelineを取得してみる。
今更ですが、twitter APIを利用して、あるユーザーのツイートを集めてみるサンプルを作ってみました。
その時にはまったことがあるのでいくつか書ければと思います。
あるユーザーのtwitter発言を取得する流れを考えてみる
普通に考えたらREST APIを叩くことによって、発言を取得できるものだと思ってました。
安易に2〜3時間でできると思ったら、結構時間が掛かりました。
「twitter.com/statuses/user_timeline/screen_name.xml」でデータが取得できるものだと思っていた。
Googleで検索していると「twitter.com/statuses/user_timeline」みたいな感じで外部 APIを
呼び出している人がいたので、そのまま真似をして取得してみました。
(多分、古い記事だったんだと思います。)
サンプルは、こんなイメージです。
import java.net.URL; import java.net.HttpURLConnection; String apiUrl = "http://twitter.com/statuses/user_timeline/screen_name.xml" URL connectUrl = new URL(apiUrl); HttpURLConnection con = (HttpURLConnection)connectUrl.openConnection(); con.setRequestMethod("GET"); con.setDoOutput(true); con.setInstanceFollowRedirects(true); System.out.println("レスポンスヘッダ:"); System.out.println("レスポンスコード[" + con.getResponseCode() + "] " + "レスポンスメッセージ[" + con.getResponseMessage() + "]");
レスポンスが、
「レスポンスコード[200] レスポンスメッセージ[OK]」
となれば良いのですが、
「レスポンスコード[400] レスポンスメッセージ[Bad Request]」
となりなかなかうまく通信できませんでした。
いろいろページを参照していると、1時間に150回くらいアクセス
できそうなのですが、稀に一回だけしかアクセスできない。
「api.twitter.com/1/statuses/user_timeline.json?screen_name={screen_name}」でデータが取得できるものだと思っていた。
String apiUrl = "http://api.twitter.com/1/statuses/user_timeline.json?screen_name={screen_name}" URL connectUrl = new URL(apiUrl); HttpURLConnection con = (HttpURLConnection)connectUrl.openConnection(); con.setRequestMethod("GET"); con.setDoOutput(true); con.setInstanceFollowRedirects(true); System.out.println("レスポンスヘッダ:"); System.out.println("レスポンスコード[" + con.getResponseCode() + "] " + "レスポンスメッセージ[" + con.getResponseMessage() + "]");
「twitter.com」でアクセスしてたときより、きちんとデータが取得できた
と思いきややはり、下記のエラーがでてしまいました。
「レスポンスコード[400] レスポンスメッセージ[Bad Request]」
再度、あるユーザーのtwitter発言を取得する流れを考えてみる
- user_timelineのREST APIを調べる 「api.twitter.com/1/statuses/user_timeline.json?screen_name={screen_name}」
- API発行時に、OAuth認証を実施する
- user_timelineを実行後、どんなデータが戻されるか確認する(xml,jsonなど)
- 適当にクライアントプログラムでパースして表示する
すると、「レスポンスコード[200] レスポンスメッセージ[OK]」という感じで、無事、user_timelineのデータを
取得することができました。