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]FAQ[/b]

  • If a path related error occurs when enabling cache, please ensure to add the final trailing slash to $path (e.g. ./folder/sub-folder/final-folder/).

  • Some users on WAMP could experiment a problem with cURL in local. First try your application online to check if your code works on a production server.

[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');

/**

  • 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 [email protected]

  • @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 */ class Feedburner {

    public $username = '';

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

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

    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