Mercurial > hg > ywww
comparison xml/doAmazonRequest.php @ 53:dd93cb4b77ad
more debugging (too much for production), fallback to DB if getBookDetails is knocked back by Amazon
author | Charlie Root |
---|---|
date | Thu, 06 Jun 2019 16:37:20 -0400 |
parents | a67bf725e87b |
children | 72708ec9c0e6 |
comparison
equal
deleted
inserted
replaced
52:d9dd9705e724 | 53:dd93cb4b77ad |
---|---|
16 } | 16 } |
17 $gotit=0; | 17 $gotit=0; |
18 $url=aws_signed_request($ext,$parameters,$public_key,$private_key); | 18 $url=aws_signed_request($ext,$parameters,$public_key,$private_key); |
19 //dl("search: $ext $public_key $private_key\n$url\n".print_r($parameters,TRUE)."\n"); | 19 //dl("search: $ext $public_key $private_key\n$url\n".print_r($parameters,TRUE)."\n"); |
20 for ($i=1; $i<=$try; $i++) { | 20 for ($i=1; $i<=$try; $i++) { |
21 dl("dar: $requestIP $i\n"); | |
21 $crl = curl_init(); | 22 $crl = curl_init(); |
22 $timeout = 5; | 23 $timeout = 5; |
23 curl_setopt ($crl, CURLOPT_URL,$url); | 24 curl_setopt ($crl, CURLOPT_URL,$url); |
24 curl_setopt ($crl, CURLOPT_ENCODING , "gzip"); | 25 curl_setopt ($crl, CURLOPT_ENCODING , "gzip"); |
25 curl_setopt ($crl, CURLOPT_RETURNTRANSFER, 1); | 26 curl_setopt ($crl, CURLOPT_RETURNTRANSFER, 1); |
26 curl_setopt ($crl, CURLOPT_CONNECTTIMEOUT, $timeout); | 27 curl_setopt ($crl, CURLOPT_CONNECTTIMEOUT, $timeout); |
27 $semaphore = new SyncSemaphore("Amazon"); | 28 $semaphore = new SyncSemaphore("Amazon".$ext); |
28 $gotit = $semaphore->lock(1000); | 29 $gotit = $semaphore->lock(5000); |
29 if (!$gotit) { | 30 if (!$gotit) { |
30 dl("Got it: ".(int)$gotit." $requestIP $dbl\n"); | 31 dl("No lock: $requestIP $dbl\n"); |
31 $gotit=$semaphore->lock(1000); | 32 for ($j=1; $j<=$try+4; $j++) { |
32 dl("Got it: ".(int)$gotit." $requestIP $dbl"."a\n"); | 33 dl("dar: $requestIP $i $j\n"); |
33 } | 34 $gotit=$semaphore->lock(1000); |
34 $output = curl_exec($crl); | 35 if ($gotit) { |
35 //dl("nai2: ".strlen($output)."\n"); | 36 dl("Got it: $i $j $requestIP $dbl"."a\n"); |
36 | 37 break; |
37 curl_close($crl); | 38 } |
38 usleep(500000); | 39 } |
39 if ($gotit) { | |
40 $semaphore->unlock(); | |
41 } | 40 } |
42 else { | 41 else { |
43 dl("W/o lock for $requestIP $dbl"."b\n"); | 42 dl("Got it: $i ! $requestIP $dbl"."a\n"); |
44 } | 43 } |
44 if (!$gotit) { | |
45 usleep(1000000); | |
46 continue; | |
47 } | |
48 usleep(1000000); | |
49 $output = curl_exec($crl); | |
50 dl("nai2: $gotit ".strlen($output)."\n"); | |
51 curl_close($crl); | |
45 $mm=array(); | 52 $mm=array(); |
46 $xml = new SimpleXMLElement($output); | 53 $xml = new SimpleXMLElement($output); |
47 if (preg_match("/<Error>/",$output,$mm)) { | 54 if (preg_match("/<Error>/",$output,$mm)) { |
48 $resName=$xml->getName(); | 55 $resName=$xml->getName(); |
49 $code=$xml->Error->Code; | 56 $code=$xml->Error->Code; |
66 $parameters['ItemId']=$isbnMaybe; | 73 $parameters['ItemId']=$isbnMaybe; |
67 if (isset($parameters['Keywords'])) { | 74 if (isset($parameters['Keywords'])) { |
68 $parameters['Keywords']=urlencode($isbnMaybe); | 75 $parameters['Keywords']=urlencode($isbnMaybe); |
69 } | 76 } |
70 dl("retrying with $isbnMaybe\n"); | 77 dl("retrying with $isbnMaybe\n"); |
78 if ($gotit) { | |
79 $semaphore->unlock(); | |
80 } | |
71 return doAmazonRequest($ext,$parameters,$try,$dbl); | 81 return doAmazonRequest($ext,$parameters,$try,$dbl); |
72 } | 82 } |
73 } | 83 } |
74 if ($code=="") { | 84 if ($code=="") { |
75 dl("error elt:\n$output\n"); | 85 dl("error elt:\n$output\n"); |
76 } | 86 } |
87 if ($gotit) { | |
88 $semaphore->unlock(); | |
89 } | |
77 throw new Exception($code); | 90 throw new Exception($code); |
78 } | 91 } |
79 } | 92 } |
80 else { | 93 else { |
94 if ($gotit) { | |
95 $cnt=0; | |
96 $semaphore->unlock($cnt); | |
97 dl("unlocked: $i $cnt\n"); | |
98 } | |
81 if ($wantXML) { | 99 if ($wantXML) { |
82 return $xml; | 100 return $xml; |
83 } | 101 } |
84 else { | 102 else { |
85 //dl("returning ".strlen($output)."\n"); | 103 //dl("returning ".strlen($output)."\n"); |
86 return $output; | 104 return $output; |
87 } | 105 } |
88 } | 106 } |
89 usleep(100000*$i); // Try to reduce throttling until we get a | 107 usleep(100000*$i); // Try to reduce throttling until we get a |
90 // principled solution in place | 108 // principled solution in place |
109 if ($gotit) { | |
110 $semaphore->unlock(); | |
111 } | |
91 } | 112 } |
92 throw new Exception("ThrottledRepeatedly"); | 113 throw new Exception("ThrottledRepeatedly"); |
93 } | 114 } |
94 ?> | 115 ?> |