* @license http://www.freebsd.org/copyright/freebsd-license.html 2 Clause BSD License * @version $Id:$ * @filesource */ require_once 'PEAR.php'; require_once 'HTTP/Request.php'; require_once 'XML/Unserializer.php'; if (!defined('SERVICES_LIVEDOOR_WEATHER_BASEURL')) { define('SERVICES_LIVEDOOR_WEATHER_BASEURL', 'http://weather.livedoor.com/forecast/webservice/rest/v1?'); } /** * Class for accessing and retrieving information * from Livedoor's Weather Web Service * * @package Services_Livedoor * @author Tatsuya Tsuruoka * @access public * @version Release: @package_version@ * @uses PEAR * @uses HTTP_Request * @uses XML_Unserializer */ class Services_Livedoor_Weather { var $_baseurl = SERVICES_LIVEDOOR_WEATHER_BASEURL; var $_lasturl = null; function Services_Livedoor_Weather() { } function getApiVersion() { return '0.1.0'; } function getLastUrl() { return $this->_lasturl; } /** * Retrieves weather and forecast information around the city * * Example: * * get('東京', 'today'); * // $result = $lwws->get(142, 'tomorrow'); // 142 = 与那国島 * // $result = $lwws->get('さいたま', 'dayaftertomorrow'); * ?> * * * @access public * @param mixed $city City name or id * @param string $day today|tomorrow|dayaftertomorrow * @return array The array of information returned by the query */ function get($city, $day) { $params = array(); $city_id = $this->getCityIdByCityName($city); if (PEAR::isError($city_id)) return $city_id; $params['city'] = $city_id; $params['day'] = $day; return $this->_sendRequest($params); } function getCityIdByCityName($name) { static $cities; if (!isset($cities)) { $cities = array( '稚内' => '1', '旭川' => '2', '留萌' => '3', '札幌' => '4', '岩見沢' => '5', '倶知安' => '6', '網走' => '7', '北見' => '8', '紋別' => '9', '根室' => '10', '釧路' => '11', '帯広' => '12', '室蘭' => '13', '浦河' => '14', '函館' => '15', '江差' => '16', '青森' => '17', 'むつ' => '18', '八戸' => '19', '秋田' => '20', '横手' => '21', '盛岡' => '22', '宮古' => '23', '大船渡' => '24', '仙台' => '25', '白石' => '26', '山形' => '27', '米沢' => '28', '酒田' => '29', '新庄' => '30', '福島' => '31', '小名浜' => '32', '若松' => '33', '静岡' => '34', '網代' => '35', '三島' => '36', '浜松' => '37', '名古屋' => '38', '豊橋' => '39', '岐阜' => '40', '高山' => '41', '津' => '42', '尾鷲' => '43', '富山' => '44', '伏木' => '45', '金沢' => '46', '輪島' => '47', '福井' => '48', '敦賀' => '49', '新潟' => '50', '長岡' => '51', '高田' => '52', '相川' => '53', '水戸' => '54', '土浦' => '55', '宇都宮' => '56', '大田原' => '57', '前橋' => '58', '水上' => '59', 'さいたま' => '60', '熊谷' => '61', '秩父' => '62', '東京' => '63', '大島' => '64', '八丈島' => '65', '父島' => '66', '千葉' => '67', '銚子' => '68', '館山' => '69', '横浜' => '70', '小田原' => '71', '長野' => '72', '松本' => '73', '飯田' => '74', '甲府' => '75', '河口湖' => '76', '大津' => '77', '彦根' => '78', '京都' => '79', '舞鶴' => '80', '大阪' => '81', '神戸' => '82', '豊岡' => '83', '奈良' => '84', '風屋' => '85', '和歌山' => '86', '潮岬' => '87', '岡山' => '88', '津山' => '89', '広島' => '90', '庄原' => '91', '松江' => '92', '浜田' => '93', '西郷' => '94', '鳥取' => '95', '米子' => '96', '下関' => '97', '山口' => '98', '柳井' => '99', '萩' => '100', '徳島' => '101', '日和佐' => '102', '高松' => '103', '松山' => '104', '新居浜' => '105', '宇和島' => '106', '高知' => '107', '室戸' => '108', '足摺' => '109', '福岡' => '110', '八幡' => '111', '飯塚' => '112', '久留米' => '113', '大分' => '114', '中津' => '115', '日田' => '116', '佐伯' => '117', '長崎' => '118', '佐世保' => '119', '厳原' => '120', '福江' => '121', '佐賀' => '122', '伊万里' => '123', '熊本' => '124', '阿蘇乙姫' => '125', '牛深' => '126', '人吉' => '127', '宮崎' => '128', '延岡' => '129', '都城' => '130', '高千穂' => '131', '鹿児島' => '132', '鹿屋' => '133', '西之表' => '134', '名瀬' => '135', '那覇' => '136', '名護' => '137', '久米島' => '138', '南大東島' => '139', '宮古島' => '140', '石垣島' => '141', '与那国島' => '142'); } if (is_int($name) && in_array($name, $cities)) return $name; return isset($cities[$name]) ? $cities[$name] : PEAR::raiseError('Invalid City'); } function _sendRequest($params) { $this->_errors = array(); $query = array(); foreach ($params as $k => $v) { $query[] = $k . '=' . urlencode($v); } $url = $this->_baseurl . implode('&', $query); $this->_lasturl = $url; $http = &new HTTP_Request($url); $http->addHeader('User-Agent', 'PEAR::Services_Livedoor_Weather/' . $this->getApiVersion()); $http->sendRequest(); if ($http->getResponseCode() != 200){ return PEAR::raiseError('Livedoor returned invalid HTTP response code ' . $http->getResponseCode()); } $result = $http->getResponseBody(); $xml = &new XML_Unserializer(); $xml->setOption(XML_UNSERIALIZER_OPTION_ATTRIBUTES_PARSE, true); $xml->unserialize($result, false); return $xml->getUnserializedData(); } } ?>