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のソースを書いただけではそれは行われないために発生するエラーです。

TomcatのWebアプリケーションマネージャ画面の表示方法(Eclipse)

EclipseTomcatのサーバーを立てた際、Tomcat Webアプリケーションマネージャを表示する方法の備忘録メモ。

 

[Tomcat Webアプリケーションマネージャ 概観]

こんな画面のあれです。Webアプリケーションの管理が行えます。

f:id:MasaruTanaka:20180721222602j:plain

 

[使用環境]

Eclipse Java EE IDE for Web Developers Version: Oxygen.3a Release (4.7.3a)

Apache Tomcat/8.0.36

 

[作業前提]

Eclipse上でTomcatサーバーの定義作成が完了していること。

 

[作業手順]

大まかに以下①~③の手順です。

①アクセス用ユーザーの設定

サーバー定義中の tomcat-users.xmlに 以下の行を追加します(青字部分)。

<role rolename="manager-gui"/>

<user username="admin" password="pass" roles="manager-gui"/>

Tomcat Webアプリケーションマネージャ コンテキスト定義の追加

server.xml に 以下の行を追加します(青字部分)(この作業がなぜか色々なブログで省略されていますが、こいつを定義しないとマネージャにアクセスできません)。

<Context docBase="${catalina.home}/webapps/manager" path="/manager" privileged="true" reloadable="true"/>

 

③サーバーの再起動

xmlファイルに変更を加えた仮想サーバーを再起動してください。

 

Tomcat Webアプリケーションマネージャのurlへアクセス

ブラウザで localhost:8080/manager へアクセスしてください。

すると、ログインダイアログが表示されるので、

②で入力した usernamepassword の値を入力してください(ここでの例では admin/pass となります)。

Tomcat Webアプリケーションマネージャ が表示されます。以上。

f:id:MasaruTanaka:20180721222602j:plain

 

[補足説明]

 

③サーバーの再起動、rulアクセスについて、

よくいろんなブログとかで「 localhost:8080/manager/html にアクセス」と言っていますが、そのurlはデフォルト設定であれはそうなるわけで、同一pc(eclipse上のほかのwebプロジェクトなど)にて他のポートが使用されている場合は、ポートは8080とは限りません。

尚、urlも上記のとおり manager/html とか書かれている場合が多いですが、それも正確には決まっておらず、②で設定した値 

<Context docBase="${catalina.home}/webapps/manager"・・・ 

タグに由来しています。