Mercurial > hg > ywww
annotate xml/doAmazonRequest.inc @ 35:86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
author | Charlie Root |
---|---|
date | Fri, 04 Jan 2019 12:54:12 -0500 |
parents | |
children | 633402a4995d |
rev | line source |
---|---|
35
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
1 <?php |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
2 |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
3 function doAmazonRequest($ext, $parameters, $try) |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
4 { |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
5 $public_key ="AKIAIHTNWC7L6LOUY4LQ"; |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
6 $private_key="zWQlIzndJDtXNfxEXH7K7YR7hzv3u77lOcqfqPde"; |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
7 $requestURI = $_SERVER['REQUEST_URI']; |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
8 $requestIP = $_SERVER['REMOTE_ADDR']; |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
9 $file_data=$ext; |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
10 ksort($parameters); |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
11 foreach ($parameters as $i=>$d) { |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
12 $file_data.='&'.$i.'='.$d; |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
13 } |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
14 //file_put_contents('/var/ywww/debug/phpDebug', |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
15 // "nai1: $requestIP $file_data\n",FILE_APPEND); |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
16 $gotit=0; |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
17 $url=aws_signed_request($ext,$parameters,$public_key,$private_key); |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
18 $crl = curl_init(); |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
19 $timeout = 5; |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
20 curl_setopt ($crl, CURLOPT_URL,$url); |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
21 curl_setopt ($crl, CURLOPT_ENCODING , "gzip"); |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
22 curl_setopt ($crl, CURLOPT_RETURNTRANSFER, 1); |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
23 curl_setopt ($crl, CURLOPT_CONNECTTIMEOUT, $timeout); |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
24 for ($i=1; $i<=$try; $i++) { |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
25 $semaphore = new SyncSemaphore("Amazon"); |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
26 $gotit = $semaphore->lock(1000); |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
27 if (!$gotit) { |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
28 file_put_contents('/var/ywww/debug/phpDebug', |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
29 "Got it: ".(int)$gotit." $requestIP 1\n",FILE_APPEND); |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
30 $gotit=$semaphore->lock(1000); |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
31 file_put_contents('/var/ywww/debug/phpDebug', |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
32 "Got it: ".(int)$gotit." $requestIP 1a\n",FILE_APPEND); |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
33 } |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
34 $output = curl_exec($crl); |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
35 //file_put_contents('/var/ywww/debug/phpDebug', |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
36 // "nai2: ".strlen($output)."\n",FILE_APPEND); |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
37 |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
38 curl_close($crl); |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
39 usleep(500000); |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
40 if ($gotit) { |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
41 $semaphore->unlock(); |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
42 } |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
43 else { |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
44 file_put_contents('/var/ywww/debug/phpDebug', |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
45 "W/o lock for $requestIP 1b\n",FILE_APPEND); |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
46 } |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
47 $mm=array(); |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
48 $xml = new SimpleXMLElement($output); |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
49 if (preg_match("/<Error>/",$output,$mm)) { |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
50 $resName=$xml->getName(); |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
51 $code=$xml->Error->Code; |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
52 if ($code) { |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
53 $message=$xml->Error->Message; |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
54 } |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
55 else { |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
56 $code=$xml->Items->Request->Errors->Error->Code; |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
57 $message=$xml->Items->Request->Errors->Error->Message; |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
58 } |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
59 file_put_contents('/var/ywww/debug/phpDebug',"Losing $i: ".$mm[0].", $resName, $code, $requestIP, $requestURI\n",FILE_APPEND); |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
60 if ($code!='RequestThrottled') { |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
61 file_put_contents('/var/ywww/debug/phpDebug',"message: $message\n". |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
62 print_r($parameters,TRUE)."\n",FILE_APPEND); |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
63 if ($code=="") { |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
64 file_put_contents('/var/ywww/debug/phpDebug',"error elt:\n$output\n",FILE_APPEND); |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
65 } |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
66 throw new Exception($code); |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
67 } |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
68 } |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
69 else { |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
70 return $xml; |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
71 } |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
72 usleep(200000); // Try to reduce throttling until we get a |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
73 // principled solution in place |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
74 } |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
75 throw new Exception("ThrottledRepeatedly"); |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
76 } |
86f79bc1d142
refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff
changeset
|
77 ?> |