/** * @param \DateTime $date * * @return Rates */ public function getRates(\DateTime $date = null) { if ($date === null) { $date = new \DateTime(); } // Pokud je pozadan kurz pro dnesni den a jeste nebylo 14:15 zverejnim vcerejsi kurz if ($date->format('Hi') < 1415) { $date->modify('-1 day'); } $cachedFileName = $date->format('Ymd') . '.php'; if (!is_dir($this->cacheDir)) { mkdir($this->cacheDir); } $cachedFile = $this->cacheDir . '/cnb_' . $cachedFileName; if (!is_file($cachedFile)) { $url = sprintf(self::API_URL, urlencode($date->format('d.m.Y'))); $file = explode("\n", file_get_contents($url)); $rates = []; foreach ($file as $index => $line) { // Datum a hlavicku souboru preskocime if ($index < 2) { continue; } // Pokud je radek prazdny if (empty($line)) { continue; } $rate = explode('|', $line); $rates[$rate[3]] = new Rate($date, $rate[3], $rate[0], $rate[1], Lib::toNumber($rate[2]), Lib::toNumber($rate[4])); } file_put_contents($cachedFile, serialize($rates)); } else { $rates = unserialize(file_get_contents($cachedFile)); } // Prevedeni do objektu Rates pro lepsi pristup v sablonach return new Rates($date, $rates); }
/** * @param $name * @param null $city * * @throws InvalidArgumentException * @throws \Exception * * @return array|AresRecord[]|AresRecords */ public function findByName($name, $city = null) { if (strlen($name) < 3) { throw new InvalidArgumentException('Zadejte minimálně 3 znaky pro hledání.'); } $url = sprintf(self::URL_FIND, urlencode(Lib::stripDiacritics($name)), urlencode(Lib::stripDiacritics($city))); $cachedFileName = date($this->cacheStrategy) . '_' . md5($name . $city) . '.php'; $cachedFile = $this->cacheDir . '/find_' . $cachedFileName; $cachedRawFile = $this->cacheDir . '/find_raw_' . $cachedFileName; if (is_file($cachedFile)) { return unserialize(file_get_contents($cachedFile)); } $aresRequest = file_get_contents($url, null, stream_context_create($this->contextOptions)); if ($this->debug) { file_put_contents($cachedRawFile, $aresRequest); } $aresResponse = simplexml_load_string($aresRequest); if (!$aresResponse) { throw new AresException('Databáze ARES není dostupná.'); } $ns = $aresResponse->getDocNamespaces(); $data = $aresResponse->children($ns['are']); $elements = $data->children($ns['dtt'])->V->S; if (!count($elements)) { throw new AresException('Nic nebylo nalezeno.'); } $records = new AresRecords(); foreach ($elements as $element) { $record = new AresRecord(); $record->setCompanyId(strval($element->ico)); $record->setTaxId($element->dph ? str_replace('dic=', 'CZ', strval($element->p_dph)) : ''); $record->setCompanyName(strval($element->ojm)); //'adresa' => strval($element->jmn)); $records[] = $record; } file_put_contents($cachedFile, serialize($records)); return $records; }