Alexa Ranking Script

Basically what it does is make Alexa think that all the visitors to your site have the toolbar installed. I just installed it in my sites tonight so I'll keep you updated on how it works. I welcome any comments.

The Alexa toolbar itself generates a standard HTTP GET request. We can do the same by inserting a <IMG> tag with the resulting url as the source. Alexa actually returns XML markup as a response, but the contents are irrelevent for this purpose; we just want to trigger the logic.

There are a bunch of query values in the URL; some are obvious, others... not so much.

The keys to getting this to work is to start page generation with:

----------------------
session_start();
----------------------

If your using persistant sessions, you probably already got this.

Next, create a new function somewhere in your code; if you have a global functions file, it'd probably go there. otherwise, you can put it right below the session_start() value above.

----------------------
function alexa() {
$domain = "http://data.alexa.com";
$keylength = 14; // the resulting length of the keyid. 14 and 15 were seen in the wild.

// session_start() must have already been set. If so, this will ensure that each visitor maintains the same keyid throughout the entire visit.
if (isset($_SESSION['alexa_keyid'])) {
$keyid = $_SESSION['alexa_keyid'];
} else {
$keyid = substr(str_shuffle("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"),0,$keylength);
$_SESSION['alexa_keyid'] = $keyid;
}

$cli = "10"; // ???
$dat = "snba"; // ???
$ver = "7.2"; // version number of toolbar?
$cdt = "alx_vw"; // ???
$wid = rand(0,32767); // appears to be a random integer initiated when the browser starts.
$act = "00000000000"; // ???
$ssarray = array ("800x800", "1024x768", "1280x768", "1280x800",
"1280x1024", "1600x1200", "1680x1050", "1920x1200");
shuffle($ssarray);
$ss = $ssarray[0]; // browser screensize. Resulting value is chosen at random from an array of values.
$bw = "1523"; // bandwidth? probably used in calculating metrics related to visitor connection speeds (noted values are close to common
// connection speeds like 768k, 1mb, 1.5mb, etc.)
$t = "0"; // ???
$ttl = rand(200,1000); // time-to-live? probably used in calculating average load times
$vis = "1"; // ???
$rq = rand(15,80); // appears to increment with each toolbar request
$url = "http://<<<PUT YOUR DOMAIN HERE>>>/";

$params="/data/".$keyid."?cli=".$cli."&dat=".$dat."&ver=".$ver."&cdt=".$cdt."&wid=".$wid."&act=".$act."&ss=".$ss."&bw=".$bw."&t=".$t."&ttl=".$ttl."&vis=".$vis."&rq=".$rq."&url=".$url;

return $domain.$params;
}
---------------------

Finally, insert somewhere on your page the following:

---------------------
<? echo "<img src='".alexa()."' height='0' width='0'>"; ?>
---------------------

That will trigger the actual event.

Somebody else can probably clean and extend this code up better than I. This was a quick hack-togeather in about 30 minutes. If i'm on to something, it could also warrant a better explanation.

0 comments:

Post a Comment