Magento API - Получить названия продуктов из определенной категории - PullRequest
3 голосов
/ 29 февраля 2012

Я работаю над Magento API и у меня есть несколько вопросов ... Я пытаюсь получить все названия продуктов из определенной категории в Magento.

вот мой код для этого:

<?php
        $host = "www.host.tld/index.php";
        $client = new SoapClient("http://".$host."/api/soap/?wsdl"); 
        $apiuser= "user"; //webservice user login
        $apikey = "pass"; //webservice user pass
        try { 
            // Login
            $sess_id= $client->login($apiuser, $apikey);

        // Getting all products from category
            $filters = array( 'category_ids' => array('107') );
            $productList = $client->call($sess_id, 'catalog_category.assignedProducts', $filters);  
            //iterate and get all the product_id's and put it into one array
            foreach($productList as $products => $values){ 
                    if (isset($values['product_id']) || array_key_exists('product_id', $values)) {
                        $product_ids[] = $values['sku'];
                    }
            }
            //Get product details from product_id
            foreach($product_ids as $key => $values) {
                $details = $client->call( $sess_id, 'product.info', array($values));
                #echo $details['name'];
            } 
        }
        catch (Exception $e) { //while an error has occured
            echo "==> Error: ".$e->getMessage();
               exit();
        }
?>

Основная проблема, которую я имею, заключается в том, что производительность, которую я получаю, не является лучшей Для каждого «названия продукта» я делаю один api-call для получения всех продуктов. Каждый раз для каждого продукта. Это, наверное, не так умно.

Что я могу оптимизировать. Я что-то упустил?

Я могу представить, что если я захочу получить подробности из более чем одной категории, мой сервер рухнет;). В нашем магазине около 1000 товаров.

Спасибо за помощь.

Ответы [ 2 ]

2 голосов
/ 05 августа 2012

Вы можете использовать для catalog_category.assignedProducts

Получить список товаров, отнесенных к требуемой категории.

попробуйте, если вы используете SOAP V1:

$client = new SoapClient('http://magentohost/api/soap/?wsdl');

// If somestuff requires api authentification,
// then get a session token
$session = $client->login('apiUser', 'apiKey');

$result = $client->call($session, 'catalog_category.assignedProducts', '4');
var_dump($result);

// If you don't need the session anymore
//$client->endSession($session);

если вы используете SOAP V2:

$proxy = new SoapClient('http://magentohost/api/v2_soap/?wsdl'); // TODO : change url
$sessionId = $proxy->login('apiUser', 'apiKey'); // TODO : change login and pwd if necessary

$result = $proxy->catalogCategoryAssignedProducts($sessionId, '4');
var_dump($result);

и ответ будет таким:

array
  0 =>
    array
      'product_id' => string '1' (length=1)
      'type' => string 'simple' (length=6)
      'set' => string '4' (length=1)
      'sku' => string 'n2610' (length=5)
      'position' => string '1' (length=1)
  1 =>
    array
      'product_id' => string '2' (length=1)
      'type' => string 'simple' (length=6)
      'set' => string '4' (length=1)
      'sku' => string 'b8100' (length=5)
      'position' => string '1' (length=1)
2 голосов
/ 29 февраля 2012

Попробуйте

$proxy = new SoapClient('http://magentohost/api/soap/?wsdl');
$sessionId = $proxy->login('apiUser', 'apiKey');

$filters = array(
    'id' => array('in' => array(<product_id_1>, <product_id_2>, ...))
);

$products = $proxy->call($sessionId, 'product.list', array($filters));

Если вам нужна расширенная информация о продукте - вы должны изменить код magento, см. Мой ответ на аналогичный вопрос. L Magento API v1 - Прайс-лист на все продукты в одномзвоните

...