MasaruTanakaの日記

IT関連のこととか。

(Java)Web API の利用方法 ソースサンプル

様々な企業などから提供されているWebAPIを利用する際の実装方法を以下にメモしておきます。使用言語はJavaです。

この記事の目次

  1. WebAPI でできること
  2. WebAPIの使い方
  3. WebAPIを利用したプログラムの例

1.WebAPI でできること

APIとはApplication Programming Interface の略であり、API発行元が提供するデータを外部のプログラムから取得するために利用させるインターフェースです。例として、仮想通貨取引所の価格情報や天気情報があります。

f:id:MasaruTanaka:20181026073513j:plain

以下、 API発行所機関の例です。

BitFlyer(仮想通貨取引所):ビットコイン取引所【bitFlyer Lightning】

  ⇒  https://api.bitflyer.com/v1/getboard?product_code=BTC_JPY

  で、今現在の価格情報(取引所板情報)が取得できます。

・天気情報:Current weather and foecast (利用には登録が必要です)

openweathermap.org 

smsurf.app-rox.com

2.WebAPIの使い方

f:id:MasaruTanaka:20181025132853j:plain

 WebAPI 自体はurl形式で提供されています。ブラウザにurlを入力すれば、その応答がブラウザ上に表示されます。上記はコインチェック取引所のビットコイン価格状況を表示したものです。

 https://api.bitflyer.com/v1/getboard?product_code=BTC_JPY

 ただ、一々手作業でブラウザのurlに入力して値を取得していたのでは、普通に取引所のサイトを利用するのと変わりません。定期的な値の自動取得や記録に用いるには、自分で作成したプログラムからWebAPIを参照する必要があります。

3.WebAPIを利用したプログラムの例

以下に、JavaからWebAPIを利用するシンプルなプログラムのソースを記載します。WebAPIは上記のブラウザでも表示したコインチェック取引所のビットコイン価格です。

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class WebAPIConnectSample {

  public static void main(String[] args) {
    
    // WebAPI から取得した値を格納する文字列変数
    String tmp;
    
    try{
        while (true) {
        
          URL targetURL
            = new URL("https://api.bitflyer.com/v1/getboard?product_code=BTC_JPY");
          HttpURLConnection conn
            = (HttpURLConnection)targetURL.openConnection();
          conn.connect();
          BufferedReader Br
            = new BufferedReader(new InputStreamReader(conn.getInputStream()));
          
          while ((tmp  =  Br.readLine  ()) != null) {
            System.out.println(tmp);
          }
        
        Thread.sleep(3000);
      }
      
      
      while ((tmp  =  Br.readLine  ()) != null) {
        System.out.println(tmp);
      }

    }catch(Exception e){
      e.printStackTrace();
    }
    
  }
}
    

以下、Eclipseでの実行結果です。Thread.sleep()で指定したミリ秒毎にWebAPIから値を取得し、右側の標準出力に表示されます。

f:id:MasaruTanaka:20181025132855j:plain

 ※WebAPIによっては、ブラウザに入力するとちゃんと値が表示されるのに、Javaから取得すると Server returned HTTP response code: 403 等のエラーが戻る事があります。その場合には、

HttpURLConnection.setRequestProperty("User-Agent", "Mozilla/6.0");

を指定してください(上記ソースでは、conn.connect(); の前に conn..setRequestProperty("User-Agent", "Mozilla/6.0"); と指定します)。Webブラウザではリダイレクトを吸収する機能が自動で行われますが、Javaのソースを書いただけではそれは行われないために発生するエラーです。