Ada*_*oss 13 api product soap-client magento
我正在使用Magento API来获取来自其他域的特定类别的产品的产品数据.我已经进行了API调用等...我目前用于获取产品数据的代码如下所示:
$productList = $client->call($session, 'catalog_category.assignedProducts', 7);
foreach ($productList as $product){
$theProduct = array();
$theProduct['info'] = $client->call($session, 'catalog_product.info', $product['sku']);
$allProducts[] = $theProduct;
}
Run Code Online (Sandbox Code Playgroud)
代码工作正常,但速度非常慢.当我将图像调用添加到循环时,页面加载大约需要50秒,而这只适用于只有5个产品的网站.我想知道的是以下内容:
任何帮助将非常感激.至少如果我知道我正在使用正确的代码,我可以看看其他途径.
提前致谢!
=================编辑=================
使用Matthias Zeis建议的multicall,数据更快地到达.这是我使用的代码:
$apicalls = array();
$i = 0;
$productList = $client->call($session, 'catalog_category.assignedProducts', 7);
foreach ($productList as $product){
$apicalls[$i] = array('catalog_product.info', $product['product_id']);
$i++;
}
$list = $client->multiCall($session, $apicalls);
Run Code Online (Sandbox Code Playgroud)
现在这比以前快得多!我发现的下一个问题是,catalog_product_attribute_media.list调用似乎没有以相同的方式工作,即使产品都设置了图像.
我在var_dump中得到的错误是:
产品图片库中不存在请求的图片.
有谁知道为什么现在可能会发生这种情况?再次感谢您的提前.
Mat*_*eis 18
1.上面的代码是否正确,只是Magento的API脚本非常慢?
你的代码是正确的,但是脚本很慢,因为(a)SOAP API不是非常快,而且(b)你正在为每个产品单独调用.
2.上面的代码不是做我需要的最好的方法吗?
如果使用SOAP v1 API或XML-RPC,则可以测试multiCall.首先,调用catalog_category.assignedProducts来获取产品ID.收集产品ID并执行multiCall调用.这应该会减少相当长的等待时间.
不幸的是,Magento没有提供开箱即用的好解决方案来提供您需要的数据.我建议您实现自己的自定义API调用.
使用产品集合模型:
$collection = Mage::getModel('catalog/product')->getCollection();
Run Code Online (Sandbox Code Playgroud)
这将获得一个Mage_Catalog_Model_Resource_Product_Collection对象,可用于过滤,排序,分页,...您的产品列表.迭代集合并构建包含所需数据的数组.您还可以在构建数据阵列时直接为您的产品生成缩略图:
foreach ($products as $product) {
$data[$product->getSku()] = array(
/* the attributes no need ... */
'small_image' => Mage::helper('catalog/image')->init($product, 'image')
->constrainOnly(true)
->keepAspectRatio(true)
->keepFrame(false)
->resize(100,150)
->__toString(),
/* some more attributes ... */
);
}
Run Code Online (Sandbox Code Playgroud)
这应该会给你带来相当大的性能提升.
但当然这只是冰山一角.如果此解决方案对您来说不够快,请通过构建自己的API来避免使用SOAP并绕过Magento堆栈的一部分.这不一定是一个复杂的解决方案:它可以是一个带有HTTP基本身份验证的简单PHP脚本,它解析URL以获取过滤条件等,包括app/Mage.php并调用Mage :: app()来初始化Magento框架.好处是您可以轻松使用Magento类,但不必完成整个路由过程.
不要忘记,您可以缓存结果,因为我可以想象您将向其他域上的相当多的访问者显示相同的产品.即使缓存几分钟也可以帮助您的服务器.
3.还有其他任何因素会导致这么慢吗?
可能有一些原因的电话是那缓慢的服务器上-但不知道你的数据量,你的服务器硬件和客户化你所做的一切,即使是最好的猜测也不会好.