Re:

感銘高き名言は「1%のひらめきがなければ99%の努力は無駄である」(トーマス・エジソン)

タグ:API

リクルートでは、ホットペッパーやホットペッパービューティーの情報をAPIで提供しています。

リクルートWEBサービス



ホットペッパービューティーAPIを利用してヘアサロン検索を簡易作成してみました。

http://sendailocal.com/?guid=on&c=welcome&m=index2

仙台駅の位置情報から検索した結果です。

GPS取得処理を加えれば、周辺検索なんてすぐできちゃいますね。

すごくありがたい世の中です。


しかし、ルート検索の経路地図も合わせて組み込んでいるのですが…相変わらず表示は安定しないというか、ほとんど表示されないといっても過言じゃない…。

直接URLにアクセスすれば表示されるんだけど、IMGタグに入れると表示制限の画像が表示される。

困ったな。

すっかりkeyを差し替え忘れてました…。


そしてやっぱり、ルート検索の経路表示は大変なことになってますw

パスポイントの指定はデータが取得できても難しい。

sendaiLocal.comを自宅サーバに引っ越しましたー。

jQuery使い始めた頃に作ったお粗末すぎるコンテンツで、すっかり放置してます。

なので、一旦削除。

まずはマッシュアップして、初めから情報が入ったものを提供する形の方が利用しやすいしされやすいのかなって。

それと、基本はケータイ向けのコンテンツで行きたいね。



今日、MSNメッセで声をかけられたのをきっかけに、ルート検索の経路表示ってどうやるんだろう?って調べてみた。

GoogleMap APIを利用しJavascriptでPCに向けてなら簡単に実装できる。

が、Static APIとなると2点間の経路をpathパラメータに付加しなければいけないらしい。

始点と終点を繋ぐだけでは直線になってしまう…。

だから、道路(交差点)に沿ってパスポイントが複数必要になる。


このパスポイントを設定すると、下のよーに経路が表示されるワケ!

100箇所までしかパスポイントを指定できないので、割と周辺表示に限られると思いました。


このStatic APIですが、たまに表示されないことがあります…。

何か設定ミスしてるのかなぁ。

map_1270922026758
sample

※Google Static Mapsの表示制限が頻発するとき

自分的に、Twitterというものがしっくりきてない状態でなんとなく使ってたりする日々です。

というか、ブログエントリーがただつぶやかれてる。

iPhoneにクライアント入れてたりしても、日に一度も立ち上がらないくらいです。


でも一応、タイトルにあるようなことはプログラムできた方が、時代とともに生きられる価値になると思うので、少し頭に入れておきます。


とりあえずはドキュメント


Twitterのデータを利用するシーンの方が多いと思いますし、基本的には

  1. GETリクエスト
  2. XMLなどのデータを受信

だけなので、1と2をサッと実装して、あとは煮るなり焼くなりすればいいです。


あまり難しいことを考えずとも、get_file_contents()を利用してデータが受信できます。

第一引数に取得対象のURL(APIドキュメント参照)、第三引数にstream_context_create()で作成したコンテキストを指定すれば返り値でデータが取得できます。

$xml = file_get_contents($url,false,$context);


XMLで受信(URLのフォーマットが.xml)したデータであれば、simplexml_load_string()にてオブジェクトデータにしたり、あとはPHPで好きなように処理。

$obj = simplexml_load_string($xml);

ひとつだけ。

Twitter APIは、(ほとんどのリクエストに)認証を必要としOAuth、Basic Authの2種類に対応しています。

なので、stream_context_create()に渡すオプション変数でBasic  Authすなわちベーシック認証(Basic認証)を渡すのがポイントとなっています。

セキュアに逝きたい場合はOAuthでしょうが・・・簡潔に実装するのが今の目的なので割愛(いや、知らないだけ)。そして、file_get_contents()とか使ってる時点でセキュアじゃないのかもしれない。

php.net
stream_context_create

ということで、連想配列からなる連想配列でなければならないオプションは、HTTPリクエストでGETメソッドとベーシック認証のふたつ。

$options = array(
  'http' => array(
    'method' => 'GET',
    'header' => 'Authorization: Basic '. base64_encode($username.':'.$password)
  )
);


base64_encode()でユーザ名とパスワードの符号化を。

$context = stream_context_create($options);

取得対象URLをhttp://twitter.com/account/rate_limit_status.xmlとしてデータを受信してみると、APIの利用ステータスを確認できます。

reset-time:カウントがリセットされる日時
reset-time-in-seconds:reset-timeのタイムスタンプ値
remaining-hits:残り取得回数
hourly-limit:1時間あたりの制限回数

たとえば、echo $obj->hourly-limit; // 150

制限回数は現時点で150が上限ですが、30秒に一回はリクエストできる計算なので十二分だと思います。


そんな感じ。


なお、allow_url_fopen、allow_url_include設定によりfile_get_contents()が使えない場合は、ソケットとか使ったり別な方法を試す必要があります。

バージョンが5とかだとPHP_INI_SYSTEMなので、ini_set()や.htaccessでは変更できません。

http://php.net/manual/ja/filesystem.configuration.php

↑このページのトップヘ