Načtení kategorií z heureky

Pokud chcete úspěšný eshop, budete pravděpodobně párovat u zboží kategorie s heurekou. K tomu potřebujete ideálně do databáze dostat všechny heureka kategorie, a následně je buď u kategorií nebo u zboží spárovat. Budu se nyní zabývat tím, jak dostat celý strom kategorií na lokální server do databáze.

V databázi předpokládám tabulku s názvem heureka_kategorie a s jediným sloupcem pojmenovaným nazev. Níže uvedený kód načte všechny kategorie heureky a uloží je do dočasného XML souboru na disku. Následně tento soubor zpracuje a všechny kategorie uloží do databáze, přičemž je ukládá jako textový řetězec včetně celé cesty, tzn. názvy kategorií odděleny oddělovačem |.

$file="http://www.heureka.cz/direct/xml-export/shops/heureka-sekce.xml";
$ch = curl_init($file);
$fp = @fopen("tmp/heureka.xml", "w");
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
fclose($fp);

function vetev($PARENT) {
  global $dbh;
  if (isset($PARENT->CATEGORY)) {
    foreach($PARENT->CATEGORY as $CHILD) {
      $CATEGORY_FULLNAME = isset($CHILD->CATEGORY_FULLNAME) ? $CHILD->CATEGORY_FULLNAME : "";
      $CATEGORY_FULLNAME = trim(str_replace("Heureka.cz |", "", $CATEGORY_FULLNAME));
      if ($CATEGORY_FULLNAME) $dbh->query("insert into heureka_kategorie (nazev) values ('".$CATEGORY_FULLNAME."')");
      vetev($CHILD);	
    }
  }
}

if (file_exists("tmp/heureka.xml")) {

$xml = file_get_contents("tmp/heureka.xml");
$HEUREKA = new SimpleXMLElement($xml);

try {
  $dbh = new PDO("mysql:host=localhost;dbname=nazevdatabaze;charset=utf8",'jmeno','heslo');
  $dbh->query("truncate table heureka_kategorie");
  vetev($HEUREKA);
  $dbh = null;
} catch (PDOException $e) {
    echo "Error!: " . $e->getMessage() . "<br/>";
    exit();
}

}