Nedávno jsem při práci na jednom projektu hledal cestu, jak napojit aplikaci na obchodní rejstřík a dohledávat informace o firmách dle IČO. Administrativní registr ekonomických subjektů (ARES) je službou zaměřením velmi podobnou jako je obchodní rejtřík, ale jeho obrovskou výhodou je technologie použitá pro datové výstupy. Veškerá data, která tato služba vrací jsou totiž ve formátu XML což doslova vyzývá k integraci do vlastních aplikací. Rozhodl jsem se tedy napsat jednoduchou třídu, která by mi tyto informace zprostředkovala.
Vzhledem k tomu, že ARES integruje několik registrů, namátkou OR - obchodní rejstřík, RES - registr ekonomických subjektů, DPH - registr plátců DPH, jsou možnosti jeho využití opravdu široké. Pro mou potřebu jsem se spokojil s rejstříky RES a OR, a s údaji název firmy, ulice, město, psč.
Celý princip spočívá v definici URL adres v poli $arr_register a xpath query v poli $arr_mapping pro jednotlivé registry. Trida class_ARESInfo ma dvě metody. Metoda class_ARESInfo::queryRegister se stará o dotaz na jeden konkrétní registr, metoda class_ARESInfo::query volá výše uvedenou metodu pro všechny registry, nebo pro jeden konkrétní podle hodnoty parametru $register a vrací asociativní pole pro každý dotázaný registr. Ještě podotknu, že pro parsování XML dat jsem použil DOM extenzi z PHP5, tudíž pokud budete chtít tuto třídu provozovat na PHP4, budete nuceni udělat nějaké úpravy.
<?
class class_ARESInfo {
var
$arr_register=array(
'OR'=>'http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_or.cgi?odp=xml&jazyk=cz&xml=true&ICO={ico}',
'RES'=>'http://wwwinfo.mfcr.cz/cgi-bin/ares/darv_res.cgi?odp=xml&jazyk=cz&xml=true&ICO={ico}'
),
$arr_mapping=
array(
'OR'=>
array(
'nazev'=>'//are:Ares_odpovedi/are:Odpoved/D:Vypis_OR/D:ZAU/D:OF',
'ico'=>'//are:Ares_odpovedi/are:Odpoved/D:Vypis_OR/D:ZAU/D:ICO',
'mesto'=>'//are:Ares_odpovedi/are:Odpoved/D:Vypis_OR/D:ZAU/D:SI/D:N',
'ulice'=>'//are:Ares_odpovedi/are:Odpoved/D:Vypis_OR/D:ZAU/D:SI/D:NU||//are:Ares_odpovedi/are:Odpoved/D:Vypis_OR/D:ZAU/D:SI/D:CA',
),
'RES'=>
array(
'nazev'=>'//are:Ares_odpovedi/are:Odpoved/D:Vypis_RES/D:ZAU/D:OF',
'ico'=>'//are:Ares_odpovedi/are:Odpoved/D:Vypis_RES/D:ZAU/D:ICO',
'mesto'=>'//are:Ares_odpovedi/are:Odpoved/D:Vypis_RES/D:SI/D:N',
'ulice'=>'//are:Ares_odpovedi/are:Odpoved/D:Vypis_RES/D:SI/D:NU',
'psc'=>'//are:Ares_odpovedi/are:Odpoved/D:Vypis_RES/D:SI/D:PSC'
)
),
$codepage='';
function queryRegister($ico, $register) {
if (!isset($this->arr_register[$register]) || !isset($this->arr_mapping[$register])) return false;
$result=array();
$url=$this->arr_register[$register];
$url=str_replace('{ico}',$ico,$url);
if (!$arr_content=file($url)) return false;
$fcontents = join („n”, $arr_content);
$xml=new domDocument;
$xml->loadXML($fcontents);
$xpath=new DomXPath($xml);
while (list($key,$query)=each($this->arr_mapping[$register])) {
$arr_query=explode('||',$query);
while (list(,$query)=each($arr_query)) {
$list=$xpath->query($query);
$i=0;
while ($node=$list->item($i)) {
if (!isset($result[$i][$key]))
$result[$i][$key]='';
else
$result[$i][$key].=' ';
$result[$i][$key].=trim($this->codepage=='' ? $node->nodeValue : iconv('UTF-8',$this->codepage,$node->nodeValue));
$i++;
}
}
}
return $result;
}
function query($ico, $register=null) {
$result=array();
if ($ico=='') return false;
if (is_null($register)) {
while (list($register,)=each($this->arr_register)) {
$result[$register]=$this->queryRegister($ico,$register);
}
} else {
$result[$register]=$this->queryRegister($ico,$register);
}
return $result;
}
}
?>
Vzhledem k tomu, že nevím jak jednoduše popsat strukturu, kterou metoda class_ARESInfo::query vrací, bude asi nejlepší si to ozkoušet :
include('aresinfo.php');
$ares=new class_ARESInfo();
$result=$ares->query('45800456');
print_r($result);
Výsledek vypadá takto :
Array
(
[OR] => Array
(
[0] => Array
(
[nazev] => CET 21 spol.s r.o.
[ico] => 45800456
[mesto] => Praha 1
[ulice] => V jámě 12
)
)
[RES] => Array
(
[0] => Array
(
[nazev] => CET 21 spol.s r.o.
[ico] => 45800456
[mesto] => Praha 1
[ulice] => V jámě 12
[psc] => 11000
)
)
)
Novinky
17.7.2008
Doplněny fotogalerie :
Dovolená I
Dovolená II
Dovolená III
Dovolená IV
Dovolená V
28.2.2008
Doplněny fotogalerie :
09.02.2008 - Čtvrté narozeniny
26.12.2007 - Vánoční procházka
15.12.2007 - Předčasné vánoce
05.12.2007 - Mikuláš
25.11.2007 - Fotografka
16.09.2007 - Na pouti a bezva převlek
15.09.2007 - Na pouti
03.09.2007 - Poprvé ve školce
19.08.2007 - V Olomouci na Flóře
11.08.2007 - Liberecký dětský koutek
29.07.2007 - V Luhačovicích
12.7.2007
12.7.2007
12.7.2007
archivPočasí v Brně
19°C
zataženo
Komentáře
Prosím o pomoc při hledání firmy mám jen její ičo a nemůžu se dostat dál děkuji - ičo 75706741 děkuji za odpověď
5.12.2006 16:42:01 - Marcela Hulhová - mail