Utilisation de l'API Magento pour obtenir des produits
Je suis à l'aide de l'API Magento pour obtenir des données de produit pour les produits d'une certaine catégorie d'un autre domaine. J'ai fait l'appel d'API, etc... Le code que j'utilise actuellement pour obtenir le produit de données ressemble à ceci:
$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;
}
Le code fonctionne très bien, mais c'est extrêmement lent. Quand j'ajoute l'image à l'appel de la boucle, il faut environ 50 secondes pour que la page se charge, et c'est pour un site avec seulement 5 produits. Ce que je veux savoir est la suivante:
- Est le code ci-dessus correcte et il est juste de Magento API de script est très lent?
- Est le code ci-dessus pas la meilleure façon de faire ce dont j'ai besoin?
- Pourrait-il y avoir d'autres facteurs qui rendent cela aller en si lent?
Toute aide serait grandement appréciée. Au moins si je sais que je suis en utilisant le code de droit je peux regarder d'autres avenues.
Merci d'avance!
================= MODIFIER =================
À l'aide de multicall suggéré par Matthias Zeis, les données arrivent beaucoup plus rapidement. Voici le code que j'ai utilisé:
$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);
Cela fonctionne maintenant beaucoup plus rapide qu'avant! La prochaine question que j'ai trouvé est que le catalog_product_attribute_media.liste appel ne semble pas fonctionner de la même manière, même si les produits ont tous un ensemble d'images.
L'erreur que je reçois dans le var_dump est:
Image demandée n'existe pas dans les images de produits " galerie.
Ce que quelqu'un sait pourquoi cela peut désormais se passer? Merci encore à l'avance.
source d'informationauteur Adam Moss | 2012-01-09
Vous devez vous connecter pour publier un commentaire.
1. Le code ci-dessus correcte et il est juste de Magento API de script est très lent?
Votre code est correct, mais le script est lent parce que (a) de l'API SOAP n'est pas hyper rapide et (b) vous faites séparé, appels pour chaque produit.
2. Le code ci-dessus pas la meilleure façon de faire ce dont j'ai besoin?
Si vous utilisez le SAVON v1 ou API XML-RPC, vous pouvez test multiCall. Au premier abord, appel catalog_category.assignedProducts pour récupérer l'id de produit. Recueillir l'id de produit et d'exécuter un multiCall appel. Qui devraient réduire le temps d'attente vers le bas un peu.
Malheureusement, Magento n'est pas de fournir une solution sympa de la zone à livrer les données, comme vous en avez besoin. Je recommande que vous mettre en œuvre votre propre appel d'API.
Utiliser un produit modèle de la collection:
Ainsi, vous obtenez une Mage_Catalog_Model_Resource_Product_collection objet qui peut être utilisé pour filtrer, trier, de la pagination, ... votre liste de produits. Itérer sur la collecte et de construire un tableau contenant les données dont vous avez besoin. Vous pouvez également générer des vignettes de vos produits directement lors de la construction du tableau de données:
Cela devrait vous donner assez d'amélioration de la performance.
Mais bien sûr ce n'est que la pointe de l'iceberg. Si cette solution n'est pas assez rapide pour vous, évitez de SAVON et de contourner une partie de l'Magento pile par la construction de votre propre API. Ce n'est pas une solution complexe: il pourrait être un simple script PHP avec l'Authentification HTTP de Base qui analyse l'URL pour les critères de filtre, etc., comprend app/Mage.php et les appels Mage::app() pour initialiser le Magento cadre. L'avantage est que vous avez le confort d'utilisation de Magento classes, mais vous n'avez pas à aller à travers l'ensemble du processus de routage.
De ne pas oublier, vous pouvez mettre en cache les résultats parce que je ne pouvais imaginer que vous présentera les mêmes produits à un certain nombre de visiteurs sur l'autre domaine. Même la mise en cache pendant quelques minutes peut aider votre serveur.
3. Pourrait-il y avoir d'autres facteurs qui rendent cela aller en si lent?
Il y a peut être quelques raisons pour lesquelles les appels sont que lent sur votre serveur mais sans en connaître le volume de vos données et de votre matériel serveur et les personnalisations que vous avez fait, même une meilleure estimation ne sera pas aussi bonne.