magento Cron job for magmi import

2mbi3lxu  于 2023-10-19  发布在  其他
关注(0)|答案(3)|浏览(109)

嗨,我正试图使一个cron工作进口到我的Magento产品。我已经得到了这一切工作只是在一个特设的基础上,但现在我需要一个cron。
理想情况下,我想使用wget,因为这是最直接的。
所以我使用wget“http://www.xxxxxx.com/magmi/web/magmi_run.php?profile=default&mode=xcreate&engine=magmi_productimportengine:Magmi_ProductImportEngine“-O /dev/null
但我有这个错误消息HTTP请求发送的问题,等待响应.头中的读取错误(对等端重置连接)。接下来-你试了20次然后就放弃了。
有谁能告诉我可能是什么问题吗?谢谢理查德

3pmvbmvn

3pmvbmvn1#

我建议使用Magmi CLI Interface来处理cron作业运行(因为HTTP连接可能会超时等)。
我会在你的cron job上运行以下命令:

php /path/to/magmi/cli/magmi.cli.php -mode=create

您可以通过参考以下文档来定义自定义配置文件和模式:http://sourceforge.net/apps/mediawiki/magmi/index.php?title=Magmi_command_line

kxkpmulp

kxkpmulp2#

我刚刚为Magento创建了一个扩展,允许你通过Magento的cron运行Magmi。这也许能帮到你
在此免费下载-> https://github.com/cameraki/Magento-Magmi-Via-Cron-Extension/
有意义的是,我在这里张贴的代码,以防链接离线,所以在这里。ps,因为我在github上做了一个readme,所以我在底部添加了这些信息来帮助你开始。
app/code/local/Oli/Magmi/Cron.php

<?php
/**
 * Created by PhpStorm.
 * User: Oli
 * Date: 02/11/2017
 * Time: 17:05
 */

/* Change importer to the name of your Magmi directory */
require_once(Mage::getBaseDir() . "/importer/plugins/inc/magmi_datasource.php");
require_once(Mage::getBaseDir() . "/importer/integration/inc/productimport_datapump.php");

class Oli_Magmi_Cron {

    const LOG_DIRECTORY = "oli-extensions.log";

    public function runMagmi()
    {

        try {
            $directory = Mage::getBaseDir('var') . '/import/';
            $magmiCsvFile = $directory . 'magmiUploadReady.csv';

            if(!file_exists($magmiCsvFile)) {
                throw new Exception('CSV file for Magmi to upload cant be found.');
            }
        } catch (Exception $e) {
            $message = date('F jS (l) Y h:i:s A') . " === MAGMI (" . __METHOD__ . ") === Could not load todays magmiupload file. It must not have run today. This script will now stop: ".$e->getMessage();
            Mage::log($message, null, self::LOG_DIRECTORY);
            die();
        }

        $productArray = $this->csvToArray($magmiCsvFile);

        $indexes = 'catalog_product_attribute,catalog_product_price,cataloginventory_stock';
        $mode = 'update';
        $profile = 'cronUpdatePrices';
        try {
            $this->import($productArray, $mode, $profile);
        } catch (Exception $e) {
            $message = date('F jS (l) Y h:i:s A') . " === MAGMI (" . __METHOD__ . ") === There was an issue importing the products: ".$e->getMessage();
            Mage::log($message, null, self::LOG_DIRECTORY);
        }
        try {
            $this->reindex($indexes);
        } catch (Exception $e) {
            $message = date('F jS (l) Y h:i:s A') . " === MAGMI (" . __METHOD__ . ") === There is a problem with the reindex function: ".$e->getMessage();
            Mage::log($message, null, self::LOG_DIRECTORY);
        }
        /* log that it actually ran */
        $message = date('F jS (l) Y h:i:s A') . " === MAGMI (" . __METHOD__ . ") === Has finished running";
        Mage::log($message, null, self::LOG_DIRECTORY);

    }


    public function csvToArray($filename)
    {
        $productArray = array_map('str_getcsv', file($filename));
        array_shift($productArray);
        $newProductArray = array();
        /* Customise the item array index's to match the file you are importing */
        foreach ($productArray as $key => $item) {
            $newProductArray[$key]['sku'] = $item[0];
            $newProductArray[$key]['buy_price'] = $item[1];
            $newProductArray[$key]['price'] = $item[2];
            $newProductArray[$key]['store'] = $item[3];
            $newProductArray[$key]['price_updated'] = $item[4];
            $newProductArray[$key]['amazon_euros'] = $item[5];
            $newProductArray[$key]['amazon_dollars'] = $item[6];
            $newProductArray[$key]['qty'] = $item[7];
            $newProductArray[$key]['is_in_stock'] = $item[8];

        }
        return $newProductArray;
    }


    private function import($items, $mode, $profile)
    {
        if (count($items) > 0) {
            try{

                $dp = new Magmi_ProductImport_DataPump();
                $dp->beginImportSession($profile, $mode);
                foreach ($items as $item) {
                    $dp->ingest($item);
                }
                $dp->endImportSession();

            } catch (Exception $e) {
                $message = date('F jS (l) Y h:i:s A') . " === MAGMI (" . __METHOD__ . ") === Seems to be an issue with the import function: ".$e->getMessage();
                Mage::log($message, null, self::LOG_DIRECTORY);
            }
        }
    }

    private function reindex($string)
    {
        /** @var $indexer Mage_Index_Model_Indexer */
        $indexer = Mage::getModel('index/indexer');

        $processes = array();

        if ($string == 'all') {
            $processes = $indexer->getProcessesCollection();
        } else {
            $codes = explode(',', $string);
            foreach ($codes as $code) {
                $process = $indexer->getProcessByCode(trim($code));
                if ($process) {
                    $processes[] = $process;
                }
            }
        }

        /** @var $process Mage_Index_Model_Process */
        foreach ($processes as $process) {
            $process->reindexEverything();
        }
    }
}

app/code/local/Oli/Magmi/etc/config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Oli_Magmi>
            <version>0.0.1</version>
        </Oli_Magmi>
    </modules>
    <global>
        <models>
            <oli_magmi>
                <class>Oli_Magmi</class>
            </oli_magmi>
        </models>
    </global>
    <crontab>
        <jobs>
            <update_prices_via_magmi>
                <schedule>
                    <cron_expr>30 3 * * 2</cron_expr>
                </schedule>
                <run>
                    <model>oli_magmi/cron::runMagmi</model>
                </run>
            </update_prices_via_magmi>
        </jobs>
    </crontab>
</config>

app/etc/modules/Oli_Magmi.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Oli_Magmi>
            <active>true</active>
            <codePool>local</codePool>
        </Oli_Magmi>
    </modules>
</config>

Magento Magmi Via Cron Extension,巴塞罗那

Magento扩展,通过Magento的cron从CSV文件运行Magmi
注意:这只适用于如果你有Magmi(Magento批量导入器)

这是做什么的?

Magmi允许您批量快速地更改产品。它的速度很快,因为它是直接导入到数据库。因此,请谨慎使用Magmi,并在导入之前备份数据库。
此扩展允许您使用Magento的cron自动运行Magmi。非常适合每天自动更新产品定价,或每周一次批量更改库存水平。
”我可以使用它的盒子吗?**
你需要确保你的服务器上有Magmi。然后又道:

  • 在app/code/local/Oli/Magmi/Cron.php的第10行和第11行,将“/importer/.”更改为Magmi安装的位置。例如,“/magmi/....”
  • 在app/code/local/Oli/Magmi/Cron.php的第23行,将$magmiCsvFil更改为您导入的CVS文件的地址。一旦你改变了这一点,改变第66行周围的行,将CSV文件中的列Map到数组中。$newProductArray[$key]“.”]的键应该与您正在更改的属性相匹配。例如,如果你想更新库存水平,你将使用$newProductArray[$key]'qty'],因为'qty'是Magento的库存水平。
    定制
  • 在app/code/local/Oli/Magmi/Cron.php的第36行,设置您要重新索引的Magento设置。我补充的是:catalog_product_attribute catalog_product_price cataloginventory_stock您可能想要添加更多或更改这些。
  • 在app/code/local/Oli/Magmi/Cron.php的第37行,这是Magmi模式。“create”创建和更新项目,“update”仅更新,“xcreate”仅创建。
  • 在app/code/local/Oli/Magmi/Cron.php的第38行,将其更改为与您在Magmi中创建的配置文件的名称相匹配。如果你想使用默认配置文件,你可以使用'default',但是这是值得一看的,因为你想确保在飞行中索引被关闭,因为这个扩展重新索引你的magento商店在最后。如果您使用的配置文件具有动态索引,它将在每个产品之后重新索引,毫无理由地占用大量服务器负载。
    更多信息您可以在这里找到有关Magmi DataDump API的更多信息-> http://wiki.magmi.org/index.php/Magmi_Datapump_API
lsmepo6l

lsmepo6l3#

在某些情况下,我必须从Magento cron job运行Magmi,所以我有这样的东西:

/**
 * Includes Magmi files
 */
protected function _includeMagmi()
{
    $magentoBaseDir = Mage::getBaseDir();
    require_once($magentoBaseDir . DS . 'magmi' . DS . 'inc' . DS . 'magmi_defs.php');
    require_once($magentoBaseDir . DS . 'magmi' . DS . 'integration' . DS . 'inc' . DS . 'magmi_datapump.php');
}

/**
 * Runs Magmi to update/create for specified data
 *
 * @param string $profile Magmi import profile (@see magmi/conf/
 * @param string $mode
 * @param array $data
 */
protected function _runMagmiImport($profile, $mode, array $data)
{
    $this->_includeMagmi();

    $logger = Mage::getModel('mario/magmi_logger');

    /** @var Magmi_ProductImport_DataPump $dataPump */
    $dataPump = Magmi_DataPumpFactory::getDataPumpInstance('productimport');
    $dataPump->beginImportSession($profile, $mode, $logger);
    foreach ($data as $update) {
        $dataPump->ingest($update);
    }
    $dataPump->endImportSession();

    return $logger;
}

相关问题