(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: 英語