gpt4 book ai didi

api - Magento - API 库存数量更新(慢如 hell )

转载 作者:行者123 更新时间:2023-12-04 19:41:45 27 4
gpt4 key购买 nike

我正在使用 Magento API 更新库存,但是我正在使用 CSV 导出产品,其中包含 magento 中存在的产品 skus 和不存在的产品

所以当 sku 列表长度为 3 时,它工作正常。

当它超过 8k 时,它就会断裂。例如它发出咕噜咕噜的声音,然后是“php 死亡白屏”

我的代码还阻止特殊 skus 不被输入(不要问)它们都是 pre_match 的东西。

所以我的代码是这样的:

    $proxy = new SoapClient('http://www.magentosite/index.php/api/?wsdl');
$sessionId = $proxy->login('user', 'apikey');


if (($handle = fopen("../stock.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {


if(count($proxy->call($sessionId, 'product_stock.list', $data[1])) > 0 && (preg_match('/specialcode1/', $data[1]) || preg_match('/^specialcode2/i', $data[1]) || preg_match('/specialcode3/', $data[1]))){

$proxy->call($sessionId, 'product_stock.update', array($data[1], array('qty'=>$data[2])));

}

}
}
fclose($handle);





echo 'complete';

所以我知道 API 可能会很慢,它确实 touch wood 似乎完成了最后一个 sku,但仍然会引发一个白色的 php 错误。

关于我的代码是垃圾还是只是 API 的性质,有什么想法吗?

问候安迪。

最佳答案

每一次API调用都有很大的开销,即Magento庞大的OOP系统。稍微考虑一下,可以减少调用次数。

if (($handle = fopen("../stock.csv", "r")) !== FALSE) {
$qtyBySku = array();
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
// first column ($data[0]) is ignored.
list(, $sku, $qty) = $data;
$qtyBySku[$sku] = (float) $qty;
}
fclose($handle);

$skus = preg_grep('/specialcode1|^specialcode2|specialcode3/',
array_keys($qtyBySku));
if ($skus) try {
$proxy = new SoapClient('http://www.magentosite/index.php/api/?wsdl');
$sessionId = $proxy->login('user', 'apikey');

// Break into blocks of 100 because it's TOO efficient
foreach (array_chunk($skus, 100) as $skuChunk) {
$stock = $proxy->call($sessionId, 'product_stock.list',
array($skuChunk));
if ($stock) {
$calls = array();
foreach ($stock as $product) {
$sku = $product['sku'];
$qty = $qtyBySku[$sku];
$calls[] = array(
'product_stock.update', array($sku, array(
'qty' => $qty,
// only in stock if qty is high enough
'is_in_stock' => $qty > 0
))
);
}
$proxy->multiCall($sessionId, $calls);
}
}
$proxy->endSession($sessionId);

echo 'complete';
}
catch (SoapFault $err) {
echo $err;
// or do something more interesting here
}
// else nothing to update
}

注意一些常识性变化:

  • 在登录 API 之前打开和关闭文件,检查文件速度很快,建立网络连接速度很慢。
  • product_stock.list 之前检查 SKU 是否有特殊代码,如果任何 SKU 匹配,则只有登录。同样,本地工作比远程工作更快。
  • 使用单个正则表达式而不是多个,preg_grep 只解析一次表达式,而不是每条记录一次。
  • > product_stock.list采用一组 ID 或 SKU,这意味着您可以一次查找所有记录。
  • 您无需等待 product_stock.update返回一个值(尽管它只有一个),这意味着您可以在 multiCall 中一次执行多个操作。

关于api - Magento - API 库存数量更新(慢如 hell ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9521130/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com