annotate xml/doAmazonRequest.inc @ 38:c24ae74bf6d5

pass char for log lines in to doAmazonRequest
author Charlie Root
date Fri, 04 Jan 2019 18:02:20 -0500
parents 633402a4995d
children dbc006408d2b
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
38
c24ae74bf6d5 pass char for log lines in to doAmazonRequest
Charlie Root
parents: 37
diff changeset
3 function doAmazonRequest($ext, $parameters, $try, $dbl='x')
35
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 for ($i=1; $i<=$try; $i++) {
37
633402a4995d try to fix a common lookup error
Charlie Root
parents: 35
diff changeset
19 $crl = curl_init();
633402a4995d try to fix a common lookup error
Charlie Root
parents: 35
diff changeset
20 $timeout = 5;
633402a4995d try to fix a common lookup error
Charlie Root
parents: 35
diff changeset
21 curl_setopt ($crl, CURLOPT_URL,$url);
633402a4995d try to fix a common lookup error
Charlie Root
parents: 35
diff changeset
22 curl_setopt ($crl, CURLOPT_ENCODING , "gzip");
633402a4995d try to fix a common lookup error
Charlie Root
parents: 35
diff changeset
23 curl_setopt ($crl, CURLOPT_RETURNTRANSFER, 1);
633402a4995d try to fix a common lookup error
Charlie Root
parents: 35
diff changeset
24 curl_setopt ($crl, CURLOPT_CONNECTTIMEOUT, $timeout);
35
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',
38
c24ae74bf6d5 pass char for log lines in to doAmazonRequest
Charlie Root
parents: 37
diff changeset
29 "Got it: ".(int)$gotit." $requestIP $dbl\n",FILE_APPEND);
35
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',
38
c24ae74bf6d5 pass char for log lines in to doAmazonRequest
Charlie Root
parents: 37
diff changeset
32 "Got it: ".(int)$gotit." $requestIP $dbl"."a\n",FILE_APPEND);
35
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',
38
c24ae74bf6d5 pass char for log lines in to doAmazonRequest
Charlie Root
parents: 37
diff changeset
45 "W/o lock for $requestIP $dbl"."b\n",FILE_APPEND);
35
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 }
38
c24ae74bf6d5 pass char for log lines in to doAmazonRequest
Charlie Root
parents: 37
diff changeset
59 file_put_contents('/var/ywww/debug/phpDebug',"Losing $i: $dbl ".$mm[0].", $resName, $code, $requestIP, $requestURI\n",FILE_APPEND);
35
86f79bc1d142 refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff changeset
60 if ($code!='RequestThrottled') {
37
633402a4995d try to fix a common lookup error
Charlie Root
parents: 35
diff changeset
61 file_put_contents('/var/ywww/debug/phpDebug',"message: $message\n",FILE_APPEND);
633402a4995d try to fix a common lookup error
Charlie Root
parents: 35
diff changeset
62 if ($code=='AWS.InvalidParameterValue' && strpos($message,"for ItemId.")>0) {
633402a4995d try to fix a common lookup error
Charlie Root
parents: 35
diff changeset
63 // Check for common problem and try to fix...
633402a4995d try to fix a common lookup error
Charlie Root
parents: 35
diff changeset
64 $spd=$parameters['ItemId'];
633402a4995d try to fix a common lookup error
Charlie Root
parents: 35
diff changeset
65 if (strpos($spd,'/')>0) {
633402a4995d try to fix a common lookup error
Charlie Root
parents: 35
diff changeset
66 $isbnMaybe=substr($spd,0,strpos($spd,'/'));
633402a4995d try to fix a common lookup error
Charlie Root
parents: 35
diff changeset
67 $parameters['ItemId']=$isbnMaybe;
633402a4995d try to fix a common lookup error
Charlie Root
parents: 35
diff changeset
68 if (isset($parameters['Keywords'])) {
633402a4995d try to fix a common lookup error
Charlie Root
parents: 35
diff changeset
69 $parameters['Keywords']=urlencode($isbnMaybe);
633402a4995d try to fix a common lookup error
Charlie Root
parents: 35
diff changeset
70 }
633402a4995d try to fix a common lookup error
Charlie Root
parents: 35
diff changeset
71 file_put_contents('/var/ywww/debug/phpDebug',"retrying with $isbnMaybe\n",FILE_APPEND);
38
c24ae74bf6d5 pass char for log lines in to doAmazonRequest
Charlie Root
parents: 37
diff changeset
72 return doAmazonRequest($ext,$parameters,$try,$dbl);
37
633402a4995d try to fix a common lookup error
Charlie Root
parents: 35
diff changeset
73 }
633402a4995d try to fix a common lookup error
Charlie Root
parents: 35
diff changeset
74 }
35
86f79bc1d142 refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff changeset
75 if ($code=="") {
86f79bc1d142 refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff changeset
76 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
77 }
86f79bc1d142 refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff changeset
78 throw new Exception($code);
86f79bc1d142 refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff changeset
79 }
86f79bc1d142 refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff changeset
80 }
86f79bc1d142 refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff changeset
81 else {
86f79bc1d142 refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff changeset
82 return $xml;
86f79bc1d142 refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff changeset
83 }
38
c24ae74bf6d5 pass char for log lines in to doAmazonRequest
Charlie Root
parents: 37
diff changeset
84 usleep(100000*$i); // Try to reduce throttling until we get a
35
86f79bc1d142 refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff changeset
85 // principled solution in place
86f79bc1d142 refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff changeset
86 }
86f79bc1d142 refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff changeset
87 throw new Exception("ThrottledRepeatedly");
86f79bc1d142 refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff changeset
88 }
86f79bc1d142 refactor to split out shareable fn to actually do an Amazon API request
Charlie Root
parents:
diff changeset
89 ?>