Custom feedburner counter
Sometimes badges just don’t go very well with the design of a web page. So while during the overhaul of this site I was thinking of creating my own custom feedburner counter. You can easily use the feedburner awareness API with some AJAX to create your own. In the end I opted out because you lose the trust and recognition value of such a well known badge. But maybe it’s something for you.
Doing a GET you get the result as XML.
telnet api.feedburner.com 80
GET /awareness/1.0/GetFeedData?uri=https://vafer.org/blog/feed
<?xml version="1.0" encoding="UTF-8"?>
<rsp stat="ok">
<!--This information is part of the FeedBurner Awareness API. If you want to hide this information, you may do so via your FeedBurner Account.-->
<feed id="351656" uri="tcurdt">
<entry date="2008-05-02" circulation="202" hits="1178" reach="149" />
</feed>
</rsp>
So is needed is to extract the information from an AJAX request. Just create a “feedburner.js” javascript file
var xmlHttp
function loadReaders(feed) {
document.getElementById("readers").innerHTML = "";
xmlHttp = GetXmlHttpObject();
if (xmlHttp == null) {
alert ("Your browser does not support AJAX!");
return;
}
var url = "http://api.feedburner.com";
url = url + "/awareness/1.0/GetFeedData?uri=" + feed;
xmlHttp.onreadystatechange = readersReceived;
xmlHttp.open("GET", url, true);
xmlHttp.send(null);
}
function readersReceived() {
if (xmlHttp.readyState == 4) {
var s = xmlHttp.responseText;
var start = s.indexOf('circulation="') + 13;
var stop = s.indexOf('"', start);
var readers = s.substring(start, stop);
document.getElementById("readers").innerHTML = readers;
}
}
function GetXmlHttpObject() {
var xmlHttp=null;
try { // Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
} catch (e) { // Internet Explorer
try {
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlHttp;
}
And then load and call it from the HTML page.
<html>
<head>
<script src="feedburner.js" type="text/javascript"></script>
</head>
<body onload="loadReaders('https://vafer.org/blog/feed')">
<p>
Readers: <span id="readers"></span>
</p>
</body>
</html>
While this works fine in Safari many browsers choke on the fact that the we try to connect to a web service that is outside of the page’s domain. In order to work around this we can proxy the request. You can probably even use mod_proxy for this. But a simple php page does work fine as well.
<?php
define('HOSTNAME', 'http://api.feedburner.com');
$array = explode('/feedburner.php', $_SERVER['REQUEST_URI']);
$path = $array[1];
$url = HOSTNAME.$path;
$session = curl_init($url);
curl_setopt($session, CURLOPT_HEADER, false);
curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
$xml = curl_exec($session);
header("Content-Type: text/xml");
echo $xml;
curl_close($session);
?>
Of course then you need to change the javascript to use the web service in your domain
var url = "http://yourdomain.com/feedburner.php";
url = url + "/awareness/1.0/GetFeedData?uri=" + feed;


