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: 6 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($ch, CURLOPT_URL, $this->xmlpath);

                   
// don't give me the headers just the content
                   
curl_setopt($ch, CURLOPT_HEADER, 0);

                   
// return the value instead of printing the response to browser
                   
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

                   
$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
?>