年末年始の当社のアクセスで「(FileMakerで)郵便番号(検索)」が比較的多いようでしたのでFileMakerを使った郵便番号 → 住所変換の方法をご紹介します。Yahooのサービスが続く限り、12万件を超える郵便番号データをFileMakerでインポートしたり定期的に更新される郵便番号データを更新する必要は全くありません。
なお、この方法ではYahooAPIを使うため、FileMakerがインターネットに接続されたPC上で動作することが前提となります。
【予備知識】
1. Yahoo!APIを使うには …
以下よりYahoo!デベロッパーネットワークに参加してアプリケーションIDを登録します
http://developer.yahoo.co.jp/
2. Yahoo!APIを使った住所変換とは …
例)
当社(ワークスペース)のあるソフトピアジャパンの郵便番号「503-0006」を使って説明します。アプリケーションIDはガイドラインによると自己責任による管理が必要とのことなので、ここでは仮に「ABCDEFG1234567890」とします。
http://search.olp.yahooapis.jp/OpenLocalPlatform/V1/zipCodeSearch query = 郵便番号 appid = ABCDEFG1234567890
上記を&記号で繋げてリクエストURLを完成させます。
http://search.olp.yahooapis.jp/OpenLocalPlatform/V1/zipCodeSearch?query=503-0006&appid=ABCDEFG1234567890
<?xml version="1.0" encoding="utf-8"?> <YDF xmlns="http://olp.yahooapis.jp/ydf/1.0" totalResultsReturned="1" totalResultsAvailable="1" firstResultPosition="1"> <ResultInfo> <Count>1</Count> <Total>1</Total> <Start>1</Start> <Status>200</Status> <Description></Description> <Copyright></Copyright> <Latency>0.02</Latency> </ResultInfo> <Feature> <Id>391fa1425487bec594fb6df4c7730bb5</Id> <Gid></Gid> <Name>〒503-0006</Name> <Geometry> <Type>point</Type> <Coordinates>136.63793352,35.37063932</Coordinates> </Geometry> <Category>郵便番号</Category> <Category>町域郵便番号</Category> <Description>Yahoo!郵便番号検索</Description> <Style/> <Property> <Uid>74c647f84dd83a2a05a76eebdb981edca4fcb34f</Uid> <CassetteId>3ee7f7f5fe1ef2267e319b15168e37d3</CassetteId> <Country> <Code>JP</Code> <Name>日本</Name> </Country> <Address>岐阜県大垣市加賀野</Address> <GovernmentCode>21202</GovernmentCode> <AddressMatchingLevel>6</AddressMatchingLevel> <PostalName>岐阜県大垣市加賀野</PostalName> .. 以下、割愛します
このような値が返されます(ブラウザに表示されます)
ここで、「リクエストURLをブラウザのアドレスバーに入れてアクセスした例」の32行目 <Address> 〜 </Address> の間に注目してください。
「岐阜県大垣市加賀野」という住所情報が含まれています。
これこそがAPIで取得したい住所です
【FileMaker的に組み立てる】
この予備知識を使ってFileMaker的に組み立てるなら
- ユーザーが「郵便番号」を入力する
- 入力された郵便番号を元に「URLから挿入」スリプトステップを使って「住所レスポンス(テキスト)」フィールドに前述の「Yahoo!APIを使った住所変換とは」が返されるようにします
- 2. の戻り値(返された値)から<Address> 〜 </Address>の間の値を住所フィールドに登録します
1つのスクリプト + 3つのテキスト・フィールドを使って郵便番号変換をさせます。
【その手順は】
準備するもの
FileMakerに「顧客」テーブルを作成して以下のフィールドを作成します(図1参考)
- 「郵便番号」(テキスト形式)
- 「住所レスポンス」(テキスト形式)
- 「住所」(テキスト形式) ※
とりあえずテキスト形式のフィールドを作成してください。
それでは、前項「FileMaker的に組み立てる」の手順通りに進めたいと思います。
1. 2. ユーザーが郵便番号を入力してAPI実行、「郵便番号」フィールドに値が入力されたら数字の桁数が7桁(つまり郵便番号の桁数が正しく入力されたか)を判定して数字7桁が入力された場合のみ動作するスクリプトトリガを用意します。
If[ ※計算式※ ] URLから挿入 [ ※設定※ ] フィールドへ移動 [ 顧客::住所 ] End If※計算式※ は以下のとおり
Length( Filter(顧客::郵便番号; "0123456789") ) = 7※設定※は以下のとおり
[ ] SSL証明書の検証 [レ] 内容全体を選択 [レ] ダイアログなしで実行 [レ] 指定フィールドへ移動 ※1 URLを指定 ※2
※1 「顧客::住所レスポンス」を選択
※2
http://search.olp.yahooapis.jp/OpenLocalPlatform/V1/zipCodeSearch?query=” &
Left(Filter(顧客::郵便番号; “0123456789”); 3) & “-” & Right(Filter(顧客::郵便番号; “0123456789”); 4) &
“&appid=ABCDEFG1234567890”
→ さらに補足説明
※1. appid=に続くABCDEFG1234567890はYahoo!デベロッパーネットワークで取得したアプリケーションIDを割り当ててください。
※2. URLを指定中の「Left(Filter(顧客::郵便番号); “0123456789”); 3)」は郵便番号から数字だけを抜き出して左から3文字取得
※3. URLを指定中の「Right(Filter(顧客::郵便番号); “0123456789”); 4)」は郵便番号から数字だけを抜き出して左右から4文字取得
こうして出来上がったスクリプトをスクリプトトリガ設定の「OnObjectModify」を使って呼び出します。文字入力が確定する都度、スクリプトを読みだして7桁数字が整ったらスクリプトが実行されて結果が住所レスポンスフィールドに返されます。
3. 「住所レスポンス」フィールドから郵便番号に該当する住所を「住所」フィールドに追加します
先に作成した「住所フィールド」の入力値の自動化「計算値」の「指定」ボタンを押して次の計算式を追加しますCase( not IsEmpty(住所レスポンス); Middle( 顧客::住所レスポンス; Position(顧客::住所レスポンス; "<Address>"; 1; 1) + 9; Position(顧客::住所レスポンス; "</Address>"; 1; 1) - Position(顧客::住所レスポンス; "<Address>"; 1; 1) - 9 ) )
※ 補足説明
「住所レスポンス」フィールドに値があれば、<Address>から</Address>までの間にある値を読み込みなさいという意味です。ここまでの説明通りにソリューションを作り実行すると「郵便番号入力 → 住所自動入力」が実行されます。言葉だけでは分かりづらいかもしれないので、ソリューションを作る手順をムービーで紹介します。