WebAPIを使って郵便番号から住所文字列を取得

; ; zipcloud(郵便番号データ配信サービス)を使って、 ; 郵便番号から住所文字列を取得するサンプル […]

; ; zipcloud(郵便番号データ配信サービス)を使って、 ; 郵便番号から住所文字列を取得するサンプル […]

;
;	zipcloud(郵便番号データ配信サービス)を使って、
;	郵便番号から住所文字列を取得するサンプル
;
#include "hspinet.as"
#include "encode.as"
#include "hspinet.as"


	netinit
	if stat : dialog "ネット接続できません。" : end

	;	リクエストURL
	neturl "http://zipcloud.ibsnet.co.jp/api/"

	;	リクエストパラメータ
	; GET形式でCGIにパラメーターを渡す
	; zipcode  郵便番号(必須パラメータ)
	; callback コールバック関数名
	; limit    最大件数
	yubin = "100-0013"	; 東京都千代田区霞が関
	; yubin = "0790177"	; 北海道美唄市上美唄町 協和/南
	netrequest_get "search?zipcode=" + yubin


	mes "DOWNLOAD 開始"

*main
	;	結果待ちのためのループ
	netexec res
	if res > 0 : goto *comp
	if res < 0 : goto *bad
	await 50
	goto *main

*bad
	;	エラー
	neterror estr
	mes "ERROR "+estr
	stop

*comp
	;	完了
	mes "DOWNLOAD 完了"
	netgetv buf
	
	; UTF8 -> Shift-JIS
	buf_sjis = utf8n2sjis( buf )
	
	; LF -> CL+LF
	; JSON構文解析には不要だけど、表示に必要な処理
	CL = ""
	LF = ""
	poke CL, 0, $0D
	poke LF, 0, $0A
	strrep buf_sjis, LF, CL+LF
	
	mesbox buf_sjis,640,200,1


	;	JSON構文解析
	; レスポンスフィールド
	; status  ステータス 正常時は 200、エラー発生時にはエラーコードが返される。
	; message メッセージ エラー発生時に、エラーの内容が返される。
	; results --- 検索結果が複数存在する場合は、以下の項目が配列として返される ---
	;         zipcode  郵便番号       7桁の郵便番号。ハイフンなし。
	;         prefcode 都道府県コード JIS X 0401 に定められた2桁の都道府県コード。
	;         address1 都道府県名
	;         address2 市区町村名
	;         address3 町域名
	;         kana1    都道府県名カナ
	;         kana2    市区町村名カナ
	;         kana3    町域名カナ
	;
	; エラー
	;   400 入力パラメータエラー
	;   500 API内部で発生したエラー
	jsonopen ptJson, buf_sjis
	jsongetobj ptJson_results, "results", ptJson

	; address
	jsonnext ptJson_results_c, ptJson_results, 2
	while( ptJson_results_c != 0 )
		jsongets ad1 ,"address1", ptJson_results_c
		jsongets ad2 ,"address2", ptJson_results_c
		jsongets ad3 ,"address3", ptJson_results_c
		mes "" + ad1 + ad2 + ad3
		jsonnext ptJson_results_c, ptJson_results_c, 0
	wend

	; status
	jsongeti st, "status", ptJson
	; mes "(" + stat + ") " + st
	if st = 200 : mes "ステータス:正常"
	if st = 400 : mes "ステータス:入力パラメータエラー"
	if st = 500 : mes "ステータス:API内部で発生したエラー"

	jsonclose

	stop