在发送多个请求时,由于请求过多,我收到了这个烦人的错误 429。更令人作呕的是,它似乎将每个请求的产品数量限制为 10 个。
因此,我有一个代码将我的 asin 数组分解为 10 组并将其链接到多个请求中,但是,当我在每个请求开始后设置 1 秒等待然后再创建一个新请求时,它不能可靠地工作并且仍然返回一个错误,将每个请求的时间增加到 2 秒可以解决此问题,但速度太慢。(因为通常每个请求需要 0.5 秒并等待剩余的 1.5 秒)。
亚马逊没有任何关于这些限制如何运作的文档,所以我们只能猜测。
有没有办法进一步改进它或使排队有所不同?
$all_posts = get_posts(array(
'posts_per_page' => -1
));
$serialized = serialize($all_posts);
preg_match_all ( "/]([^\]]*?)\[\/asa\]/" , $serialized , $matches);
$amazon_items=$matches[1]; //here we get an array of asins
$time_end=microtime(true);
$time_start=0;
$out=array();
for ($i=0;$i<count($amazon_items);$i+=10){
$arr=array();
for ($j=0;$j<10&&$i+$j<count($amazon_items);$j++){
$arr[]=$amazon_items[$i+$j];
}
if ($time_end-$time_start<2) {
echo 'sleeping '.(2-($time_end-$time_start)). 'sec; ';
sleep (2-($time_end-$time_start));
}
$time_start = microtime(true);
$list = GetItems($arr);
$time_end = microtime(true);
echo $time_end-$time_start.' sec, ',PHP_EOL;
$out = array_merge($out, $list);
}