2024年10月3日追記
RESAS APIは2025年3月24日で提供が終了します。詳しくは以下のリンクを参照してください。
https://opendata.resas-portal.go.jp/docs/api/v1/index.html
追記終了
Oracle APEX 22.1の新機能のOracle APEX Data Generatorを使ってみようとしたところ、現状ではサンプル・データは英語のみでした。例えば都道府県や市区町村名をテスト・データとして表に投入するには、元となるデータが必要です。
手作業でサンプル・データを作成するのは大変なので、RESAS APIを呼び出してサンプルのデータ・セットを準備することにしました。RESAS APIの使い方については、以前に記事「RESAS APIを呼び出してデータを取得する」として紹介しています。RESAS APIの利用者登録やAPIキーの取得方法については、こちらの記事を参照してください。
本記事では、RESAS APIを使って、都道府県一覧と市区町村一覧を取得し、それをRESTソース・カタログとして登録するまでの手順について紹介します。
Web資格証明の作成
RESAS APIの利用者登録が済み、APIキーを取得済みとします。Web資格証明はワークスペースに作成します。
アプリケーション・ビルダーのワークスペース・ユーティリティを開きます。
Web資格証明を開きます。
RESAS APIのアクセスに必要な資格証明を作成します。
名前はRESASの資格証明、静的識別子はRESAS_API_KEYとします。認証タイプはHTTPヘッダー、資格証明名(認証タイプにHTTPヘッダーを選んでいるので、これはヘッダー名です)としてX-API-KEYを指定します。資格証明シークレットとして、RESAS APIに利用者登録を行い取得したAPIキーを入力します。URLに対して有効には、https://opendata.resas-portal.go.jp/api/v1/を指定し、Web資格証明の用途をRESAS APIに限定します。
以上を入力し、作成をクリックします。
e-Statが提供しているAPIにアクセスするには、URL問合せ文字列のappIdとしてアプリケーションIDを渡す必要があります。e-StatのWeb資格証明の指定は以下のようになります。
Web資格証明としてRESASの資格証明が作成されました。
APEXアプリケーションの作成
RESAS APIにアクセスしてデータを取得するために、RESTデータ・ソースを作成します。RESTデータ・ソースはAPEXアプリケーションの共有コンポーネントなので、RESTデータ・ソースを作成するには、最初にAPEXアプリケーションを作成する必要があります。
とりあえず空のアプリケーションを作成します。
アプリケーション作成ウィザードを起動します。
名前をRESASとし、アプリケーションの作成をクリックします。
アプリケーションが作成されました。
今回はアプリケーションの作成が目的ではありません。作業のほとんどは共有コンポーネントにて実施します。
都道府県一覧の取得
都道府県一覧の情報を取得します。RESAS-API一覧より共通の都道府県一覧を参照します。ここで、sampleに記載のあるURLに注目します。
共有コンポーネントのRESTデータ・ソースを開きます。
登録済みのRESTデータ・ソースが一覧されます。作成をクリックします。
RESTデータ・ソースの作成として最初からを選択します。
次へ進みます。
RESTデータ・ソース・タイプとして簡易HTTPを選択します。名前はRESAS都道府県一覧とします。URLエンドポイントには、RESAS APIの都道府県一覧のページにsampleとして記載されていたURLを貼り付けます。
次へ進みます。
リモート・サーバー、ベースURLおよびサービスURLパスは自動的に導出されます。変更は不要なので、そのまま次へ進みます。
ページ区切りタイプとしてページ区切りなしを選択します。
次へ進みます。
認証が必要ですをONにします。資格証明として、作成済みのRESASの資格証明を選択します。
検出をクリックします。
APIの呼び出しが行われ、取得されたデータが一覧されます。データ・プロファイルをクリックして、認識された列を確認します。
データ・プロファイルを確認します。今回の結果では、列PREFCODEが主キーとして認識されていない点は修正が必要です。
RESTデータ・ソースの作成をクリックします。
RESTデータ・ソースRESAS都道府県一覧が作成されました。修正が必要なので、このRESTデータ・ソースを開きます。
最初に詳細の静的IDを修正します。静的IDは名前より導出されますが、日本語は使用できないためその部分が_(アンダースコア)になります。このままでは一意にならないため、RESAS_prefecturesに変更し、変更の適用をクリックします。
変更を適用するとRESTデータ・ソースの一覧画面に戻ります。再度、RESTデータ・ソースを開き、今度はデータ・プロファイルの編集をクリックします。
列PREFCODEの主キーをNoからYesに変更し、変更の適用をクリックします。
変更の適用をクリックします。RESTデータ・ソースの一覧画面に戻るので、再度、編集画面を開きます。画面右の同期化の管理に進みます。
表RESAS_PREFECTURESがデータ・プロファイルの設定に従って作成されます。同期化を実行することによりRESAS APIを呼び出して取得したデータが、表RESAS_PREFECTURESに書き込まれます。
RESAS APIを呼び出して取得したデータを、表RESAS_PREFECTURESに保存する準備ができました。保存して実行をクリックします。
保存をクリックします。
表の作成をクリックし、表RESAS_PREFECTURESを作成します。
一度取得したデータを更新する予定は無いので、詳細の同期タイプは追加、マージ、置換のどれを選んでも違いはありません。今回は追加を選択しています。
ジョブのステータスが実行中となります。ジョブが終了すると、ジョブのステータスの表示が消えます。
データ・タブを開き、保存されているデータを確認します。
以上でRESAS APIの都道府県一覧を呼び出し、表RESAS_PREFECTURESに同期することができました。
市区町村一覧の取得
市区町村一覧の情報を取得します。RESAS-API一覧より共通の市区町村一覧を参照します。
RESTデータ・ソースの作成方法は、都道府県一覧と同じです。ただし、市区町村一覧はパラメータとして都道府県コードを必要としている点が異なります。
RESAS APIの説明ではprefCodeのRequiredがtrueとなっており、必須パラメータのように見受けられます。ただし、このパラメータを指定していなくてもAPI呼び出しは成功するようです。
市区町村一覧を取得するRESAS APIを呼び出すRESTデータ・ソースを作成します。作成の流れは、すでに都道府県一覧で説明済みなので、市区町村一覧に特化した部分を取り上げます。
RESTデータ・ソースの名前はRESAS市区町村一覧とします。URLエンドポイントとして、sampleにあるURLをそのまま貼り付けます。
以降の操作は、都道府県一覧を同じです。
RESTデータ・ソースの作成をクリックします。
RESTデータ・ソースRESAS市区町村一覧を開きます。
詳細の静的IDをRESAS_citiesに変更します。また、データ・プロファイルの編集を開き、CITYCODEの主キーをYesに変更します。
データ・プロファイルの列CITYCODEの主キーをYesにします。
パラメータですが、prefCodeの必須がいいえになっています。RESAS APIのWebページではRequiredはtrueですから、本来は必須ははいであるべきです。
パラメータのprefCodeの鉛筆アイコンをクリックします。
パラメータが無くてもAPI呼び出しは成功するようですが、ドキュメントの記述に従い詳細の必須をONに変更します。変更の適用をクリックします。
以上でRESAS APIの市区町村一覧を呼び出すRESTデータ・ソースの作成は完了です。
同期化の管理を呼び出します。
新規に作成する同期化表の表名はRESAS_CITIESとします。
これ以降は都道府県一覧と同じ操作を行い、表RESAS_CITIESにデータを同期させます。
同期化が完了しSQLワークショップより表RESAS_CITIESのデータを確認すると、列PREFCODEが1のデータのみが同期していることが確認できます。
RESTデータ・ソースRESAS市区町村一覧のprefCodeのデフォルト値が1であり、その呼び出しのみが行われているため、このような結果になります。市区町村一覧をすべて同期するには、47都道府県のコードをprefCodeとして与え、47回同期化を実行する必要があります。
prefCodeに都道府県コードを指定し47回同期化を繰り返すために、自動化を使用します。
共有コンポーネントの自動化を開きます。
作成済みの自動化が一覧されます。作成をクリックします。
名前をRESAS市区町村一覧とします。一度だけ実行すればよい処理なので、タイプとしてオンデマンドを選択します。アクションの開始として問合せを選択します。
次へ進みます。
データ・ソースとしてローカル・データベース、ソース・タイプとしてSQL問合せを選択します。SQL SELECT文を入力として、以下を記述します。
select prefcode from resas_prefectures
アクションの実行時間として行が返されるを選択します。実行時間となっていますが、行が返されたときに実行される、という意味で時間とは関係ありません。ここで返される行は47行になり、47回アクションが実行されます。
作成をクリックします。
自動化RESAS市区町村一覧が作成されます。
名前の静的IDに日本語は含められないため、静的IDをRESAS-citiesに変更し変更の保存を行います。
続いて、アクションの鉛筆アイコンをクリックして編集します。
アクションでは、パッケージAPEX_REST_SOURCE_SYNCのDYNAMIC_SYNCHRONIZE_DATAを呼び出します。
アクションの名前を同期に変更します。タイプはコードを実行、コードの位置はローカル・データベース、言語はPL/SQL、コードとして以下を記述します。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
DECLARE | |
l_parameters apex_exec.t_parameters; | |
BEGIN | |
apex_exec.add_parameter( | |
p_parameters => l_parameters, | |
p_name => 'prefCode', | |
p_value => :PREFCODE ); | |
/* | |
* オンデマンドでの実行のみなので、セッションの作成は不要。 | |
apex_session.create_session( | |
p_app_id => 100, | |
p_app_page_id => 1, | |
p_username => '...' ); | |
*/ | |
apex_rest_source_sync.dynamic_synchronize_data( | |
p_module_static_id => 'RESAS_cities', | |
p_sync_static_id => 'RESAS-cities', | |
p_sync_parameters => l_parameters ); | |
END; |
コード中でバインド変数としてPREFCODEを使用しています。このバインド変数には、自動化のソースのSELECT文で取得されているPREFCODEが割り当てられます。
変更の適用をクリックします。
以上で自動化の作成は完了です。
保存して実行をクリックします。
自動化の実行ログを確認します。ステータスが成功で、成功した行は47になります。
同期化の結果を確認します。SQLワークショップのSQLコマンドより、以下のSELECT文を実行してみます。
select * from resas_cities where bigcityflag = 1 order by prefcode
PREFCODEが1、つまり北海道のbigCityFlagが1の市区町村については、APEX$SYNC_STEP_STATIC_IDが空白になっています。これはRESTデータ・ソースを作成したときに同期化が実行されているためです。自動化による同期化では、すでに同じデータがあるためスキップされています。
RESTソース・カタログの作成
RESTデータ・ソースはアプリケーションに作成します。公開されているREST APIへのアクセスであれば、他のアプリケーションからも使用できると便利です。
作成したRESTデータ・ソースをアプリケーションで共有するため、Oracle APEX 21.2より、RESTソース・カタログが導入されています。RESTソース・カタログを作成し、今まで作成したRESASのRESTデータ・ソースをRESTソース・カタログに保存します。
ワークスペース・ユーティリティのRESTソース・カタログを開きます。
RESTソース・カタログが未構成の場合、最初にカタログ・グループの作成を要求されます。
グループの作成をクリックします。
カタログ・グループの名前をOpen Data Japanとします。作成をクリックします。
グループとしてOpen Data Japanを選択します。名前はRESAS、内部名もRESASとします。エンドポイントURLのリフレッシュは、まだ作成したRESTデータ・ソースをエクスポートしていないため、指定はしません。
作成をクリックします。
RESTソース・カタログRESASが作成されます。まだ、コンテンツは0サービスです。
作成済みのRESTデータ・ソースを開き、カタログに保存をクリックします。
カタログに保存をクリックします。
作成済みのRESTデータ・ソースがRESTソース・カタログに保存されます。アプリケーション側で加えた変更をRESTソース・カタログに保存する、または、更新されたRESTソース・カタログにてリフレッシュできるようになります。
作成済みのRESTデータ・ソースをすべてRESTソース・カタログに保存しておきます。
以上になります。
RESTソース・カタログのエクスポートとインポート
作成したRESTソース・カタログのエクスポートとインポートが可能です。
ワークスペース・ユーティリティのRESTソース・カタログを開きます。画面右のカタログのエクスポートを実行します。
RESTソース・カタログとしてRESASを選択し、エクスポートを実行します。RESTソース・カタログがSQLファイルRESAS.sqlとしてダウンロードされます。
エクスポートされたファイルを、共有できる場所に配置します。今回はGitHubに配置しました。
https://raw.githubusercontent.com/ujnak/apexapps/master/exports/RESAS.sql
ワークスペース・ユーティティのRESTソース・カタログを開きます。RESASのエンドポイントURLとして、上記のURLを設定します。
エンドポイントURLのリフレッシュとしてURLを設定し、変更の適用をクリックします。
ワークスペースに新規にRESTソース・カタログを導入するには、カタログのインポートを実行します。
インポート作業では、ファイル・タイプとしてRESTソース・カタログが選択されます。インポート・ファイルとして、エクスポートされたRESTソース・カタログのSQLファイルを選択します。
RESTデータ・ソースはRESTソース・カタログによって共有できますが、それを呼び出している自動化は含まれません。
自動化はAPEXアプリケーションに作成されています。APEXアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/resas-sample-app.zip
Oracle APEXのアプリケーション作成の参考になれば幸いです。
追記
共通の特許.技術分野のデータにtecCodeとtecNameが空白のデータが含まれます。これはsampleにも含まれています。
このデータのため、データ・プロファイルでtecCodeを主キーにすると、同期化ができません。主キーを設定せず、データを同期化表RESAS_PATENTS_BROADに取り込んだ後にtecCodeがnullの行を削除する必要がありました。
完