管理人が運営する地域情報ブログで、位置情報に紐づいて、リクルートホットペッパーに登録しているお店を紹介する。そんなお話を前記事でしたと思います。
今日は、その続き。実際のプログラミングについて


google広告

プログラムの基本設計

まずは、簡単な基本設計

1)記事に緯度経度情報が必要。なければ、そもそもapiに質問を投げない
2)apiに質問を投げても結果が0件の場合は何も表示しない。

まず、この2つを条件分岐によって作りたいと思います。以下のような感じになりそうです。

<?php 
if(緯度経度情報はある):
if(結果は0件ではない):

//api処理など

endif;//結果0件有無のendif
endif;//緯度経度情報有無のendif
?>

記事に紐づけている緯度経度情報を取得して条件分岐する

以前、位置情報を地図情報に紐づけて表示するというやり方をご紹介したと思います。あの時、参考にしたというか、ほとんどそのまま使わせていただいているプログラムが、

GoogleマップのMarkerClustererをフォトログに導入してみた | Simple Colors

Simple Colorsさんのこの記事です。このプログラムは、最初と最後が

<?php if ( $latlng = get_post_meta( $post->ID, 'lat,lng', true ) ) :?>
 //各処理
<?php endif; ?>

となっています。これは、「現在記事のカスタムフィールドに”lat,lng”という項目があればこの処理を行う」という意味になります。今回も同様にこの2文を上下に挟んだプログラムになりそうです。

次に2)の条件、指定地点の付近にお店がゼロならば。。。という条件は、apiに条件を投げてみないと分かりません。そのためには、緯度、経度の情報がそれぞれ別に必要です。位置情報は、(緯度,経度)という形の文字情報で入っていますので、apiに使うためには、緯度と経度を分割してそれぞれの値を取り出して扱う必要がありそうです。

<?php $latlngdata = explode(",",$latlng);//lat,lngの値をそれぞれ分割する ?>

検索で探したところ、explode関数が便利そう。カンマを区切りでデータを分割しなさいという意味です。
すると

緯度=$latlngdata[0]
経度=$latlngdata[1]

として扱えそうです。

<?php
 $latlngdata = explode(",",$latlng);//lat,lngの値をそれぞれ分解する(配列で読み込む)
 $url = "http://webservice.recruit.co.jp/hotpepper/gourmet/v1/?key=(あなたのapiキー)&lat=$latlngdata[0]&lng=$latlngdata[1]&range=3";//api問いかけ用のurl
 $xml = simplexml_load_file($url);//apiからの結果を読み込む
 if ( $xml->results_returned !=0 )://読み込んだ結果件数が0じゃなければ以下の処理を行いなさい ?>

//apiの内容処理

<?php endif;//api結果有無のendif ?>

なので、内側のif条件はこれでうまく行きそう。これで、緯度経度情報があれば、api処理を行い。さらに結果があれば表示する。条件に2つとも当てはまらないなら、何も表示しないという条件が成立しそうです。

結果を表示する

あとは、結果を表示するだけ。表示するためのhtmlテンプレートを考えます。

<h4>この近くでホットペッパークーポンのあるお店</h4>
<ul>
<li><a href="(お店のリンク)" target="blank">お店の名前</a>(お店の情報)</li>//この行をお店の数だけ、最大10件繰り返す。
</ul>

なので、上記$xml(apiで読み込んだデータ)の中身をforeach構文でループ部分に吐き出すということになると思います。

すると、

<!--ホットペッパークーポン表示-->
<?php if ( $latlng = get_post_meta( $post->ID, 'lat,lng', true ) ) ://latlng存在有無のif
 $latlngdata = explode(",",$latlng);//lat,lngの値をそれぞれ分解する
 $url = "http://webservice.recruit.co.jp/hotpepper/gourmet/v1/?key=(あなたのapiキー)&lat=$latlngdata[0]&lng=$latlngdata[1]&range=3";
 $xml = simplexml_load_file($url);
 if ( $xml->results_returned !=0 )://api結果有無のif?>
<h4>この近くでホットペッパークーポンのあるお店</h4>
<ul>
<?php foreach($xml->shop as $shop): ?>
<li><a href="<?php echo $shop->coupon_urls->pc; ?>" target="blank"><?php echo $shop->name; ?></a>(<?php echo $shop->genre->catch; ?>)</li>
<?php endforeach; ?>
</ul>
<?php 
endif;//api結果有無のendif
endif;//latlng存在有無のendif
?>
<!--/ホットペッパークーポン表示-->

こうなります。ブログに位置情報をlat,lng(例 33.590002,130.420622)というカスタムフィールドで入れている人は、このまま使えると思いますのでよかったらご利用ください。

マネタイズ

ホットペッパーではバリューコマースでアフィリエイトサービスをやっています。上記のリンク部分をルールに従って変えるだけです。あんまり詳しく書きませんが手順は以下の通り。

1)バリューコマースの会員となって掲載したいブログの審査を依頼。OKをもらう
2)ウェブサービスリンクのページを参考に、(sid,pid)を入れてリンクを作る。
3)上記のリンク部分を変更する

これでOK。詳細は前記事で紹介した

OLYMPUS DIGITAL CAMERA

Amazon.co.jp: WordPress プラグイン&WebAPI 活用ガイドブック [Version 3.x対応] 電子書籍: 星野邦敏, 西川伸一: Kindleストア

この本に詳細に内容が書いてありますので、ぜひ一度読んでみてください。

Hotpepperから付近のお店データを表示するAPIを作る

ホットペッパーから、お店情報を取得し掲載するapiを作ったという一連の関連記事

位置情報にリンクして、ホットペッパーのクーポン情報をAPIで紐づける

管理人が運営している地域情報ブログは以前紹介したと思います。 美味しかったラーメン屋さんとか、話題のアウトレットスイーツ情報など、自分が行ったお店とか、これから行きたいお店について記事で紹介していますが、このブログにつけ […]

2014年05月05日

ホットペッパーのお店を紹介するapiのプログラミングをやってみた

管理人が運営する地域情報ブログで、位置情報に紐づいて、リクルートホットペッパーに登録しているお店を紹介する。そんなお話を前記事でしたと思います。 今日は、その続き。実際のプログラミングについて プログラムの基本設計 まず […]

2014年05月06日
広告