(2013/6/12 追記)サービス終了により下記コードは使えなくなりました。
Anroidで特定ユーザーのTweetを簡易的に取得したい場合の方法。本APIは制約があり、同一IPからの取得は1時間あたり150回までとなっている。このため、Emobile等同一グローバルIPを共有しているユーザーの場合、簡単にエラー400(Bad Request)となってしまう。
自分用のアプリやおまけ程度の機能として。筆者はまぃまとのトップ画面でTweetをおまけ表示するのに使っている。
参考サイト:http://agloo.blog92.fc2.com/blog-entry-118.html
public void init_fetch_tweet(String tweet_user_id,int tweet_num) {
String url="http://api.twitter.com/1/statuses/user_timeline.json?screen_name="+tweet_user_id+"&count="+tweet_num;
StringBuffer sb=new StringBuffer();
try{
int responseCode = 0;
String defaultUA = "MyMato/1.0 (Linux; U; Android 2.1; en-us) AppleWebKit/522+ (KHTML, like Gecko) Safari/419.3";
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse = null;
httpClient.getParams().setParameter("http.connection.timeout", new Integer(10000));
HttpParams params1 = httpClient.getParams();
params1.setParameter(HttpProtocolParams.USER_AGENT, defaultUA);
HttpConnectionParams.setConnectionTimeout(params1, 10000); //接続のタイムアウト
HttpConnectionParams.setSoTimeout(params1, 10000); //データ取得のタイムアウト
httpResponse = httpClient.execute(httpGet);
responseCode = httpResponse.getStatusLine().getStatusCode();
if (responseCode == HttpStatus.SC_OK) {
InputStream istream = httpResponse.getEntity().getContent();
InputStreamReader reader = new InputStreamReader(istream);
BufferedReader objBuf = new BufferedReader(reader);
StringBuilder builder = new StringBuilder();
String sLine;
while((sLine = objBuf.readLine()) != null){
builder.append(sLine);
}
String r = builder.toString();
istream.close();
JSONArray array = new JSONArray(r);
for(int i=array.length()-1; i>=0; i--){ //逆順に
Object obj=array.get(i);
if( obj instanceof JSONObject ){
Object text = ((JSONObject)obj).get("text");
Object time = ((JSONObject)obj).get("created_at");
String subtime = time.toString();
String tweetitem = (tweet_user_id+":"+text.toString()+"("+subtime.substring(0,subtime.indexOf("+"))+")",this);
//tweetitemにTweet内容が入っているのでなんなり処理をする。
}
}
}else{
if (responseCode == 400)
cdata.notice_appendtext("Tweetの取得に失敗しました (code:"+responseCode+" 回線からのアクセス規制かも(´・ω・`))",this);
else
cdata.notice_appendtext("Tweetの取得に失敗しました (code:"+responseCode+")",this);
}
}
catch(Exception ex){
cdata.notice_appendtext("Tweetの取得に失敗しました ("+ex.getMessage()+")",this);
}
}
This post is also available in: 英語

