Login   Register  
PHP Classes
elePHPant
Icontem

File: XML_currency_reader.class.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Cristian Navalici  >  XML Currency Reader  >  XML_currency_reader.class.php  >  Download  
File: XML_currency_reader.class.php
Role: Class source
Content type: text/plain
Description: Abstract class to read xml content.
Class: XML Currency Reader
Retrieve currency exchange data from XML files
Author: By
Last change: Check for the connection before doing anything else.
Date: 5 years ago
Size: 4,654 bytes
 

Contents

Class file image Download
<?php
/**
 * XML CURRENCY READER CLASS
 * 
 * this class is intended to provide general support to read the xml with currencies
 * from a national bank site
 *
 * @author Cristian Năvălici {@link http://www.lemonsoftware.eu} lemonsoftware [at] gmail [.] com
 * @license http://opensource.org/licenses/gpl-license.php GNU Public License
 * @version 1.0 26 Oct 2008
 * 
 */

abstract class XML_currency_reader {

    
/**
    * the extended classes must implement these methods
    */
    
abstract protected function parse_rate_contents($content$currency 'EUR');
    abstract protected function 
parse_domdoc();

    
/**
    * xml file on the BNR site
    */
    
protected $xmlpath;

    
/**
    * if not enable we use curl functions; otherwise file_get_contents
    */
    
protected $allow_url_fopen;

    
/**
    * saves the xml content from get_xml_content()
    */
    
protected $xml_content;

    
/**
    * saves the DOMDocument from DOMconnector()
    */
    
protected $domdoc;


    
// ----------------------------------------------------------------------------
    /**
    * CONSTRUCTOR
    *
    * 
    * @param none
    * @return void
    */
    
public function __construct() {
        
$this->allow_url_fopen ini_get('allow_url_fopen');
    }


    
// ----------------------------------------------------------------------------
    /**
    * PARSE XML
    *
    * this calls other methods in order to get the content, make a DOMDocument from it
    * and parse it
    * 
    * @param none
    * @return array of arrays (parse_domdoc return value) | FALSE
    */
    
public function parse_xml() {
        
// gets the xml content
        
$this->get_xml_content();

        
// check if the connection was available
        
if ( $this->xml_content ) {
            
// creates a DOMDocument
            
$this->DOMconnector();

            
// parse the DOMDocument
            
return $this->parse_domdoc();
        } else return 
FALSE;
    }
    
// ----------------------------------------------------------------------------
    /**
    * GET THE XML CONTENT
    *
    * retrieve the remote file content using any of the methods available
    * saves it into a class var
    * 
    * @param none
    * @return void
    */
    
protected function get_xml_content() {
        try {
            if ( 
$this->allow_url_fopen ) {
                
// file_get_contents approach
                
$xml_content file_get_contents($this->xmlpath); 
            } else {
                
// CURL approach
                // make sure curl is installed
                
if ( function_exists('curl_init') ) {
                    
// initialize a new curl resource
                    
$ch curl_init();

                    
// set the url to fetch
                    
curl_setopt($chCURLOPT_URL$this->xmlpath);

                    
// don't give me the headers just the content
                    
curl_setopt($chCURLOPT_HEADER0);

                    
// return the value instead of printing the response to browser
                    
curl_setopt($chCURLOPT_RETURNTRANSFER1);

                    
$xml_content curl_exec($ch);

                    
// remember to always close the session and free all resources
                    
curl_close($ch);
                } else {
                    throw new 
Exception('Curl library is not installed; modify allow_url_fopen to 1 in php.ini');
                }
            }

            
$this->xml_content $xml_content;
        } catch (
Exception $e) {
            echo 
'BNR_reader->get_xml_content: ' .$e->getMessage(); exit();
        }
    }


    
// ----------------------------------------------------------------------------
    /**
    * CONNECTS TO DOM DOCUMENT
    *
    * creates a DOMDocument using the class var content (filled up with get_xml_content())
    * 
    * @param none
    * @return void
    */
    
protected function DOMconnector() {
        try {
            if ( !
$this->xml_content ) {
                throw new 
Exception('No content. Empty page or get_xml_content must be run before.');
            }

            
$dom = new DOMDocument();
            
// this should stay before load() to format output otherwise it doesn't

            
$dom->preserveWhiteSpace false;
            
$dom->loadXML($this->xml_content);
            
$dom->formatOutput TRUE;

            
$this->domdoc $dom;
        } catch (
Exception $e) {
            echo 
'BNR_reader->DOMconnector: ' .$e->getMessage();
        }
    }

// class
?>