Program Resource

開発者向け各種コード、アルゴリズム、リソース情報ライブラリ もしくはねふぁの覚え書き

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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*