使用 Magento API 获取产品

2024-01-10

我正在使用 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;
}

该代码运行良好,但运行速度非常慢。当我将图像调用添加到循环中时,页面加载大约需要 50 秒,这适用于只有 5 个产品的网站。我想知道的是以下内容:

  1. 上面的代码是否正确,只是 Magento 的 API 脚本非常慢?
  2. 上面的代码不是执行我需要的操作的最佳方法吗?
  3. 是否还有其他因素导致进展如此缓慢?

任何帮助将非常感激。至少如果我知道我正确使用了代码,我就可以寻找其他途径。

提前致谢!

=================编辑=================

使用 Matthias Zeis 建议的多重调用,数据到达速度要快得多。这是我使用的代码:

$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);

现在,这比以前更快了!我发现的下一个问题是Catalog_product_attribute_media.list http://www.magentocommerce.com/wiki/doc/webservices-api/api/catalog_product_attribute_media#catalog_product_attribute_media.list尽管产品都设置了图像,但调用似乎并不以相同的方式工作。

我在 var_dump 中遇到的错误是:

产品图片库中不存在请求的图片。


1.上面的代码是否正确,只是Magento的API脚本很慢?

您的代码是正确的,但脚本很慢,因为 (a) SOAP API 的速度不是非常快,并且 (b) 您正在对每个产品进行单独的调用。

2.上面的代码不是做我需要的事情的最佳方法吗?

如果您使用 SOAP v1 API 或 XML-RPC,您可以test 多路通话 http://www.magentocommerce.com/wiki/doc/webservices-api/introduction。首先,调用catalog_category.assignedProducts来获取产品ID。收集产品 ID 并执行 multiCall 调用。这应该会大大减少等待时间。

不幸的是,Magento 没有提供一个很好的开箱即用的解决方案来交付您需要的数据。我建议你实现您自己的自定义 API 调用.

使用产品集合模型:

$collection = Mage::getModel('catalog/product')->getCollection();

这将为您提供一个 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 ... */
    );
}

这应该会给你带来相当大的性能提升。

但当然这只是冰山一角。如果此解决方案对您来说不够快,请避免使用 SOAP 并通过构建来绕过 Magento 堆栈的一部分你自己的API。这不一定是一个复杂的解决方案:它可以是一个带有 HTTP 基本身份验证的简单 PHP 脚本,它解析 URL 以获得过滤条件等,包括 app/Mage.php 并调用 Mage::app() 来初始化 Magento框架。好处是您可以轻松地使用 Magento 类,但不必经历整个路由过程。

不要忘记,你可能缓存结果因为我可以想象您将向其他域上的相当多的访问者展示相同的产品。即使缓存几分钟也可能对您的服务器有所帮助。

3.是否还有其他因素导致进展如此缓慢?

可能有一些原因导致呼叫失败that你的服务器速度很慢 - 但如果不知道你的数据量、你的服务器硬件和你所做的定制,即使是最好的猜测也不会那么好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Magento API 获取产品 的相关文章

随机推荐