ネットサービスの開発に役立ちそうな話題を中心にお届けします。
F.Ko-Jiの「一秒後は未来」 > API > APIが微妙なときでもなんとかする
2007年01月11日 22:15
1849日前に投稿

APIが微妙なときでもなんとかする

  • ... PV
  • このエントリーをはてなブックマークに追加

Web屋のネタ帳に書かれている「ホットペッパーAPIの仕様が微妙におしい件」という記事に関して。

いまのホットペッパーAPIには、取得できる情報には位置情報(緯度、経度)が含まれておらず、また逆に位置情報で検索する機能もない。正確な位置情報(緯度/経度)のデータがないと、Google Maps API とかYahoo地図情報Webサービスなんかとの連携が非常にやりづらいのだ。

確かにマッシュアップしづらいなと感じました。しかし、そこはプログラミングやAPIでごり押しすればなんとかなります。むしろ、プログラマーにはその「なんとかする能力」が求められるはずです。

たとえば次のように。

緯度/経度から住所を求めるinvgeocoderを利用する
これはいわゆる逆ジオコーディングを提供してくれているAPIです。これを利用すると、地図の中心地点や地図をクリックした地点から住所を求めることができます。

ジオコーディングのバグは「丁目」に置換すればよい

ジオコーディングのために住所を正規化する
住所情報の書式には、「番地で終わる場合とビル名で終わる場合」や「番地に丁目が含まれる場合と含まれない場合」などが考えられます。ホットペッパーAPIで提供される住所の丁目・番地部分は運良く「xx-yy-zz」の形式に正規化できるので、例えばJavaScriptなら次のようにしてジオコーディングのための住所を得ることができます。

if (address.match(/^(.+)([0-9]+)\-([0-9]+)$/)) {
 return RegExp.$1 + RegExp.$2 + '丁目' + RegExp.$3;
}
if (address.match(/^(.+)([0-9]+)\-([0-9]+\-[0-9]+)(.+)$/)) {
 return RegExp.$1 + RegExp.$2 + '丁目' + RegExp.$3;
}
if (address.match(/^(.+)([0-9]+)\-([0-9]+)(.+)$/)) {
 return RegExp.$1 + RegExp.$2 + '丁目' + RegExp.$3;
}

これらを利用すると、次のような手順で地図で表示した地域付近の店舗を地図にマッピングすることができます。

  1. 地図の中心地点の住所をinvgeocoderで取得
  2. 取得した住所の町名(town)までを使ってホットペッパーAPIで店舗情報を取得
  3. 取得した店舗情報の住所を正規化
  4. 正規化した住所でジオコーディング

ジオコーディングができれば「地図の中心地点から近い順にソート」といったこともできなくはないです。

もちろんAPIを提供する会社は使いやすいインタフェースのAPIを提供すべきです。そうしなければマッシュアップサイトの質が低下してしまうばかりか、いずれ人々の頭から忘れ去られ、APIを提供する意味がなくなってしまいます。

しかし、微妙な仕様が提供された場合でもなんとか解決策を模索するのがプログラミングの面白さではないでしょうか。

スポンサード リンク

Written by
Meity.jp - Twitterなかまでプライベートなオフ会を開催したいなら


トラックバック

このエントリーのトラックバックURL:

この一覧は、次のエントリーを参照しています: APIが微妙なときでもなんとかする:

» ホットペッパーAPIの仕様が微妙におしい件 from Web屋のネタ帳
最近公開されたホットペッパー.jp(hotpepper.jp)Webサービスに... [詳しくはこちら]

» ホットペッパーWebサービスが大幅パワーアップ from F.Ko-Jiの「一秒後は未来」
ホットペッパーWebサービスが微妙じゃなくなったようだ。 ■2007.02.16 店名サーチAPIを公開しました! 57万件を検索対象とした店名サーチAP... [詳しくはこちら]

API / 思うこと

English version

前のエントリー: « Google AdSenseの紹介プログラムが積極プロモーション可能に
次のエントリー: 納豆の食べ過ぎはセレン中毒の恐れ - 納豆は1日100グラムまで »

コピペにご利用ください。

タイトル:

URL:

リンク用HTMLタグ: