-
Notifications
You must be signed in to change notification settings - Fork 0
weather.com
<? /**
- Weather Script for CodeIgniter
- @author Kevin Burton [CoDeR]
- @package CodeIgniter 1.5.x
- @subpackage Libraries
- @version 1.1
- Thanks to Nick Schaffner from 53x11.com for the script.
- This has been modified and ported to CodeIgniter 1.5.4
- REQUIREMENTS
-
- URL and DATABSE must be loaded.
-
- Set the below paramters
-
- By requirements of the weather.com API, you can only refresh the weather a minimum of 30 minutes.
- You can set this to more if you want by changing the cache_time value.
-
- If you do not have the table setup already, the constructor will do it for you automatically.
-
- You will need to register with weather.com and it will give you a folder of icons you use with
- the system. This system will output the filename for it.
-
- ENJOY!
- USAGE
- <?
- $config['zipcode'] = 'XXXXXXX';
- $config['partner'] = 'XXXXXXX';
- $config['license'] = 'XXXXXXX';
- $this->load->library('weather', $config);
- ?>
- Get the array by calling: $this->weather->get_weather();
- To spit out the contents of the array, use: $this->weather->trace_array();
- OR
- You can access the variables individually instead of through the get_weather() function
- Example: $this->weather->sunr; // Sunrise.
- or $this->weather->icon; // the icon name
*/
class Weather {
/* You must modify these variable to match your own */ var $zipcode = 'XXXXXX'; var $partner = 'XXXXXXXXX'; var $license = 'XXXXXXXXXXXXX'; var $wfile = './assets/weather/cache/weather.xml'; var $units = 'm'; var $table_name = 'weather'; var $site_name = 'local';
/* DO NOT MODIFY below: */ var $xmlserver = 'http://xoap.weather.com/weather/local/'; var $CI; // declare holder for CodeIgniter var $cache_time = 30; // 30 minutes requied for cache var $data_array = array();
/**
- PHP4 Constructor
- @return Weather */ function Weather($params = array()) { $this->CI =& get_instance(); // load instance of CodeIgniter $this->CI->load->helper('file'); // load File Helper functions $this->initialize($params); }
/**
- Class Initialization
- @access public
- @param array $params
- @return void */ function initialize($params = array()) { if( count($params) > 0 ) { foreach ($params as $key=>$value) { $this->$key = $value; } } $this->_check_install(); $this->_setURL(); $this->_requestXML(); }
/**
- Trace method... Array and Object Friendly viewer
- @param unknown_type $obj
- @param unknown_type $die
*/
function trace($obj, $die=false)
{
print("
"); print_r($obj); print("");
if($die) die(); }
/**
- Check Installation
- @access private
- @return void */ function _check_install() { //$this->trace($this->CI, true);
if (!$this->CI->db->table_exists($this->table_name))
{
$sqlstmnt = "
CREATE TABLE {$this->table_name} (
site varchar(64) NOT NULL default '{$this->site_name}',
last_request timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
tstamp int(16) NOT NULL default '0'
) ENGINE=MyISAM DEFAULT CHARSET=latin1;";
$this->CI->db->query($sqlstmnt);
}
}
/**
- Set URL
- @access private
- @return void / function _setURL() { $this->xmlserver = $this->xmlserver.$this->zipcode."?link=xoap&cc;=∥={$this->partner}&key;={$this->license}&unit;={$this->units}"; }
/**
- Request the XML for the weather.com server
- @access private
- @param unknown_type $zipcode
- @return void / function _requestXML() { $query = $this->CI->db->query("SELECT tstamp FROM {$this->table_name} WHERE site='{$this->site_name}' LIMIT 0,1"); if($query->num_rows()==0) { $this->seek(true); return; } else { $row = $query->row_array(); if( (time()-$row['tstamp']) > (60$this->cache_time) ) { // get a fresh copy of the XML; $this->seek(true); return; } else { $this->seek(false); return; } } }
/**
- Grab the data....
- @access private
- @param bool $fromWeatherCom
- @return void */ function seek($fromWeatherCom = false) { $xml_parser = xml_parser_create();
if($fromWeatherCom==true) { $data = implode('', file($this->xmlserver)); write_file($this->wfile, $data); } else { $data = read_file($this->wfile); }
xml_parse_into_struct($xml_parser, $data, $vals, $index); xml_parser_free($xml_parser);
$t = true;
foreach ($vals as $row) { if( isset($row['value']) ) {
if( $row['level']==3 )
{
$tag = strtolower($row['tag']);
$value = $row['value'];
$this->$tag = $value;
$this->data_array[$tag] = $value;
}
} }
$query = $this->CI->db->query("SELECT site FROM {$this->table_name} WHERE site='{$this->site_name}'"); if( $query->num_rows()==0) { $this->CI->db->query("INSERT INTO {$this->table_name} (site, tstamp) VALUES ('{$this->site_name}',".time().")"); } else { $this->CI->db->query("UPDATE {$this->table_name} SET tstamp='".time()."' WHERE site='{$this->site_name}'"); } }
/**
- Spit out the data_array
*/ function trace_array() { $this->trace($this->data_array, true); }
/**
- Grab all the data....
- @return array */ function get_weather() { return $this->data_array; } } ?>
- Original author: Derek Jones
- How to extend helpers: See User Guide
- Modified by: Thomas Stapleton (id, classes, selected country option and all option)
- Modified by: Bradley De-Lar (construct, setLayout example)