JSON形式のデータは、WebAPIから取得することにする。
WebAPIは何でもいいのだが、今回はTwitter-APIを使うことにする。
次のサイトにAPIの使い方が書かれているため、参考にしてほしい。
https://dev.twitter.com/docs/api/1/get/search
- Uri.Builderで、WebAPIのリクエストURLを作成する。
- HttpURLConnectionで、WebAPIに対してリクエストを投げる。
- WebAPIから受け取ったレスポンス(JSON形式データ)を、BufferedInputStream、ByteArrayOutputStreamを使用して文字列データに変換する。
- JSONObject、JSONArrayを使用して、JSONデータをパースする。
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());
}
}
}
マニフェストファイルにインターネットを使う旨を登録する。
検索結果を取得したときのキャプチャ。

0 件のコメント:
コメントを投稿