Skip to content
World Wide Web Server edited this page Jul 4, 2012 · 11 revisions

Category:Contributions::Libraries::Networking

This library provides a simple way to get the number of subscribers of a FeedBurner account through the FeedBruner Awareness API. The library provides also a file based caching system since an extra HTTP request is needed to get the FeedBurner account data.

The library is also available as a PHP5 class for non CodeIgniter applications.

Licensed under [url=http://www.gnu.org/licenses/lgpl.html/]GNU Lesser General Public License[/url].

Please note that this class requires PHP 5.1.0 with SimpleXML and libxml and the cURL extension.

[b]For more details, support, feature request or packaged downloads please see[/b] the [url=http://www.kromack.com/feedburner-library-for-php-and-codeigniter/]FeedBurner Library for PHP and CodeIgniter[/url] dedicated page on my blog.

[b]How to use :[/b]

[code] <?php

class Test extends Controller {

function Test()
{
    parent::Controller();    
}

function index()
{
    $config = array();
    $config['username']        = 'your_feed_url_username';
    $config['cache']           = TRUE;
    $config['path']            = './tmp/';
    $config['filename']        = 'feedburner.xml';
    $config['ttl']             = 60;

    $this->load->library('feedburner', $config);

    echo $this->feedburner->getCirculation();

}

}

/* End of file test.php / / Location: ./system/application/controllers/test.php */ [/code]

[b]Library's code (system/application/libraries/Feedburner.php:[/b]

[code] <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Feedburner {

public $username    = '';    

public $cache        = FALSE;
public $path        = './';
public $filename    = 'feedburner.xml';
public $ttl            = 60;    

protected $response = '';
protected $xml        = '';

/**
 * Please visit http://www.kromack.com/feedburner-library-for-php-and-codeigniter for full details and support about this library.
 * 
 * Please specify your FeedBurner username, for example http://feeds2.feedburner.com/my_blog, your username is "my_blog".
 * 
 * This class include a file based caching system since an extra HTTP request is required to retrieve FeedBurner account information.
 * 
 * Using cache is more than 5 time faster.
 * 
 * In order to activate the caching system, please set $cache to TRUE and specify the $path (and optionally the $filename to use)
 * where the caching file should be written.
 * 
 * Please ensure to add the final trailing slash to $path (e.g. ./folder/sub-folder/final-folder/).
 * 
 * You can also specify the time to live (in minutes) of the stored xml cached file, for example, set to 60 to keep alive the stored response
 * for one hour.
 *
 * @author Samuel Sanchez <ikromack@gmail.com>
 * @link http://www.kromack.com/feedburner-library-for-php-and-codeigniter
 * @license http://www.gnu.org/copyleft/lesser.html
 * @copyright Copyright (c) 2009, Samuel Sanchez
 * @version 1.0 
 * @param string $username
 * @param bool $cache
 * @param string $path
 * @param string $filename
 * @param int $ttl
 */
function Feedburner($props = array()) {
    
    if (count($props) > 0)
    {
        $this->initialize($props);
    }
    
    log_message('debug', "Feedburner Class Initialized");
                        
}

/**
 * Initialize preferences
 *
 * @access    public
 * @param    array
 * @return    void
 * @package CodeIgniter
 */    
function initialize($config = array())
{
    $defaults = array(
                        'username'            => '',
                        'cache'                => FALSE,
                        'path'                => './',
                        'filename'            => 'feedburner.xml',
                        'ttl'                => 60,
                        'response'            => '',
                        'xml'                => ''
                    );    


    foreach ($defaults as $key => $val)
    {
        if (isset($config[$key]))
        {
            $method = 'set_'.$key;
            if (method_exists($this, $method))
            {
                $this->$method($config[$key]);
            }
            else
            {
                $this->$key = $config[$key];
            }            
        }
        else
        {
            $this->$key = $val;
        }
    }
}


function getData() {
    
    $url = 'https://feedburner.google.com/api/awareness/1.0/GetFeedData?uri=' . $this->username;
    
    $ch = curl_init();
    
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
    
    $this->response = curl_exec&#40;$ch&#41;;
    
    curl_close($ch);
    
}

function setData() {
    
    if($this->cache === TRUE) {
        $this->manageCache();
    } else {
        
        if(empty($this->xml)) {

            $this->getData();
            $this->xml = new SimpleXMLElement($this->response);                
        }                
    }
}

function manageCache() {
        
    if(!is_dir($this->path)) {
        die('The path you specified to the FeedBurner library is not valid, please check if the directory exists before enable caching.');
    }
    
    if(!is_writable($this->path)) {
        die('The path you specified to the FeedBurner library is not writable, please check its permissions or CHMOD 777 it.');
    }        
    
    if(file_exists($this->path . $this->filename)) {
        
        if(strlen(file_get_contents&#40;$this->path . $this->filename&#41;) > 0) {
            
            //The file must content valid XML datas but we have to prevent errors reporting
            if($xml = simplexml_load_file&#40;$this->path . $this->filename,null, LIBXML_NOERROR&#41;) {
                
                $this->xml = $xml;
                
                $ttl = $this->xml->data->attributes();
                $ttl = $ttl[0];
                
                $interval = (time() - $ttl) / 60;

                //Refreshing the XML stored file
                if($interval > $this->ttl) {
                    $this->setCache();
                }
                
            } else {
                $this->setCache();
            }
            
        } else {
            $this->setCache();
        }
    } else {
        $this->setCache();
    }
}

function setCache() {
    
    $this->getData();
    $this->xml = new SimpleXMLElement($this->response);    
    
    //We adding a timestamp to the response in order to calculate the time to live of the cached response    
    $data = $this->xml->addChild('data');
    $data->addAttribute('timestamp', time());
    
    $handle = fopen&#40;$this->path . $this->filename, 'w+'&#41;;
    fwrite($handle, $this->xml->asXML());                    
}

function getCirculation() {
    
    $this->setData();
    
    return $this->xml->feed->entry['circulation'];

}    

}

?> [/code]

Clone this wiki locally