]> Joshua Wise's Git repositories - patchfork.git/blobdiff - player/aws_signed_request.php
Update support for Amazon coverart grabbing (patch from Václav Nováček <waclaw66...
[patchfork.git] / player / aws_signed_request.php
diff --git a/player/aws_signed_request.php b/player/aws_signed_request.php
new file mode 100644 (file)
index 0000000..5c685a9
--- /dev/null
@@ -0,0 +1,95 @@
+<?php
+
+function aws_signed_request($region, $params, $public_key, $private_key)
+{
+    /*
+    Copyright (c) 2009 Ulrich Mierendorff
+
+    Permission is hereby granted, free of charge, to any person obtaining a
+    copy of this software and associated documentation files (the "Software"),
+    to deal in the Software without restriction, including without limitation
+    the rights to use, copy, modify, merge, publish, distribute, sublicense,
+    and/or sell copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in
+    all copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+    THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+    DEALINGS IN THE SOFTWARE.
+    */
+    
+    /*
+    Parameters:
+        $region - the Amazon(r) region (ca,com,co.uk,de,fr,jp)
+        $params - an array of parameters, eg. array("Operation"=>"ItemLookup",
+                        "ItemId"=>"B000X9FLKM", "ResponseGroup"=>"Small")
+        $public_key - your "Access Key ID"
+        $private_key - your "Secret Access Key"
+    */
+
+    // some paramters
+    $method = "GET";
+    $host = "ecs.amazonaws.".$region;
+    $uri = "/onca/xml";
+    
+    // additional parameters
+    $params["Service"] = "AWSECommerceService";
+    $params["AWSAccessKeyId"] = $public_key;
+    // GMT timestamp
+    $params["Timestamp"] = gmdate("Y-m-d\TH:i:s\Z");
+    // API version
+    $params["Version"] = "2009-03-31";
+    
+    // sort the parameters
+    ksort($params);
+    
+    // create the canonicalized query
+    $canonicalized_query = array();
+    foreach ($params as $param=>$value)
+    {
+        $param = str_replace("%7E", "~", rawurlencode($param));
+        $value = str_replace("%7E", "~", rawurlencode($value));
+        $canonicalized_query[] = $param."=".$value;
+    }
+    $canonicalized_query = implode("&", $canonicalized_query);
+    
+    // create the string to sign
+    $string_to_sign = $method."\n".$host."\n".$uri."\n".$canonicalized_query;
+    
+    // calculate HMAC with SHA256 and base64-encoding
+    $signature = base64_encode(hash_hmac("sha256", $string_to_sign, $private_key, True));
+    
+    // encode the signature for the request
+    $signature = str_replace("%7E", "~", rawurlencode($signature));
+    
+    // create request
+    $request = "http://".$host.$uri."?".$canonicalized_query."&Signature=".$signature;
+    
+    // do request
+    $response = @file_get_contents($request);
+    
+    if ($response === False)
+    {
+        return False;
+    }
+    else
+    {
+        // parse XML
+        $pxml = simplexml_load_string($response);
+        if ($pxml === False)
+        {
+            return False; // no xml
+        }
+        else
+        {
+            return $pxml;
+        }
+    }
+}
+?>
This page took 0.025539 seconds and 4 git commands to generate.