accessID = $accessID; $this->secretKey = $secretKey; } private function getSecretKey() { return $this->secretKey; } private function getAccessID() { return $this->accessID; } public function setDefaultImageUrl($url) { $this->defaultImageUrl = $url; } public function getDefaultImageUrl() { return $this->defaultImageUrl; } private function setLastImageUrl($url) { $this->lastImageUrl = $url; } public function getLastImageUrl() { return $this->lastImageUrl; } public function createThumbnail($url, $size = self::THUMBNAIL_SIZE_SMALL) { $ts = $this->generateTimestamp(); $request_url = "http://ast.amazonaws.com/xino/?" . "Service=". "AlexaSiteThumbnail" . "&Action=". "Thumbnail" . "&AWSAccessKeyId=". $this->getAccessID() . "&Timestamp=" . urlencode($ts) . "&Signature=" . urlencode ($this->calculateRFC2104HMAC("AlexaSiteThumbnail" . "Thumbnail" . $ts, $this->getSecretKey())) . "&Size=" . $size . "&Url=" . $url; $result = $this->getHTTPResult($request_url); #echo nl2br(htmlentities($result)); $response_doc = new DOMDocument(); $response_doc->loadXML($result); $thumbnail = $response_doc->getElementsByTagName("Thumbnail")->item(0); if ($thumbnail != NULL) { if ($thumbnail->getAttribute("Exists") == "true") { $this->setLastImageUrl($thumbnail->firstChild->nodeValue); return true; } else { if ($this->getDefaultImageUrl()) { $this->setLastImageUrl($this->getDefaultImageUrl()); } else { $this->setLastImageUrl($thumbnail->firstChild->nodeValue); } return false; } } throw new Exception('Error while creating the image...'); } private function generateTimestamp () { return gmdate("Y-m-d\TH:i:s.\\0\\0\\0\\Z", time()); } private function calculateRFC2104HMAC ($data, $key) { return base64_encode ( pack("H*", sha1((str_pad($key, 64, chr(0x00)) ^(str_repeat(chr(0x5c), 64))) . pack("H*", sha1((str_pad($key, 64, chr(0x00)) ^(str_repeat(chr(0x36), 64))) . $data)))) ); } private function getHTTPResult($url) { $ch = curl_init($url); curl_setopt($ch, CURLOPT_TIMEOUT, $this->HTTPRequestTimeout); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $result = curl_exec($ch); if (curl_errno($ch)) { throw new Exception("HTTP Request failed."); } curl_close($ch); return $result; } }