LoginSignup
2
6

More than 5 years have passed since last update.

Processingから駅すぱあとWebAPIを使ってみる話。

Posted at

ヴァル研究所 Advent Calendar 2016、25日目の今日はProcessingから駅すぱあとWebAPIを使ってみる話をしてみようと思います。

Processingはビジュアルデザインに主眼を置いた初学者向けのプログラミング言語+開発環境なのですが、Javaのクラス(Swingとか!)を呼び出せたり、WebAPIを呼び出す機能も用意されています。

そこで今回は、Processingから駅すぱあとWebAPIを呼び出すサンプルを作成してみました。

簡単なAPIを呼び出してみる

まずは1日目の記事にあった、/dataversionを呼び出してみます。

HTTPリクエストの送出・レスポンスの取得はprocessing.data.loadJSONObject()で行えます。取得したJSONオブジェクトの要素をgetJSONObject()で辿り、値をgetString()で取得するという流れになります。

void setup() {
  size(200, 200);
}
void draw() {
  background(255);
  fill(0);

  String api_url = "http://api.ekispert.jp/v1/json/dataversion?key=<アクセスキーを入力>";

  JSONObject res = loadJSONObject(api_url);
  String api_version    = res.getJSONObject("ResultSet").getString("apiVersion");
  String engine_version = res.getJSONObject("ResultSet").getString("engineVersion");

  text("API Version   : " + api_version,    10, 50);
  text("Engine Version: " + engine_version, 10, 60);
}

実行結果は以下のようになります。

スクリーンショット 2016-12-25 22.47.55.png

経路探索結果を取得してみる

もうちょっと実用的な使い方をしてみたいので、4日目の記事のような感じで/search/course/plainによる平均待ち時間探索をProcessingから呼び出してみます。

ソースコードは以下のようになります。JavaScriptだとJSON.parse()で取得したオブジェクトから要素名で辿るだけで良かったのですが、Processingの場合は少々面倒な感じですね...。
単一の要素の場合と配列で帰ってくる要素の取得をgetJSONObject(String)getJSONArray().getJSONObject(int)でちゃんと意識しないといけないところが大変ですね。

void setup() {
  size(200, 200);
}
void draw() {
  background(255);
  fill(0);

  String api_url = "http://api.ekispert.jp/v1/json/search/course/plain?key=<アクセスキーを入力>&from=22828&to=22671";

  JSONObject res = loadJSONObject(api_url);
  JSONObject course = res.getJSONObject("ResultSet").getJSONArray("Course").getJSONObject(0);
  JSONArray  point = course.getJSONObject("Route").getJSONArray("Point");

  String from = point.getJSONObject(0).getJSONObject("Station").getString("Name");
  String to   = point.getJSONObject(1).getJSONObject("Station").getString("Name");

  String line = course.getJSONObject("Route").getJSONArray("Line").getJSONObject(0).getString("Name");
  String price = course.getJSONArray("Price").getJSONObject(0).getString("Oneway");

  int y = 30;
  text("□ " + from, 10, y); y += 15;
  text("│ " + line, 10, y); y += 15;
  text("│ " + price + "円", 10, y); y += 15;
  text("□ " + to,   10, y);
}

実行結果は以下のようになります。無事に探索結果が取得できています。

スクリーンショット 2016-12-25 23.20.22.png

まとめ

Processingで駅すぱあとWebAPIを利用するサンプルを紹介してみました。WebAPIの形で機能を提供しているので様々なツールとの連携が比較的容易です(意外とJSONのパース方法が異なる感じではありますが...)。
他にもWebAPIを利用できる環境・ツールがあれば試してみたいと思います。

おわりに

今年から始めてみたヴァル研究所 Advent Calendar 2016ですが、無事に完走することができました。
これも記事を投稿してくださったhmaruyamaさん、valitohさん、t_ryusukeさん、aosho235さん、nakano348さん、uchimanajet7さん(投稿日順です)のご協力によるものです。本当にありがとうございます。

来年もAdvent Calendarを開催できればと思いますので、どうか何卒よろしくお願いいたします。

2
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
6