CakePHPでAtndAPIを使うコンポーネントを作ってみた。
作ったというほど大したことはしてないのでコンポーネントを作るときの参考にでもして頂ければと。
PHPのバージョンが古い人用にZendを使う前提になっています。
Zendを使う方法はこちら
<?php App::import('Core', 'http_socket'); class AtndApiComponent extends Object { /** * API通信時に使用するURL */ var $apiBaseUrl = 'http://api.atnd.org/'; /** * イベント */ public function events(array $params, $format = null, $count = null) { return $this->_execute('events', $params, $format, $count); } /** * 出欠 */ public function users(array $params, $format = null) { return $this->_execute('events/users', $params, $format); } /** * Call API */ private function _execute($method, $params = array(), $format = null, $count = null) { $url = sprintf('%s%s/?%s', $this->apiBaseUrl, $method, $this->_buildUrl($params, $format, $count)); /* * タイムアウトをしているする場合はこんな感じ * $socket = new HttpSocket(array('timeout' => '20')); */ $socket = new HttpSocket(); $data = $socket->get($url); if ( $format === "json" ) { return json_decode($data); /* * PHPのバージョンが古い場合はZendを使うとよいかと。 * App::import('Vendor', 'zendInit'); * App::import('Vendor', 'Json', array('file' => 'Zend' . DS . 'Json.php')); * return Zend_Json::decode($data); */ } else if ($format === 'xml' || $format === 'atom') { return simplexml_load_string($data); } return $data; } private function _buildUrl($params = array(), $format = null, $count = null) { if (!is_null($format)) { $params['format'] = $format; } if (!is_null($count)) { $params['count'] = $count; } $queries = array(); foreach ($params as $key => $value) { if(!is_null($value)) { $queries[] = $key . '=' . $value; } } return implode('&', $queries); } } ?>