今更ながらWhileを久しぶりに触りました。
なんかヘルプをみててもパッとしないんですよね。
なので、備忘録として書いておきます。
今回は、APIのZipcloudを使って、郵便番号から住所を取得する想定をしてやっていきまーす。
Whileの説明。(T_Tわかんねー...)
嚙み砕いていうと計算式のLOOP処理ですね。
そもそもZipcloudについて
(例)郵便番号「7830060」で検索する場合
https://zipcloud.ibsnet.co.jp/api/search?zipcode=7830060
このようにハイフンなしで郵便番号を送るとJSON形式で回答がもらえます。
レスポンスサンプルには下記が書いてあります。
{
"message": null,
"results": [
{
"address1": "北海道",
"address2": "美唄市",
"address3": "上美唄町協和",
"kana1": "ホッカイドウ",
"kana2": "ビバイシ",
"kana3": "カミビバイチョウキョウワ",
"prefcode": "1",
"zipcode": "0790177"
},
{
"address1": "北海道",
"address2": "美唄市",
"address3": "上美唄町南",
"kana1": "ホッカイドウ",
"kana2": "ビバイシ",
"kana3": "カミビバイチョウミナミ",
"prefcode": "1",
"zipcode": "0790177"
}
],
"status": 200
}
とりあえずFileMakerからAPIをたたいてみます。
変数を設定[$URL;
値:"https://zipcloud.ibsnet.co.jp/api/search?zipcode=7830060"
URLから挿入[選択;ダイアログあり:オフ;ターゲット:$Result;URL]
変数を設定[$Result;
JSONFormatElements ( JSONGetElement ( $Result ; "results[0]" ) )]
ここまで回すと
{
"address1" : "高知県",
"address2" : "南国市",
"address3" : "蛍が丘",
"kana1" : "コウチケン",
"kana2" : "ナンコクシ",
"kana3" : "ホタルガオカ",
"prefcode" : "39",
"zipcode" : "7830060"
}
こんな感じになっているはず。
これをJSONGetで一個ずつ取り出してもいいわけです。
けどスマートなのでしょうか...
なので私は無意味にWhileを使うわけです。
address1address2address3と規則が決まっているので、
123の順番で取れたらいいわけで。
先ほどの
Whileの説明。
構文
While ([初期変数] ; 条件 ; [ロジック] ; 結果)
初期変数 - 以降の引数に使用できる変数の定義
条件 - 各ループの繰り返しの前に評価される論理式。真の間はループが繰り返されます。偽になるとループは停止します。
ロジック - ループが繰り返されるごとに評価される変数の定義
結果 - ループが停止したときに返される式
ほおほおほお?
While (
[
lst = $Result ; //JSONの中身
tar = "address" ; //ターゲットの名称
i = 1 ; //繰り返ししたいi
add = "" //格納されるやつ
] ;
i < 4 ;
[
add = add & JSONGetElement ( lst ; tar & i ) ;
i = i + 1
] ;
add
)
こんな感じかな?
見事に"高知県南国市蛍が丘"が取れました。
ありがとうWhile!!
高知県南国市蛍が丘てどこ???
Whileって便利だけど人選びそう。
もう少しヘルプも見やすくなったらいいのに。