フレッシュマン企画連載
初めてでも安心! 1日で作れるWebアプリ講座

最終回 それでもやっぱり「プログラミングは楽しい!」

シグマコンサルティング 設楽 亜紀子
2008/04/08

3. 緯度/経度情報から飲食店を検索する。すぐそばすぐそば

 

次はぐるなびの検索です。第2回と同じ方法ですが、今回は検索条件を増やしています。先に作成したGetCodingメソッドを使って、緯度/経度情報も条件に含めてみますよ。

 あと、ぐるなびWebサービスは、2月にフリーワード検索対応となりました。せっかくですので、この機能も使ってみましょう。

 再び、ぐるなびの利用マニュアルの「2-3.各API仕様詳細」−「2-3-1.レストラン検索API」のリクエスト・パラメータを見てください。これが、検索の条件にできる項目です(対して、レスポンスにある項目が検索後にXMLデータとして取得できる項目です)。今回わたしたちは“昼飯侍”と称したWebアプリを作成していますが、残念ながらリクエスト・パラメータの中には、「ランチ営業をしているかどうか」という項目はありません。

 そこで、フリーワード検索を利用して、ランチ営業をしているであろう店舗に絞った検索をしてみましょう。

     
  “ランチ”と“昼”とどちらかのキーワードで検索したいなぁ。
     
 

ぐるなびWebサービスでは、複数のフリーワードが設定可能です。どちらかの条件ということはOR検索ですね。ちなみに、すべてを満たす条件で検索したい場合はAND検索を使いますよ。ぐるなびの利用マニュアルのリクエスト・パラメータの表から、フリーワードとOR検索/AND検索を指定する項目を探してみましょう。

     
  フリーワードは“freeword”、検索条件は“freeword_condition”だ!
     
 

では、ボタン・クリック時のイベントを記述していきましょう。hirumeshi3.aspx.csファイルを開いてButton1_Clickイベント・ハンドラ内に記述します。

 入力された住所から、店舗を検索する動作部分です。少し長いので、3つに分けて説明します。

Button1_Clickイベント・ハンドラに記述する内容(1)
コードのテキストはこちらからコピーできます。
各番号については以下で説明します。

先に説明したGeoResultクラスを使って、作成したGetCodingメソッドを実行しています。その結果、「geo」というGeoResult型の変数が取得されています。

取得できたgeo.Latが「null」(=ヌル、何もない状態)だった場合は、緯度/経度情報が取得できなかったことを意味するので、ラベルに「住所がダメだ。」というコメントを表示します。

ぐるなび検索用のURLを用意します。とても長いため、上の画像にはすべてを表示できませんでした。記述は下記のとおりです。

String gvUrl =
  http://api.gnavi.co.jp/ver1/RestSearchAPI/?keyid={0}&category_l={1}&hit_per_page={2}&latitude={3}&longitude={4}&range={5}&freeword={6},{7}&freeword_condition=2

 このURLで検索条件としているのは、

  • アクセスキー(keyid)
  • 業種(category)
  • 最大表示件数(hit_per_page)
  • 緯度(latitude)
  • 経度(longitude)
  • 緯度/経度からの検索範囲(range)
  • フリーワード2つ(freeword)
  • フリーワード検索条件タイプ(freeword_condition)……「=2」は「OR検索条件」の意。

です。前回と比べてずいぶん増えました。

URLに組み込むための検索条件を準備しています。

置換を使ってを組み合わせてぐるなび検索用のURL文字列を完成させています。パラメータの数が多いので、順番を間違えないように気を付けましょう。

Button1_Clickイベント・ハンドラに記述する内容(2)
コードのテキストはこちらからコピーできます。
各番号については以下で説明します。

URLで取得した検索結果であるXMLデータを読み込み、データセットに格納しています。

取得できたテーブルの数をカウントして、検索結果が「0」件だった場合のコメントをセットしています。ここでは、取得したデータセットにテーブルが「1」件しか存在しない場合は検索結果が「0」件だと判断しています。

検索結果が「1」件以上あった場合には、あらかじめhirumeshi3.aspx.csファイル内に用意されているsetResultDataFromDataSetというメソッドを使用して、複数のテーブルから必要な項目だけを集約した1つのテーブルを作成しています。詳しくは後で説明します。

はGridViewコントロールへのデータのセットです。これはもう慣れてきたのではないでしょうか。

Button1_Clickイベント・ハンドラに記述する内容(3)
コードのテキストはこちらからコピーできます。
各番号については以下で説明します。

 ここでは、取得した件数によって、表示コメントを変える処理をしていますよ。

検索結果件数の値を見るために、取得した複数のテーブルの中から、1番目のテーブルだけを取得しています。後で、取得したデータセットの中身を見る方法を説明します。

で取得したテーブルから、さらに「件数」に当たる部分だけを取得します。

取得した件数をコメントに表示するよう設定しています。

ここは条件分岐です。取得した件数が、先に設定したhit_per_page変数の件数(10件)よりも少なかった場合に、コメントを変化させています。

     
  「.ToString()」? 「Int32.Parse」? また新しいのが出てきましたね。

(1)int(イント)とstring(ストリング)の変換

 

「string count = dtHead.Rows[0]["total_hit_count"].ToString()」という記述を見てください。最後に「.ToString()」とあります。これは、データをstring型へ変換するメソッドです。

 データセットの中の各値は、object型(オブジェクト型)になっています。試しに「.ToString()」を削除してビルド(コンパイル)してみると、「型“object”を“string”に変換できません。」というエラーが表示されます。第1回でも学んだように、string型にobject型の値を入れることはできないのです。そこで、string型に変換するためには、変換したいデータの後に「.ToString()」を付けます。

 同じように、「Int32.Parse(count)」という記述を見てください。これは、データをint型に変換するメソッドです。「Int32.Parse(変換したいデータ)」と記述します。ここでは、int型のhit_per_page変数との不等式を作成したいので、もともとstring型であるcount変数をint型に変換しました。

(2)ブレークポイント、急がば回れ

 

前回から繰り返し行っている「デバッグ」実行時にエラーが発生してしまった場合、何が原因でエラーとなっているのかを見極め、修正する必要があります。つい自分の勘を信じて、「ここだ!」→「あれ? 直らない」→「じゃあ次はここかも!」の繰り返しでは思わぬ時間を使ってしまうこともよくあります。デバッグはプログラミングの中でも大きな割合を占めるものでもあるのです。

 そこで、ブレークポイントというのを使ってみましょう。地道な作業ですが、この方が効率的にエラーを発見できるのです。ご存じのとおり、プログラムは特別な指定がない限りは、上から順にコードが実行されていきます。[F10]キーを押すと、1行ずつコードを実行していくことができます。[F5]キーを押すと、次のブレークポイントまで、コードが実行されます(次のブレークポイントがなければ最後まで)。

 まずは試しに、Button1_Clickイベント・ハンドラの内部にブレークポイントを設定してみましょう。



 INDEX
  [フレッシュマン企画連載]初めてでも安心! 1日で作れるWebアプリ講座
  最終回 それでもやっぱり「プログラミングは楽しい!」
    1.プロローグ
    2.GridViewコントロールのカスタマイズ
    3.イベントの設計、緯度/経度情報を取得するWebサービス
  4.緯度/経度情報から飲食店を検索する。すぐそばすぐそば
    5.ブレークポイントの作成
    6.今回のおさらい

インデックス・ページヘ  「初めてでも安心! 1日で作れるWebアプリ講座」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間