Node.jsからTwitter APIを使用してみる。
今回は自分のタイムラインを取得する。
動作環境
・Windows7 Ultimate Service Pack 1
・Node.js 0.10.28
・node-twitter 0.2.9
Twitter APIを使用するためには、下記のキーを取得する必要がある。
これらのキーを取得する手順について記載する。
なお、この手順は記事を執筆した2014年7月13日現在のもの。
package net.kuttya.jsonsample;
import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import org.json.JSONArray;
import org.json.JSONObject;
import android.net.Uri;
import android.os.Bundle;
import android.os.StrictMode;
import android.app.Activity;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
public class JsonSampleActivity extends Activity {
private EditText editSearchWord;
private TextView viewSearchResult;
@Override
public void onCreate(Bundle savedInstanceState) {
// おまじない
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().permitAll().build());
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editSearchWord = (EditText)findViewById(R.id.edittext_searchWord);
viewSearchResult = (TextView)findViewById(R.id.textview_serchResult);
}
// 検索ボタン押下処理
public void onClickSearch(View view) {
// 検索ワードのチェック
String searchWord = editSearchWord.getText().toString();
if(searchWord.length() < 1) {
viewSearchResult.setText("検索する文字列を指定してください。");
return;
}
// Twitter-APIのURLを生成
Uri.Builder uriBuilder = new Uri.Builder();
uriBuilder.scheme("http");
uriBuilder.authority("search.twitter.com");
uriBuilder.path("search.json");
uriBuilder.appendQueryParameter("lang", "ja");
uriBuilder.appendQueryParameter("rpp", "20");
uriBuilder.appendQueryParameter("q", searchWord);
String uriStr = uriBuilder.toString();
try {
// コネクション生成
HttpURLConnection connection = null;
URL url = new URL(uriStr);
connection = (HttpURLConnection)url.openConnection();
connection.setRequestMethod("GET");
// リクエスト送信
connection.connect();
// レスポンスコードチェック
if(connection.getResponseCode() != 200) {
viewSearchResult.setText("検索失敗!!");
return;
}
// レスポンス文字列取得
BufferedInputStream inputStream = new BufferedInputStream(connection.getInputStream());
ByteArrayOutputStream responseArray = new ByteArrayOutputStream();
byte[] buff = new byte[1024];
int length;
while((length = inputStream.read(buff)) != -1) {
if(length > 0) {
responseArray.write(buff, 0, length);
}
}
// JSONをパース
StringBuilder viewStrBuilder = new StringBuilder();
JSONObject jsonObj = new JSONObject(new String(responseArray.toByteArray()));
JSONArray result = jsonObj.getJSONArray("results");
for(int i = 0; i < result.length(); i++) {
JSONObject tweet = result.getJSONObject(i);
viewStrBuilder.append(tweet.getString("created_at") + "\n"); // つぶやき日時
viewStrBuilder.append(tweet.getString("from_user_name") + "\n"); // 投稿者
viewStrBuilder.append(tweet.getString("text") + "\n"); // 投稿内容
viewStrBuilder.append("----------\n");
}
// 表示
viewSearchResult.setText(viewStrBuilder.toString());
} catch(Exception e) {
viewSearchResult.setText(e.getMessage());
}
}
}