亚马逊产品API错误429:如何为批处理请求优化性能和可靠性?

匿名

发送多个请求时,我收到太多请求的烦人错误429。更令人讨厌的是,它似乎将每个请求的产品数量限制为10个。

因此,我有一个代码将asin数组分解为10s组并将其链接到多个请求中,但是,当我在每个请求开始后设置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); 
}
匿名

我想我找到了解决方案,看来paapi 5对第一个#1和#2请求特别敏感。应该保持良好的暂停,然后可以将请求速度提高到标称的每秒1个速度。

因此,循环应如下所示:第一个请求,自请求开始以来暂停,总共需要2秒;第二个请求,自请求开始以来暂停,总共需要1秒,第三次请求,暂停,总计需要1秒从请求开始到第4个请求等的秒数

我怀疑在从请求开始算起切换到总等待周期为1秒之前,在第一个请求结束后保持整整1秒(而不是总共2秒)也可以工作,但是我尚未按顺序尝试核实。显然,如果第一个请求超过1秒并且引发错误,那么我会知道是这种情况。

编辑:它工作了一个小时,然后又停止工作了,为了确保每次请求后我都将更改为1秒。这确实很困难,因为无法知道在服务器端确切记录了什么时间,它既不是请求的开始时间,也不是请求的结束时间。似乎它可以在两者之间任意波动,每当违反1秒规则(随机发生)时,它就会引发429次错误。好的,我只需要等待1秒钟,希望我的请求本身比1秒稍快一点,这与每次等待2秒钟相比,应该会给我带来一些好处和可靠性,就像我最初发布的示例中那样。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章