たまにはプログラムの事などを(C#編)

キョウビのプログラムはいかに時間を節約して先人の知恵を利用するか
まぁあれです、ググってコピッってペースト(笑)
もっとも仕組みはちゃんとわかってないと至極厄介なバグを孕むことになりかねないですからご注意を!

てーことで
よく、WEBなんかで郵便番号入れたら住所が検索されてでてくるやつありますが
以前はこんなの作ってたんでけど、イマドキ便利になって
ごりごりデータ作ったり検索処理書いたりしなくても

http://zip.cgis.biz/

こんなWEBサービスとか利用すると、アプリレベルでわずか数十分で実装できちゃったりします
しかもデータは常に最新!
なんだか最近のプログラミングはREGO感覚ですね
REGOというより、むしろ電子ブロックに近いのかなぁ

以下「C#」にて実装したサンプルソースコードです

/// http://zip.cgis.biz/ の〒APIを利用して住所検索
/// 公共のものではないので、使えなくなるかもしれない
/// (ロジックはここで完結しているけど、ちょっと手抜き)
public string DoFindAddress(string iZipNo)
{
 string theAddress = "";
 try
 {
 Cursor.Current = Cursors.WaitCursor;
 string theUrl = "http://zip.cgis.biz/xml/zip.php?zn=" + iZipNo;
 HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(theUrl);
 HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
 Stream receiveStream = myHttpWebResponse.GetResponseStream();
 Encoding encode = System.Text.Encoding.GetEncoding("utf-8");
 StreamReader readStream = new StreamReader(receiveStream, encode);
 XmlTextReader reader = new XmlTextReader(readStream);
 bool isLast = false;
 while (reader.Read())
 {
 switch (reader.NodeType)
 {
 case XmlNodeType.Element:
 if (reader.MoveToFirstAttribute())
 {
 // 属性を発見
 if (reader.Name == "state") theAddress += reader.Value;
 if (reader.Name == "city")  theAddress += reader.Value;
 if (reader.Name == "address")
 {
 if (!reader.Value.Equals("以下に掲載がない場合"))
 {
 theAddress += reader.Value;
 }
 isLast = true;
 break;
 }
 }
 break;
 case XmlNodeType.Text:
 break;
 default:
 break;
 }
 if (isLast) break;
 }
 reader.Close();
 readStream.Close();
 myHttpWebResponse.Close();
 }
 finally
 {
 Cursor.Current = Cursors.Default;
 }
 return theAddress;
}

説明するほどのコードでもないですが、簡単に説明すると

WEBサービス用のURLを組立HTTPで通信し住所のXMLデータを貰う
受けたXMLをパースし住所を組立て復帰

あら説明は2行で済んだわ!