前のエントリををちゃんと書いた
前回のエントリで書いたソースは最低限だったので、もうちょっとちゃんとしたよ。
変更点
openpearあたりにリリースしようかしらん。Services_Recruit_Hotpepperとかで。
<?php /** * HotpepperAPIを操作するクラス * * @version 0.1.0 */ class Hotpepper { /** * URL */ const BASEURL = 'http://webservice.recruit.co.jp/hotpepper/'; /** * APIキー * * @var string $apiKey */ private $apiKey; /** * APIバージョン * * @var string $apiVersion */ private $apiVersion; /** * コンストラクタ * * @param string $apiKey * @param string $apiVersion */ public function __construct($apiKey = null, $apiVersion = null) { if (is_null($apiKey)) { throw new Exception('$apiKey not found'); } $this->apiKey = $apiKey; $apiVersion !== null ? $this->apiVersion = $apiVersion : $this->apiVersion = 'v1'; } /** * グルメサーチを行います * * @param array $params * @return object */ public function getGourmet($params = array()) { return $this->_send('gourmet', $params); } /** * 店名サーチを行います * * @param array $params * @return object */ public function getShop($params = array()) { return $this->_send('shop', $params); } /** * 検索予算マスタを取得します * * @param array $params * @return object */ public function getBudget() { return $this->_send('budget'); } /** * 大サービスエリアマスタを取得します * * @param array $params * @return object */ public function getLargeServiceArea($params = array()) { return $this->_send('large_service_area', $params); } /** * 大エリアマスタを取得します * * @param array $params * @return object */ public function getLargeArea($params = array()) { return $this->_send('large_area', $params); } /** * 中エリアマスタを取得します * * @param array $params * @return object */ public function getMiddleArea($params = array()) { return $this->_send('middle_area', $params); } /** * 小エリアマスタを取得します * * @param array $params * @return object */ public function getSmallArea($params = array()) { return $this->_send('small_area', $params); } /** * ジャンルマスタを取得します * * @param array $params * @return object */ public function getGenre($params = array()) { return $this->_send('genre', $params); } /** * 料理名マスタを取得します * * @param array $params * @return object */ public function getFood($params = array()) { return $this->_send('food', $params); } /** * サービスエリアマスタを取得します * * @return object */ public function getServiceArea() { return $this->_send('service_area'); } /** * クレジットカードマスタを取得します * * @param array $params * @return object */ public function getCreditCard($params = array()) { return $this->_send('credit_card', $params); } /** * URLに接続します * * @param string $method * @param array $params * @param string $format * @return string|array|object */ private function _send($method, $params = array(), $format = null) { $url = sprintf('%s%s/%s/?key=%s&%s', self::BASEURL, $method, $this->apiVersion, $this->apiKey, $this->_buildQuery($params, $format)); if (!extension_loaded('curl')) { throw new Exception('cURL extension not loaded.'); } $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); // 接続URLを定義 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // curl_execで戻り値を取得 curl_setopt($ch, CURLOPT_VERBOSE, 0); // 詳細出力をoff curl_setopt($ch, CURLOPT_HEADER, 0); // ヘッダは出さない curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); // タイムアウトは5秒 $response = curl_exec($ch); if ($response === false) { throw new Exception('errorno:'. curl_errno($ch) . ' error:' . curl_error($ch)); } if (curl_getinfo($ch, CURLINFO_HTTP_CODE) !== 200) { throw new Exception('status code:' . curl_getinfo($ch, CURLINFO_HTTP_CODE)); } return simplexml_load_string($response); } /** * クエリーストリングを作成します * * @param array $params * @param string $format * @return string */ private function _buildQuery($params = array(), $format = null) { if (!is_null($format)) { $params['format'] = $format; } $queries = array(); foreach ($params as $key => $value) { if(!is_null($value)) { $queries[] = $key . '=' . urlencode($value); } } return implode('&', $queries); } } ?>