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 件のコメント:
コメントを投稿