顧客に郵送物を送ることがあると思いますが、顧客リストの郵便番号や住所がメンテナンスされていないと郵送物が不着になってしまいます。
今回はそんな事態を減らすために郵便番号と住所のチェックをロボットに代行させるプロセスをWinAutomationで作成します。
郵便番号と住所のチェックというと次の2パターン考えられます。
①郵便番号を基準に住所が正しいかどうかチェックする
②住所を基準に郵便番号が正しいかどうかチェックする
この記事では①の「郵便番号を基準に住所が正しいかどうかをチェック」します。
1つや2つくらいなら調べるのに手間はかかりませんが、多くなると大変です。
かと言ってAPIを使ってチェックする仕組みを構築するのは難しい、という方は今回の仕組みを応用すれば良いでしょう。
完成形はこちらからダウンロードできます。
「郵便番号を基準に住所が正しいかどうかをチェック」する方法
ウェブで調べたことがある方なら知っていると思いますが、郵便局のサイトで調べることができます。
https://www.post.japanpost.jp/zipcode/index.html
これを使わせてもらいます。
一般的にRPAというと画面を操作して・・と考えます。
今回だと郵便局のサイトの「郵便番号から該当地域を検索する」のところに郵便番号を入力して、「該当地域を検索」ボタンを押して・・・
という手順でも実現できると思います。
ですがより簡単な方法があるのでそちらを採用します。
郵便局のあるURLにHTTPのGETメソッドのパラメータに郵便番号を渡すと、郵便番号で検索した画面が返ってきます。
(ナンノコッチャ、という人は気にしないでOKです)
例えば、郵便番号:1000001 の検索結果画面を表示したい場合は、以下のURLを開けばよいのです。
https://www.post.japanpost.jp/cgi-zip/zipcode.php?zip=1000001
後はこの画面から郵便番号に対応する住所を取得すればチェックできますね。
郵便番号に対応する住所を取得
まずは郵便番号を入力してその郵便番号に対応する住所を取得する処理を作ります。
いきなり完成していますが、これで変数%CorrectAddress%に郵便番号に対応する住所が入ります。
細かい説明は省きますが、キーポイントは2つです。
- 入力した郵便番号をURLに組み込んで表示
- 「Extract Data from Web Page」アクションの使い方
※上の画像だとなぜかURL内に空白がありますが実際は必要ないので悪しからず。
2. 「Extract Data from Web Page」アクションについて少し詳しく見ていきます。
例として郵便番号:1000001で検索した画面は↓のようになります。
そして検索した結果である住所、より正確に言うと都道府県、市区町村、町域を取得したいわけです。
そこで「Extract Data from Web Page」アクションを使って取得します。
※「Extract Data from Web Page」アクションの使い方は「WinAutomationでの作り方 – 【初級編】Google検索」で動画付きで詳しく説明しています。
顧客リスト(CSVファイル)の郵便番号と住所をチェック
それでは本番です。
顧客管理をしているシステムから顧客リストをCSVファイルでダウンロードしたと想定します。
顧客リスト内の郵便番号と住所が正しいかどうかをチェックします。
今回使用するCSVファイルはこちらからダウンロードできますが、CSVのヘッダー名を変更すればあなたの持つ顧客リストでも使えますよ!
顧客リスト
ぱっと見わからないと思いますが、2行目と3行目、4行目が実は間違っています。(郵便番号と住所がマッチしません)
※この顧客リストは架空のデータです。
プロセス作成
ではプロセスを考えています。
郵便番号に対する正しい住所を取得する方法は前半で作成しました。
ですので後は顧客リスト(CSVファイル)を読み込んで1行ずつ郵便番号と住所の比較チェックを実施すれば良いですね。
顧客リスト(CSVファイル)を読み込んで1行ずつ郵便番号を取得するところまで作成しました。
CSVファイルを扱うときはDataTable型変数を使うことになります。
DataTable型変数とは表形式の縦軸と横軸のあるデータ形式を保持する変数のことです。
上記の例だとCSVファイルの内容を7行目の「Read from CSV File」アクションで%CsvTable%というDataTable型の変数に入れていますね。
余談ですが、この%CsvTable%変数から例えば3行目の氏名(2列目)の値を取る場合は、%CsvTable[2][1]%とすれば取得できます。
(DataTable型の変数は0番目から数えるため、3行目は[2]と表現します)
%CsvTable%変数はDataTable型変数なのですが、やりたいことはCSVファイルの内容を1行ずつ読み込むことです。
これは「For Each」アクションを使って実現できます。
8行目の「For Each」アクションがそうですね。
こうすることでOutputである%CsvLine%変数に%CsvTable%変数の1行ずつを設定するできます。
%CsvLine%にはCSVファイルの1行の内容が入っています。
そこで左から6番目の郵便番号を取得したいので%CsvLine[5]%とすればOKです。(やはり0番目から数えるので・・)
あとは取得した郵便番号を用いて前半で作成したロジックで正しい住所を取得し、CSVファイルの住所と比較チェックすればOKですね。ということで完成形↓です。
いかがでしたでしょうか?
Webから情報を取得する「Extract Data from Web Page」アクションとDataTable型の扱いがポイントです。
他にも「こんなシナリオを作って欲しい」というご要望も受け付けていますので、ぜひご一報を!