Help us understand the problem. What is going on with this article?

APIのレスポンスを詰めていく(java)

はじめに

最近、APIのテストでコピペして結果を張り付けて〇を付けるみたいなのが面倒だったのでちょろっと作りました...

今回はtxtファイルにURLを記述しておいて、ひたすら呼び出してリストに詰めてファイルへ書き出すみたいな感じでやってます。
動けばいいやって感じなので無駄なことは多いと思いますが目を瞑ってください:frowning2:

C直下にapitestフォルダを作って、その中にtxtファイル入れて実行すれば実行結果が得られるはず...

txtファイル

apiTest.txt
//兵庫県の郵便番号呼び出すやつ
https://zip-cloud.appspot.com/api/search?zipcode=6580083
https://zip-cloud.appspot.com/api/search?zipcode=6580026
https://zip-cloud.appspot.com/api/search?zipcode=6580025
https://zip-cloud.appspot.com/api/search?zipcode=6580082
https://zip-cloud.appspot.com/api/search?zipcode=6580024

ソースコード

ApiTest.java
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

public class ApiTest {
    public static void main(String[] args) throws InterruptedException {
            //API実行URLが入っているフォルダまでのパス
            final String filePath = "C:\\apitest\\";

            //apiURL 既に準備してるファイル
            List<String> apiUrl = new ArrayList<>();

            //APIの結果を格納する。
            List<String> apiResult = new ArrayList<>();


            //ローカル用のファイルパス
            File file = new File(filePath);

            try {
                if (file.isDirectory()) {
                    String[] fileList = file.list();
                    //ファイル名をstrに今後色々出来るようにとりあえずフォルダ内のファイルをすべて読み込み
                    for(String str:fileList) {
                        try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(filePath + str)))) {
                            //1行の文字列を入れたもの -> line
                            String line;
                            while ((line = reader.readLine()) != null) {
                                apiUrl.add(line);
                            }
                        }
                    }
                }
            }catch(Exception e) {
                e.printStackTrace();
            }
            for(int i=0;i < apiUrl.size();i++) {
                if(apiUrl.get(i) == null) {
                //実行URLが無いとき
                    apiResult.add("");
                }else {
                    apiResult.add(callGet(apiUrl.get(i)));
                }
            }
            //結果をテキストファイルに書き出し
            try(FileWriter fileWrite = new FileWriter("C:\\apitest\\apiResult.txt");
                    PrintWriter pw = new PrintWriter(new BufferedWriter(fileWrite));) {
                    //ファイルへ書き出し
                for(int i=0 ;i<apiResult.size();i++) {
                    pw.println(apiResult.get(i));
                }
            }catch(Exception e) {
                e.printStackTrace();
            }
        }



        public static String callGet(String strGetUrl){

            HttpURLConnection con = null;
            StringBuffer result = new StringBuffer();

            try {

                URL url = new URL(strGetUrl);

                con = (HttpURLConnection) url.openConnection();
                //Basic認証あるパターン
                //con.setRequestProperty("Authorization", "Basic " + Base64.getEncoder().encodeToString("userName:pass".getBytes()));

                con.setRequestMethod("GET");
                con.connect();

                // HTTPレスポンスコード
                final int status = con.getResponseCode();
                if (status == HttpURLConnection.HTTP_OK) {
                    // 通信に成功した
                    // テキストを取得する
                    final InputStream in = con.getInputStream();
                    String encoding = con.getContentEncoding();
                    if(null == encoding){
                        encoding = "UTF-8";
                    }
                    final InputStreamReader inReader = new InputStreamReader(in, encoding);
                    final BufferedReader bufReader = new BufferedReader(inReader);
                    String line = null;
                    // 1行ずつテキストを読み込む
                    while((line = bufReader.readLine()) != null) {
                        result.append(line);
                    }
                    bufReader.close();
                    inReader.close();
                    in.close();
                }else{
                    System.out.println(status);
                }

            }catch (Exception e1) {
                e1.printStackTrace();
            } finally {
                if (con != null) {
                    // コネクションを切断
                    con.disconnect();
                }
            }
            System.out.println("result=" + result.toString());

            return result.toString();
        }

    }

最後に

場合によってはBasic認証あるときもあるのでそのパターンも記述しておきました
401のエラーが返ってきたら大体Basic認証いるんで、そのときはBasic認証部分を書けば何とかなる気がします

以上です:relaxed:

参考

http://www.programing-style.com/android/android-api/android-httpurlconnection-get-text/

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした