将URL从URL导入/解析为Magento

时间:2011-01-05 12:18:13

标签: magento import xml-parsing

我有一个包含产品XML的网址。

我希望做的是,如果可能的话,解析内容,然后将详细信息作为产品导入Magento。

这是否可行?如果是这样,我需要采取哪些措施才能实现这一目标?

由于

编辑:

import_products.php

require_once('app/Mage.php');

class import_products extends Mage_Core_Model_Abstract
{

 public static function url_contents($url)
 {
   $crl = curl_init();
   $timeout = 5;
   curl_setopt ($crl, CURLOPT_URL,$url);
   curl_setopt ($crl, CURLOPT_RETURNTRANSFER, 1);
   curl_setopt ($crl, CURLOPT_CONNECTTIMEOUT, $timeout);
   $ret = curl_exec($crl);
   curl_close($crl);
   return $ret;
}

}

import.php

require_once('import_products.php');

$app = Mage::app('default'); 
$product = Mage::getSingleton('catalog/product');

$objDOM = new DOMDocument();
$objDOM->load("http://www.example.com/products.xml");

$note = $objDOM->getElementsByTagName("car");
// for each note tag, parse the document and get values for
// tasks and details tag.

foreach( $note as $value )
{
  $car_ids = $value->getElementsByTagName("Car_ID");
  $car_id  = $car_ids->item(0)->nodeValue;

  $makes = $value->getElementsByTagName("Make");
  $make  = $makes->item(0)->nodeValue;

  $models = $value->getElementsByTagName("Model");
  $model = $models->item(0)->nodeValue;

  $descriptions = $value->getElementsByTagName("Description");
  $description = $descriptions->item(0)->nodeValue;

  $short_descriptions = $value->getElementsByTagName("Specification");
  $short_description = $short_descriptions->item(0)->nodeValue;

  $prices = $value->getElementsByTagName("Price");
  $price  = $prices->item(0)->nodeValue;

  $simple = 'simple';
  $product->setAttributeSetId(4);
  $product->setSku($task);
  $product->setName($detail);
  $product->setTypeId($simple);
  $product->setPrice($price);
  $product->setValue($price);
  $product->setDescription($description);
  $product->setShortDescription($short_description);
  $product->setWeight(100);
  $product->setVisibility(Mage_Catalog_Model_Product_Visibility::VISIBILITY_NOT_VISIBLE);
  $product->setStatus(Mage_Catalog_Model_Product_Status::STATUS_ENABLED);
  $product->setTaxClassId(2); 
  $product->setStockData(array(
        'is_in_stock' => 1,
        'qty' => 99999
  ));

  try {
     $product->save();
 echo "Saved";
  }
  catch (Exception $ex) {
      echo "<pre>".$ex."</pre>";
  }

  //echo "$car_id :: $make :: $model ::  $description :: $short_description :: $price <br /><br />";
}

1 个答案:

答案 0 :(得分:3)

你可以在Magento中获取参数并使用简单的xml将字符串转换为xml

$xmlstr = self::XML_DECLARATION . urldecode($this->getRequest()->getParam('paramName');
  try {
      $xml = simplexml_load_string($xmlstr);
  }
  catch(Exception $ex) {
      echo "Unable to process xml file because of the following error<br /><br /> $ex";
      exit;
  }

如果它是你试图获得的文件,你可以设置一个包含以下代码的php文件来获取url的内容

function get_url_contents($url){
$crl = curl_init();
$timeout = 5;
curl_setopt ($crl, CURLOPT_URL,$url);
curl_setopt ($crl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($crl, CURLOPT_CONNECTTIMEOUT, $timeout);
$ret = curl_exec($crl);
curl_close($crl);
return $ret;

}

您可以使用该功能,然后使用上面的内容

$xmlstr = self::XML_DECLARATION . urldecode($this->getRequest()->getParam('paramName');

你应该能够做到这一点

$xmlstr = self::XML_DECLARATION . get_url_contents('http://urlhere.com/xml');

然后你可以使用简单的xml并将节点分配给产品数组,在那里你可以拥有一组产品,然后循环使用这些产品并以编程方式在Magento中创建产品,显然改变了可能的值。为您可能需要的任何内容编写硬编码。

    $product = Mage::getSingleton('catalog/product');

    // Build the product
    $product->setSku($productData['sku']);
    $product->setAttributeSetId(26);
    $product->setTypeId('simple');
    $product->setName($productData['description']);
    $product->setCategoryIds(array(162)); 
    $product->setWebsiteIDs(array(1)); 
    $product->setDescription($productData['description']);
    $product->setShortDescription($productData['description']);
    $product->setPrice($productData['price']); # Set some price
    $product->setWeight(4.0000);

    $product->setVisibility(Mage_Catalog_Model_Product_Visibility::VISIBILITY_NOT_VISIBLE);
    $product->setStatus(Mage_Catalog_Model_Product_Status::STATUS_ENABLED);
    $product->setData('is_salable', '1');
    $product->setTaxClassId(2); # My default tax class
    $product->setStockData(array(
            'is_in_stock' => 1,
            'qty' => 99999
    ));

    try {
        $product->save();
    }
    catch (Exception $ex) {
        //Handle the error
    }