Oracle APEX 21.2のREST関連の新機能を紹介する記事を書く際に、最初はe-StatのAPIではなく東京都のオープンデータAPIを使うつもりでした。
東京都のAPIではレスポンスに含まれるendCursorの値を次のリクエストのパラメータcursorに与えることによりページ送りを実現しています。これは、Oracle APEXのRESTの新機能では扱うことができません。構造的にもフラットではなく、そのままリレーショナル・データベースの表に投入するのは難しいです。
設定ではできないため、東京都スポーツ施設一覧のAPIを呼び出して得られるデータを表に保存するコードを書いてみました。以下、その作業ログです。
最初に応答を保存する3つの表を作成します。クイックSQLの以下の定義を使いました。
# semantics: default
tky_od_requests
requested_url vc200
requested_date date /default sysdate
tky_od_objects
request_id number /fk tky_od_requests
object json
tky_od_facilities
facility_name vc100
organization vc200
access_route json
address vc200
latitude number
longitude number
contact json
equipments json
types json
events json
numbers json
note vc400
capacity json
表TKY_OD_REQUESTSには呼び出したオープンデータAPIのURLと、その日付を保存します。表TKY_OD_OBJECTSには、APIを呼び出して得られたデータをJSONのまま保存します。表TKY_OD_FACILITIESにはスポーツ施設の情報を施設ごとに保存します。
最初にAPIを呼び出し取得したスポーツ施設ひとつあたり、ひとつのJSONオブジェクトとして保存します。すべての施設のデータを読み出すまで、複数回のAPI呼び出しを行います。
表TKY_OD_OBJECTSに保存されたJSONのデータをパースして、表TKY_OD_FACILITIESへ入れ替えます。
返された情報の扱いを決めきれないため、厳密なスキーマは定義せずJSONのまま属性を保存ししています。また、表TKY_OD_OBJECTSにはリクエスト毎に取得した行を特定する列REQUEST_IDがありますが、上記のコードではREQUEST_IDは使っていません。
両方のコードともに、SQLコマンドより実行しています。
アプリケーション作成ウィザードを起動し、空のアプリケーションを作成します。名前は東京都オープンデータとします。ページの追加を実施し、表TKY_OD_FACILITIESをデータ・ソースとした対話モード・レポートとファセット検索のページを作成します。
アプリケーションの作成を実行します。
アプリケーションが作成されたら、アプリケーションを実行して対話モード・レポートの表示を確認します。
CSV形式で提供されているオープンデータに含まれている、施設名称や施設分類のデータが含まれていないため、単に同じ施設の行が複数あるように見えます。
ファセット検索のページに、Oracle APEX 21.2のミニマップを表示させてみます。こちらの記事の作業と同じです。
最初にminiMap.jsを読み込ませます。
ページ・プロパティのJavaScriptに含まれるファイルURLとして、ミニマップの実装となるJavaScriptのファイルを指定します。ファイル名は以下になります。#APEX_FILES#libraries/apex/widget.miniMap.js