Summary
This is a very simple, procedural (non-Object Oriented Programing) function for making API calls to Amazon's Web Information Services interface. No need to over-complicate these requests with hundreds of lines of OOP code.
You need to have an account with Amazon Web Services
The Code
<?
$alexa_xml = alexa_webstats("http://www.whatsmyip.org");
$xml = simplexml_load_string($alexa_xml,"SimpleXMLElement",0,"http://awis.amazonaws.com/doc/2005-07-11");
$alexa_stats["a_rank"] = $xml->Response->UrlInfoResult->Alexa->TrafficData->Rank;
$alexa_stats["a_speed"] = $xml->Response->UrlInfoResult->Alexa->ContentData->Speed->MedianLoadTime;
$alexa_stats["a_percentile"] = $xml->Response->UrlInfoResult->Alexa->ContentData->Speed->Percentile;
$alexa_stats["a_inlinks"] = $xml->Response->UrlInfoResult->Alexa->ContentData->LinksInCount;
print_r($alexa_stats);
function alexa_webstats($q)
{
$accessKeyId = ""; // You need to put your key here
$secretAccessKey = ""; // And your other key here
$ActionName = "UrlInfo";
$ResponseGroupName = rawurlencode("Rank,Speed,LinksInCount");
$ServiceHost = "awis.amazonaws.com";
$ServiceEndpoint = "awis.us-west-1.amazonaws.com";
$NumReturn = 10;
$StartNum = 1;
$ServiceURI = "/api";
$ServiceRegion = "us-west-1";
$ServiceName = "awis";
$site = rawurlencode($q);
$now = time();
$amzDate = gmdate("Ymd\THis\Z", $now);
$dateStamp = gmdate("Ymd", $now);
$canonicalQuery = "Action=$ActionName&Count=$NumReturn&ResponseGroup=$ResponseGroupName&Start=$StartNum&Url=$site";
$canonicalHeaders = "host:$ServiceEndpoint\nx-amz-date:$amzDate\n";
$signedHeaders = "host;x-amz-date";
$payloadHash = hash("sha256", "");
$canonicalRequest = "GET\n$ServiceURI\n$canonicalQuery\n$canonicalHeaders\n$signedHeaders\n$payloadHash";
$algorithm = "AWS4-HMAC-SHA256";
$credentialScope = "$dateStamp/$ServiceRegion/$ServiceName/aws4_request";
$stringToSign = "$algorithm\n$amzDate\n$credentialScope\n" . hash("sha256", $canonicalRequest);
$kSecret = "AWS4$secretAccessKey";
$kDate = hash_hmac("sha256", $dateStamp, $kSecret, true);
$kRegion = hash_hmac("sha256", $ServiceRegion, $kDate, true);
$kService = hash_hmac("sha256", $ServiceName, $kRegion, true);
$signingKey = hash_hmac("sha256", "aws4_request", $kService, true);
$signature = hash_hmac("sha256", $stringToSign, $signingKey);
$authorizationHeader = "$algorithm Credential=$accessKeyId/$credentialScope, SignedHeaders=$signedHeaders, Signature=$signature";
$url = "https://$ServiceHost$ServiceURI?$canonicalQuery";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_TIMEOUT, 4);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Accept: application/xml","Content-Type: application/xml","X-Amz-Date: $amzDate","Authorization: $authorizationHeader"));
$result = curl_exec($ch);
}
?>