目次
第1章 zipcloud郵便番号データダウンロード
1.1 zipcoudの郵便番号データ(加工済バージョン)
1.2 REST Client : zipcloudのホームページのHTMLの取得
1.2.1 リソースの設定
1.3 ダウンロードURLの取得
1.3 ダウンロードファイル名の取得
1.4 更新日付の取得
1.5 REST Client : 郵便番号データ(加工済バージョン)zipファイルのダウンロード
1.6 zipファイルの解凍
1.7 flgファイル作成
1.8 ファイルコピー(csvファイルとflgファイル)
1.9 トリガーについて
サンプルプロジェクトはここからダウンロード
PDF資料ダウンロードはこちら
第1章 zipcloud郵便番号データダウンロード
1.1 zipcloudの郵便番号データ(加工済バージョン)
・加工済みバージョンのデータは、日本郵便のデータを元に独自の加工(「以下に掲載がない場合」を取り除いたり、不空数行にまたがって住所がセットされているのを1行にまとめるなど)を行っており、すぐに展開して利用することができる。(ちなみに、2023年6月より、日本郵便でも1データ1行、UTF-8エンコーディングの形式のCSVデータのダウンロードが開始された)
・このサンプルプロジェクトでは、zipcloudの加工済バージョンの郵便番号データ(x-ken-all.csv)の最新版をダウンロードし、データベースの郵便番号用のマスタテーブルに取り込む処理のシナリオを、実装したものである。
1.2 zipcloudのホームページのHTMLの取得
・zipcloudのホームページのHTMLを取得する。
・このHTMLには、郵便番号データ(加工済バージョン)のダウンロードURL、ダウンロードファイル名、更新日などの情報があり、それらの情報を取得していく
・次ページにて、まずリソースの設定について解説する
1.2.1 リソースの設定
・REST Clientのzipcloud用のリソース:REST Client_zipcloud
・「REST Client_zipcloud」リソースの主なパラメータ
1.2.1 リソースの設定 - パス①
・REST Client_zipcloudのパス:「/」
・REST Client_zipcloudのパス②:「/zipcodedata/download」
パス② の補足説明
・REST Client_zipcloudのパス②:「/zipcodedata/download」の補足説明
HTMLソース表示画面:加工済バージョンの箇所のHTMLソースのスクリーンショット
1.2 zipcloudのホームページのHTMLを取得する
・フロー「加工済郵便番号データzipのダウンロード」の第一ステップであるREST Clientアダプタ①の解説
「REST Client_zipcloud」リソースのパス①を使用する。
設定画面のパラメータ詳細:
①:REST Client_zipcloudリソースに登録したパスをコンボボックスから選択する ここでは「/」を選択
②:「Get」メソッドを選択
リクエストContentは空白のまま
③:レスポンスContentは「text/html」を横の[…]のボタンをクリックして表示される画面から選択
④:HTMLのエンコーディング(charsetの箇所)と一致するエンコーディングを選択
⑤:取得したHTMLを保存する変数を選択
・REST Clientアダプタ①の設定画面(続き)
1.3 ダウンロードURLの取得
・zipcloudのホームページのHTMLから、最新の加工済みバージョンの郵便番号データをダウンロードするための、ダウンロードURLを取得する
・「1.2.1 リソースの設定 - パス②の補足説明」にて、郵便番号データ(加工済バージョン)のダウンロードURLは、「zipcodedata/download?di=」の文字列の3番目のもの
(2023年6月末のは「zipcodedata/download?di=1688112638794」である)
・つまり、3番目の「zipcodedata/download?di=」を含む文字列(37文字)を取得すれば良い
・Magic xpiにはHTMLパーサは備わっていない
・そのため、HTMLを1行ずつ読み込み、行に指定する文字列を含むかどうかを調べて、目的の文字列を取得し、必要な文字を抽出する方法で対処している
・使用するアダプタはデータマッパーで、送り元にはFlatFileを配置している
・FlatFileはhtmlの1行の長さを扱えるよう文字数を指定する。(1行の最大文字数)
・データマッパーの送り先にはVariables(変数)を配置
・この後の章で説明する、「F.ダウンロードファイル名」「F.更新日」の合計3つの情報を保存する変数をデータマッパーの送り先に配置している。
・ここでは、「F.ダウンロードURL」について解説する
「F.ダウンロードURL」のプロパティの計算値欄:
MID (Src.S1/Record/Row , InStr (Src.S1/Record/Row , 'zipcodedata/download?di' ) , 37 )
MID関数で文字列を指定した位置から指定した文字数分抽出している。
InStr関数で「zipcodedata/download?di」を含む文字の開始位置を取得し(InStr関数)、そこから37文字の文字列を抽出
「Variables3」の下の「Instance」フォルダのプロパティ:
マルチアップデートに「F.カウンタ」を設定。式は「F.カウンタ + 1」
条件は、「InStr (Src.S1/Record/Row , ‘zipcodedata/download?di=‘ ) > 0」
(Src.S1/Record/Rowに文字列zipcodedata/download?di=を含む場合)F.カウンタをカウントアップする(zipcloudのホームページのhtmlにはこの文字列が3か所ある)
「Variables3」の下の「Instance」フォルダのプロパティ:
条件欄に設定している計算式は下記の通り
F.カウント = 3 AND InStr (Src.S1/Record/Row , 'zipcodedata/download?di=' ) > 0
Src.S1/Record/Rowに文字列zipcodedata/download?di=を含む場合でかつF.カウントが3の場合(3か所目である)に条件が成立し、「Variable3」の「Instance」の下の「F.ダウンロードURL」が実行される(計算値欄の計算結果がF.ダウンロードURLにセットされる)
1.3ダウンロードファイル名の取得
・ダウンロードするファイル名は、「x-ken-all<年月数値文字>.zip」である。
・データマッパーの送り先「Variables2」
・データマッパーの送り先「Variables2」-「Instance」のプロパティの条件欄
条件式は下記の通り
InStr (Src.S1/Record/Row , ‘x-ken-all’ ) > 0
(Src.S1/Record/Row に「x-ken-all」が含まれる場合に条件が成立する
⇒ 「F.ダウンロードファイル名」が実行される)
「F.ダウンロードファイル名」のプロパティの計算値欄:
計算式は下記の通り
MID (Src.S1/Record/Row , InStr (Src.S1/Record/Row , 'x-ken-all') , 19 )
Src.S1/Record/Row の「x-ken-all」を含む開始位置から19文字抽出する
1.4 更新日付の取得
・HTMLのソースの中から「全国一括データ (20」という文字列のある行を探して取得し、そこから「日付部分(年月日)」を抽出する
zipcloudのホームページのHTMLにおいて、「全国一括データ (20」を含む行は下記の行だけである
<div class="dlTitle">全国一括データ (2023年6月30日更新分)</div>
20xx年xx月xx日の部分を抽出するには?
StrToken関数を活用するStrToken ( Src.S1/Record/Row , 2 , ‘(‘ ) ⇒ F.更新日抽出1
・データマッパーの送り先「Variables4」の「Instance」のプロパティのマルチアップデート
その他、更新日の月日部分や月部分の数値文字列、日部分の数値文字列の抽出などを行っている。
「Variables4」には、「F.解凍先フォルダ名」「F.更新日_月日数値文字列」「F.更新日_年月日数値文字列」を選択していて、これらの変数のプロパティの計算値に計算式を設定している
1.5 REST Client : 郵便番号データ(加工済バージョン)zipファイルのダウンロード
REST Client zipcloud用リソースのパス②を利用する
REST Client ステップの設定画面(続き)
パラメータ画面
1.6 zipファイルの解凍
1.5 でダウンロードに成功したzipファイルを解凍する
ファイルアーカイブアダプタを利用する
ファイルアーカイブアダプタステップのダイレクトアクセスメソッドの画面
1.7 遅延(一時待機)
zipファイルの解凍に時間を要した場合を想定して、一時待機するために、遅延アダプタを配置している
1.7 flgファイルの作成
zipファイルの解凍が完了した後、CSVデータ取り込み処理のフローを実行したい
CSVデータ取り込み処理のフローは2パターン用意しており、Directory Scannerトリガーを配置しているので、監視フォルダに監視対象ファイル(フィルタ条件に合致するファイル)を検出すれば、フローが開始されるようになっている。
フローの監視フォルダは異なるが、フィルタ条件の設定値は2パターンのフロー共に同じx-ken-all*.flgである
この拡張子flgファイルを作成する
ファイルの中身はテキストで、郵便番号データの更新日付を保存する
作成したflgファイルは、先にCSVデータファイルを移動してから、移動する
これはファイルの移動の順序に意図があるため(詳細は次章のトリガーの説明を参考
ファイル管理アダプタのCreate Fileメソッドを使用する
1.8 ファイルコピー(csvファイルとflgファイル)
・フロー「CSVデータ取り込み(パターン1・パターン2)」のDirectory Scannerトリガーによる監視フォルダに、フィルタ条件に合致するファイルをコピーすることで、データ取り込み処理の開始させることを目的とする
・zipファイルを解凍して展開されたx-ken-all.csvファイルと、作成したflgファイルを子の順序で、CSVデータ取り込み処理を行うフローの監視フォルダにコピーする
・CSVデータ取り込み処理のフローは2パターン用意しており、それぞれ監視フォルダのパスが異なるので、移動先のパスを指定することにより、どちらのパターンのフローでCSVデータ取り込み処理を行うのか、切り替えることが出来るようにしている
・監視フォルダパスについての詳細は、次章の説明( 2.1.2 / 2.2.2 )をご覧ください
1.9 トリガーについて
・フロー「加工済郵便番号データzipのダウンロード」のトリガーには、スケジュールユーティリティトリガーとDirectory Scannerトリガーの2つのトリガーを配置した
・基本のトリガーはスケジュールユーティリティトリガーで、毎月1日の3時にダウンロードする
スケジュールユーティリティトリガーがうまく機能しなかったり、ダウンロードに失敗したた場合の対策として、手動でフローを開始する仕組みを設けるため、Directory Scannerトリガーを配置した
⇒ Directory Scannerトリガーの監視フォルダに検知対象のファイルを配置することで、フローを開始させることができる
コメント
0件のコメント
サインインしてコメントを残してください。