108 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			108 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
/* vim: set expandtab tabstop=4 shiftwidth=4: */
 | 
						|
// +----------------------------------------------------------------------+
 | 
						|
// | PHP version 4                                                        |
 | 
						|
// +----------------------------------------------------------------------+
 | 
						|
// | Copyright (c) 1997-2003 The PHP Group                                |
 | 
						|
// +----------------------------------------------------------------------+
 | 
						|
// | This source file is subject to version 2.0 of the PHP license,       |
 | 
						|
// | that is bundled with this package in the file LICENSE, and is        |
 | 
						|
// | available through the world-wide-web at                              |
 | 
						|
// | http://www.php.net/license/2_02.txt.                                 |
 | 
						|
// | If you did not receive a copy of the PHP license and are unable to   |
 | 
						|
// | obtain it through the world-wide-web, please send a note to          |
 | 
						|
// | license@php.net so we can mail you a copy immediately.               |
 | 
						|
// +----------------------------------------------------------------------+
 | 
						|
// | Author: Marshall Roch <marshall@exclupen.com>                        |
 | 
						|
// +----------------------------------------------------------------------+
 | 
						|
//
 | 
						|
// $Id: Rates_ECB.php,v 1.2 2005/06/23 07:44:12 cross Exp $
 | 
						|
 | 
						|
/**
 | 
						|
 * Exchange rate driver - European Central Bank
 | 
						|
 *
 | 
						|
 * The reference rates are based on the regular daily concertation
 | 
						|
 * procedure between central banks within and outside the European System
 | 
						|
 * of Central Banks, which normally takes place at 2.15 p.m. ECB time (CET).
 | 
						|
 * The reference exchange rates are published both by electronic market
 | 
						|
 * information providers and on the ECB's website shortly after the
 | 
						|
 * concertation procedure has been completed.
 | 
						|
 *
 | 
						|
 * @link http://www.ecb.int/stats/eurofxref/eurofxref-xml.html About the feed
 | 
						|
 * @link http://www.ecb.int/copy/copy01.htm IMPORTANT COPYRIGHT INFORMATION
 | 
						|
 *
 | 
						|
 * @author Marshall Roch <marshall@exclupen.com>
 | 
						|
 * @copyright Copyright 2003 Marshall Roch
 | 
						|
 * @license http://www.php.net/license/2_02.txt PHP License 2.0
 | 
						|
 * @package Services_ExchangeRates
 | 
						|
 */
 | 
						|
 | 
						|
/**
 | 
						|
 * Include common functions to handle cache and fetch the file from the server
 | 
						|
 */
 | 
						|
require_once 'Services/ExchangeRates/Common.php';
 | 
						|
 | 
						|
/**
 | 
						|
 * European Central Bank Exchange Rate Driver
 | 
						|
 *
 | 
						|
 * @package Services_ExchangeRates
 | 
						|
 */
 | 
						|
class Services_ExchangeRates_Rates_ECB extends Services_ExchangeRates_Common {
 | 
						|
 | 
						|
   /**
 | 
						|
    * URL of XML feed
 | 
						|
    * @access private
 | 
						|
    * @var string
 | 
						|
    */
 | 
						|
    var $_feedXMLUrl = 'http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml';
 | 
						|
 | 
						|
   /**
 | 
						|
    * Downloads exchange rates in terms of the Euro from the European Central Bank. This
 | 
						|
    * information is updated daily, and is cached by default for 1 hour.
 | 
						|
    *
 | 
						|
    * Returns a multi-dimensional array containing:
 | 
						|
    * 'rates' => associative array of currency codes to exchange rates
 | 
						|
    * 'source' => URL of feed
 | 
						|
    * 'date' => date feed last updated, pulled from the feed (more reliable than file mod time)
 | 
						|
    *
 | 
						|
    * @link http://www.ecb.int/stats/eurofxref/ HTML version
 | 
						|
    * @link http://www.ecb.int/stats/eurofxref/eurofxref-daily.xml XML version
 | 
						|
    *
 | 
						|
    * @param int Length of time to cache (in seconds)
 | 
						|
    * @return array Multi-dimensional array
 | 
						|
    */
 | 
						|
    function retrieve($cacheLength, $cacheDir) {
 | 
						|
 | 
						|
        // IMPORTANT: defines Euro mapping.  Without this, you can't convert
 | 
						|
        // to or from the Euro!
 | 
						|
		$return['date'] = NULL;
 | 
						|
        $return['rates'] = array('EUR' => 1.0);
 | 
						|
 | 
						|
        $return['source'] = $this->_feedXMLUrl;
 | 
						|
 | 
						|
        // retrieve the feed from the server or cache
 | 
						|
        $root = $this->retrieveXML($this->_feedXMLUrl, $cacheLength, $cacheDir);
 | 
						|
 | 
						|
		if ( is_object( $root ) ) {
 | 
						|
			// set date published
 | 
						|
			$return['date'] = $root->children[5]->children[1]->attributes['time'];
 | 
						|
 | 
						|
			// get down to array of exchange rates
 | 
						|
			$xrates = $root->children[5]->children[1]->children;
 | 
						|
 | 
						|
			// loop through and put them into an array
 | 
						|
			foreach ($xrates as $rateinfo) {
 | 
						|
				if ($rateinfo->name == 'Cube') {
 | 
						|
					$return['rates'][$rateinfo->attributes['currency']] = $rateinfo->attributes['rate'];
 | 
						|
				}
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
        return $return;
 | 
						|
 | 
						|
    }
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
?>
 |