Zadejte hledaný výraz...

Jednoduchý xml parser feedu Invia – zdarma

panko
verified
rating uzivatele
(6 hodnocení)
16. 7. 2014 21:50:16
Dobrý den,
nedávno jsem potřeboval vytáhnout data z xml feedu od Invia.cz, bohužel jediný parser, který jsem našel, je pravděpodobně z roku 2007 a celkově se mi nelíbila jeho použitelnost.
Rozhodl jsem se tedy vytvořit jednoduchý parser tohoto xml feedu, práce na 20 minut. Jelikož je to script, který bych jen těžko prodal a využíval bych ho tedy pouze já, tak jsem se rozhodl uveřejnit ho zde na WT, aby byl dostupný a užitečný pro více lidí.
O parseru :
Jedná se o poměrně rychlou micro třídu, která Vám zajistí rychlé a 100% funkční zpracování dat z xml feedu Invia.
Třída parseru
class inviaParser
{
private $url = null;
private $tours = array();
private $timestamp = null;
private $count = null;
public function __construct(){
set_exception_handler(array($this, "inviaExceptionHandler"));
}
public function inviaExceptionHandler($exception = null){
echo $exception->getMessage();
}
public function setAdress($url = null){
if(empty($url)){
throw new Exception("Nebyla vyplnena adresa xml feedu.");
}
$this->url = $url;
}
public function parseXML(){
$xml_feed = simplexml_load_file($this->url);
if(!$xml_feed){
throw new Exception("Nepodarilo se nacist xml feed.");
}
$this->count = $xml_feed->count;
$this->timestamp = $xml_feed->timestamp;
$tours = $xml_feed->offer;
$i = 0;
foreach($tours as $tour){
$tour = json_encode($tour);
$tour = json_decode($tour,TRUE);
$this->tours = $tour;
$i++;
}
return $this->tours;
}
private function sortDate($a = array(), $b = array()){
return strtotime($a) - strtotime($b);
}
public function getData($filters = array()){
if(!is_array($filters)){
throw new Exception("Pole filters neni platne pole.");
}
if(empty($this->url) or empty($this->tours) or !is_array($this->tours)){
throw new Exception("Neplatny feed.");
}
$tours = array();
foreach($this->tours as $tour){
switch($filters){
case "FM":
if($tour == "FM"){
$tours[] = $tour;
}
break;
case "LM":
if($tour == "LM"){
$tours[] = $tour;
}
break;
case "catalogue":
if($tour == "catalogue"){
$tours[] = $tour;
}
break;
default:
$tours[] = $tour;
break;
}
}
switch($filters){
case "desc":
usort($tours, array($this, "sortDate"));
return array_reverse($tours);
break;
case "asc":
usort($tours, array($this, "sortDate"));
break;
default:
break;
}
return $tours;
}
public function getTimeStamp(){
return $this->timestamp;
}
public function getCount(){
return $this->count;
}
}
Jak třídu použít?
Metody (methods) ve třídě :
public konstruktor - registruje handler pro pozdější možné výjimky.
void public inviaExceptionHandler - samotný handler pro výjimky.
void public setAdress - jako argument se předává url Vašeho feedu, setne url ve tříde
raw array (zájezdy) public parseXML - naparsuje data a vrátí raw array všech zájezdů
array private sortDate - třídí zájezdy podle datumu začátku
array (zájezdy) public getData - filtruje data a poté vrací, možná konfigurace filtrů
variable public getCount - vrací property count -> počet zájezdů ve feedu
variable public getTimeStamp - vrací property timestamp -> čas vygenerování feedu
Vlastnosti (properties) ve třídě :
private $url - url xml feedu
private $tours - pole zájezdů
private $timestamp - čas vygenerování xml feedu
private $count - počet zájezdů
4 kroky k úspěchu
1) Vytvoření instance třídy "inviaParser"
$parser = new inviaParser;
2) Předání url xml feedu metodě setAdress
$parser->setAdress("url_ke_xml_feedu");
3) Parsování url pomocí metody parseXML
$parser->parseXML();
V případě, že výstup metody parseXML uložíme, tak dostaneme pole zájezdů.
4) Vytažení dat pomocí metody getData, můžeme použít i filtry k dosažení filtrace
$tours = $parser->getData();
Script pro vypsání informací o zájezdu může vypadat třeba takto :
$parser = new inviaParser;
$parser->setAdress("http://affil.invia.cz/direct/core/tool_xml-feed/download/id/2970229-53c616e4e0f75/");
$parser->parseXML();
$tours = $parser->getData($filters = array("TERMTYPE" => "catalogue", "SORTDATE" => "asc"));
foreach($tours as $tour){
echo "Datum zajezdu (startu) : " . $tour . "
";
echo "Cena : " . $tour . "
";
echo "Typ zajezdu : " . $tour . "


";
}
Použitelné filtry
TERMTYPE - FM (firstminute), LM (lastminute), catalogue (katalog)
SORTDATE - desc (sestupně), asc (vzestupně)
Doufám, že jsem někomu usnadnil práci s xml feedem.
16. 7. 2014 21:50:16
https://webtrh.cz/diskuse/jednoduchy-xml-parser-feedu-invia-zdarma#reply1040161
Tohle opravdu funguje? 2 stejné řádky se stejnou funkcí a řádí asc i desc?
16. 7. 2014 21:57:30
https://webtrh.cz/diskuse/jednoduchy-xml-parser-feedu-invia-zdarma#reply1040160
panko
verified
rating uzivatele
(6 hodnocení)
16. 7. 2014 22:00:50
Napsal iCrow;1107513
Tohle opravdu funguje? 2 stejné řádky se stejnou funkcí a řádí asc i desc?
Díky za nahlášení, na verzi na svém počítači to mám, bohužel jsem to smazal z důvodů testování a pak již nevrátil, nic méně nyní už to tam je.
16. 7. 2014 22:00:50
https://webtrh.cz/diskuse/jednoduchy-xml-parser-feedu-invia-zdarma#reply1040159
privat
verified
rating uzivatele
(19 hodnocení)
28. 10. 2015 18:30:20
Ahoj, pokud je tu někdo kdo kdo by uměl za rozumnou cenu dodělat řazení dle ceny, pošlete SZ. Díky.
28. 10. 2015 18:30:20
https://webtrh.cz/diskuse/jednoduchy-xml-parser-feedu-invia-zdarma#reply1040158
It Snows In Hell
verified
rating uzivatele
30. 10. 2015 14:53:47
Inviu bych radší obešel, jelikož s jejich affiliate programem nemá snad nikdo, v mém okruhu, dobré zkušenosti.
30. 10. 2015 14:53:47
https://webtrh.cz/diskuse/jednoduchy-xml-parser-feedu-invia-zdarma#reply1040157
Pro odpověď se přihlašte.
Přihlásit