我得到了以下Url:
http://sowacs.appspot.com/AWS/webservices.amazon.com/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=AKIAICNDB2XMNUH7OIDA&AssociateTag=sometag&BrowseNode=10777&Operation=ItemSearch&SearchIndex=Books&Condition=All&ResponseGroup=ItemIds&ItemPage=1
当您单击链接时,您会得到一个xml文件。当你查看Url时,会添加一个时间戳和一个签名参数。我想在php脚本中获得这个扩展Url。我搜索了几个小时,发现了以下内容:
function get_web_page( $url )
{
$options = array(
CURLOPT_RETURNTRANSFER => true, // return web page
CURLOPT_HEADER => true, // return headers
CURLOPT_FOLLOWLOCATION => true, // follow redirects
CURLOPT_ENCODING => "", // handle all encodings
CURLOPT_USERAGENT => "spider", // who am i
CURLOPT_AUTOREFERER => true, // set referer on redirect
CURLOPT_CONNECTTIMEOUT => 120, // timeout on connect
CURLOPT_TIMEOUT => 120, // timeout on response
CURLOPT_MAXREDIRS => 10, // stop after 10 redirects
);
$ch = curl_init( $url );
curl_setopt_array( $ch, $options );
$content = curl_exec( $ch );
$err = curl_errno( $ch );
$errmsg = curl_error( $ch );
$header = curl_getinfo( $ch );
curl_close( $ch );
//$header['errno'] = $err;
// $header['errmsg'] = $errmsg;
//$header['content'] = $content;
print($header[0]);
return $header;
}
$thisurl = "http://sowacs.appspot.com/AWS/
webservices.amazon.com/onca/xml?
Service=AWSECommerceService&
AWSAccessKeyId=AKIAICNDB2XMNUH7OIDA&AssociateTag=sometag&BrowseNode=10777
&Operation=ItemSearch&SearchIndex=Books&Condition=All&ResponseGroup=ItemIds&ItemPage=1
";
$myUrlInfo = get_web_page( $thisurl );
echo $myUrlInfo["url"];
但这只会让我回想起第一个url。不是加长版。我需要这个重定向的amazonapi请求。这个网站为我生成签名和时间戳(https://sowacs.appspot.com/)以便我执行api请求。也许这不是一个"正常"的重定向。我不知道,我对编码还比较陌生。。。所以我的php脚本需要url!Thx。
在$header
数组中,您获得了return_url
密钥,该密钥包含Amazon AWS API URL,并将时间戳和签名添加到请求主体中。
实施示例:
function get_web_page( $url )
{
$options = array(
CURLOPT_RETURNTRANSFER => true, // return web page
CURLOPT_HEADER => true, // return headers
);
$ch = curl_init( $url );
curl_setopt_array( $ch, $options );
$content = curl_exec( $ch );
$header = curl_getinfo( $ch );
curl_close( $ch );
return $header['redirect_url'];
}
$thisurl = "http://sowacs.appspot.com/AWS/webservices.amazon.com/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=AKIAICNDB2XMNUH7OIDA&AssociateTag=sometag&BrowseNode=10777&Operation=ItemSearch&SearchIndex=Books&Condition=All&ResponseGroup=ItemIds&ItemPage=1";
// Get Amazon AWS URL
$url = get_web_page($thisurl);
echo $url;
输出的结构与文章顶部的示例相同,包括时间戳和签名:
http://webservices.amazon.com/onca/xml?AWSAccessKeyId=AKIAICNDB2XMNUH7OIDA&AssociateTag=sometag&BrowseNode=10777&Condition=All&ItemPage=1&Operation=ItemSearch&ResponseGroup=ItemIds&SearchIndex=Books&Service=AWSECommerceService&Timestamp=2014-09-01T03%3A18%3A02.000Z&Signature=IxRHgn7AV2YFq05I6Q33eF3aJuzEqsM5e7e1lW1xG8E%3D
您想从这里对该URL做什么取决于您,但例如,您可以使用PHP:获取XML文档的内容
$xml = file_get_contents($url);
然后使用DOM解析器来处理它,例如:
$doc = new DOMDocument();
$doc->loadXML($xml);
$items = $doc->getElementsByTagName('Item');
foreach($items as $item) {
echo '<li>ASIN: ' . $item->nodeValue . '</li>', PHP_EOL;
}
输出:
<li>ASIN: 1454824573</li>
<li>ASIN: 0615361161</li>
<li>ASIN: 1454807105</li>
<li>ASIN: 1285185242</li>
<li>ASIN: 0314279822</li>
<li>ASIN: 1599417049</li>
<li>ASIN: 0735598223</li>
<li>ASIN: 1454851368</li>
<li>ASIN: 1133191355</li>
<li>ASIN: 1454815485</li>
或者将用户重定向到它:
header("Location: " . $url);
exit;
既然你提到你是编码新手,我将解释一下亚马逊的API是如何工作的:
- 您需要指定您的公钥(AWSAccessKeyId)
- 您需要提供请求发出时间的unix时间戳(亚马逊使用此时间戳来确定您的请求是否仍然有效,因为它将忽略上周的请求)
- 您需要创建一个签名,它是整个请求主体的散列,包括时间戳和公钥。通常情况下,你会使用某种密钥来签署请求。本质上,这个签名是您在请求中发送的数据的散列表示(签名)。亚马逊获取你发送的数据(不包括签名),获取你的私钥,并组装他们自己的签名,将其与你提供的签名进行比较。如果它们匹配,您的请求是可以的