- The glaringly obvious one: being able to do imports programmatically rather than manually uploading a CSV file.
- Importing bundled products.
- Importing categories.
- Reindex products after they are imported.
- Automatic creation of dropdown attribute values.
- Useful events for enriching your entities from other Magento modules.
Additionally, ApiImport is 100% free from rewrites - making it upgrade-proof and reliable.
ApiImport is a modman module. Simply install modman and execute the following command:
./modman clone ApiImport https://github.com/danslo/ApiImport.git
<?php
require_once 'app/Mage.php';
Mage::init();
$api = Mage::getModel('api_import/import_api');
$api->importEntities($anArrayWithYourEntities, $entityType, $optionalImportBehavior);
<?php
require_once 'app/Mage.php';
Mage::init();
/*
* Get an XmlRpc client.
*/
$client = new Zend_XmlRpc_Client(Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB) . 'api/xmlrpc/');
/*
* Set an infinite time-out.
*/
$client->getHttpClient()->setConfig(array('timeout' => -1));
/*
* Login to webservices and obtain session.
*/
$session = $client->call('login', array($yourApiUser, $yourApiKey));
/*
* Do your import.
*/
$client->call('call', array($session, 'import.importEntities', array($anArrayWithYourEntities, $entityType, $optionalImportBehavior)));
/*
* Clean up.
*/
$client->call('endSession', array($session));
Because ApiImport is built as an extension to Magento's Import/Export functionality, it expects the exact same format! The only difference is that you are now supplying ApiImport with the data in an array format, rather than a CSV file. CSV column names are simply array keys, and CSV values are array values.
The Danslo_ApiImport_Helper_Test
class provides several examples on how to programmatically generate your entities.
Another useful trick to figure out what to give to ApiImport is to simply use Magento to generate an exported CSV file of some sample entities.
The second parameter to importEntities specifies what kind of entity is imported. By default it will assume you are importing products. If you want to import a different kind of entity, use the return value of any of these methods:
Mage_ImportExport_Model_Import_Entity_Product::getEntityTypeCode()
Mage_ImportExport_Model_Import_Entity_Customer::getEntityTypeCode()
Danslo_ApiImport_Model_Import_Entity_Category::getEntityTypeCode()
Magento will choose a replace behavior by default. If you would like to use another import behavior, you can pick one of these:
Mage_ImportExport_Model_Import::BEHAVIOR_APPEND
- Tries to append images, related products, etc. instead of replacing them.Mage_ImportExport_Model_Import::BEHAVIOR_REPLACE
- Simply replaces the data in Magento with whatever you have in the entity array. Any data you do not specify in your array will not be deleted!Mage_ImportExport_Model_Import::BEHAVIOR_DELETE
- Deletes every product you have specified. You probably don't want to use this.Danslo_ApiImport_Model_Import::BEHAVIOR_STOCK
- Magento normally requiressku
,_type
,_attribute_set
. This is not useful when you simply want to update stock of existing entities. With this behavior you can simply specifysku
andqty
!
Sure!
<?php
require_once 'app/Mage.php';
Mage::init();
$api = Mage::getModel('api_import/import_api');
$api->importEntities(
array(
array(
'sku' => 'some_sku',
'qty' => 10
),
array(
'sku' => 'some_other_sku',
'qty' => 20
)
// etc
),
Mage_ImportExport_Model_Import_Entity_Product::getEntityTypeCode(),
Danslo_ApiImport_Model_Import::BEHAVIOR_STOCK
);
Obviously you would generate your entities array programmatically.
As long as you have enabled developer mode (see index.php) and logging (see backend), ApiImport will write a log file every time it is run to:
var/log/import_export/%Y/%m/%d/%time%_%operation_type%_%entity_type%.log
There are plans to make this easily available through the backend.
ApiImport is intentionally only compatible with Magento 1.6+.
The following is a very simple benchmark run done on a Virtual Machine running Debian, with 1GB RAM and without any MySQL optimizations. Your experience may vary. These are fully indexed results, mind you.
Generating 5000 simple products...
Starting import...
Done! Magento reports 5000 products in catalog.
========== Import statistics ==========
Total duration: 37.475983s
Average per product: 0.007495s
Products per second: 133.418781s
Products per hour: 480307.612782s
=======================================
Generating 5000 configurable products...
Starting import...
Done! Magento reports 10000 products in catalog.
========== Import statistics ==========
Total duration: 68.099526s
Average per product: 0.013620s
Products per second: 73.421950s
Products per hour: 264319.020648s
=======================================
Generating 5000 bundle products...
Starting import...
Done! Magento reports 15000 products in catalog.
========== Import statistics ==========
Total duration: 113.453821s
Average per product: 0.022691s
Products per second: 44.070794s
Products per hour: 158654.859310s
=======================================
Generating 5000 grouped products...
Starting import...
Done! Magento reports 20000 products in catalog.
========== Import statistics ==========
Total duration: 62.553724s
Average per product: 0.012511s
Products per second: 79.931292s
Products per hour: 287752.652192s
=======================================