Current Path : /home/bitrix/ext_www/community.yacl.site/ |
Current File : /home/bitrix/ext_www/community.yacl.site/fns_updater.php |
<? define("NOT_CHECK_PERMISSIONS", true); if (!$_SERVER["DOCUMENT_ROOT"]) { $_SERVER["DOCUMENT_ROOT"] = realpath(__DIR__); } else { die ('Script for console only'); } require_once $_SERVER["DOCUMENT_ROOT"] . '/local/composer/vendor/autoload.php'; require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php"); use Bitrix\Main\Type\DateTime; use Bitrix\Main\Loader; use Bitrix\Highloadblock\HighloadBlockTable as HLBT; use Bitrix\Disk\Security\DiskSecurityContext; use Bitrix\Disk\Security\SecurityContext; use Bitrix\Disk\Storage; use Bitrix\Main\Localization\Loc; use Bitrix\Main\IO\File; use duzun\hQuery; $baseDir = $_SERVER['DOCUMENT_ROOT'] . '/upload/fnsdata'; $baseUrl = 'https://www.nalog.ru/opendata/'; $interestingDataUrls = [ '7707329152-debtam' => 'Сведения о суммах недоимки и задолженности по пеням и штрафам', '7707329152-taxoffence' => 'Сведения о налоговых правонарушениях и мерах ответственности за их совершение', '7707329152-massleaders' => 'Сведения о физических лицах, являющихся руководителями нескольких юридических лиц', // ИП! '7707329152-massfounders' => 'Сведения о физических лицах, являющихся учредителями (участниками) нескольких юридических лиц', // ИП! '7707329152-disqualifiedpersons' => 'Юридические лица, в состав исполнительных органов которых входят дисквалифицированные лица', '7707329152-registerdisqualified' => 'Реестр дисквалифицированных лиц', '7707329152-arrearsoftea' => 'О задолженности по налогам и сборам, пеням и налоговым санкциям в бюджетную систему Российской Федерации по основным видам экономической деятельности (Форма 4-НОМ)', '7707329152-rsmp' => 'Единый реестр субъектов малого и среднего предпринимательства' ]; hQuery::$cache_path = $_SERVER["DOCUMENT_ROOT"] . '/bitrix/cache/hquery'; hQuery::$cache_expires = 86400; $helper = new HighloadBlockHelper(12); $allUrlsList = $helper->getList(['filter' => [], 'select' => ['UF_CODE', 'ID']])->fetchAll(); $urlMap = []; foreach ($allUrlsList as $current) { $urlMap[$current['UF_CODE']] = $current['ID']; } foreach ($interestingDataUrls as $url => $name) { $realUrl = $baseUrl . $url . '/'; $html = file_get_contents($realUrl); $html = substr($html, strpos($html, '<table'), strpos($html, '</table>') + mb_strlen('</table>') - strpos($html, '<table')); $translittedHtml = CUtil::translit($html, 'ru', ['max_len' => 9999999, 'safe_chars' => '()"\'=<:/>.,-_', 'replace_space' => ' ', 'replace_other' => '-']); $query = hQuery::fromHTML($translittedHtml); try { $href = ''; $aList = $query->find('a'); foreach ($aList as $a) { if ($a->attr('href') == $a->text()) { $href = $a->attr('href'); break; } } if ($urlMap[$url]) { $helper->update($urlMap[$url], [ 'UF_NAME' => $name, 'UF_CODE' => $url, 'UF_LINK' => $href, ]); } else { $helper->add([ 'UF_NAME' => $name, 'UF_CODE' => $url, 'UF_LINK' => $href, ]); } } catch (Exception $e) { okp($e->getMessage()); } } $helper = new HighloadBlockHelper(12); $list = $helper->getList(['select' => ['*']])->fetchAll(); $baseUrl = 'https://www.nalog.ru/opendata/'; $baseDir = $_SERVER['DOCUMENT_ROOT'] . '/upload/fnsdata'; $updated = []; foreach ($list as $item) { $currentDir = $baseDir . '/' . $item['UF_CODE']; if (!is_dir($currentDir)) { mkdir($currentDir); } $fileName = substr($item['UF_LINK'], strrpos($item['UF_LINK'], '/')); $fileExist = count(glob($currentDir . $fileName)) > 0; if (!$fileExist) { $command = "wget --directory-prefix=$currentDir " . $item['UF_LINK']; $res = exec($command); $updated[$item['UF_CODE']] = true; okp('Executed ' . $command); } else { okp("$fileName already exists"); } } foreach ($list as $item) { $type = substr($item['UF_LINK'], strrpos($item['UF_LINK'], '.') + 1); if ($type != 'zip') { continue; } if ($updated[$item['UF_CODE']]) { $currentDir = $baseDir . '/' . $item['UF_CODE']; $fileName = substr($item['UF_LINK'], strrpos($item['UF_LINK'], '/')); $currentFileName = $currentDir . $fileName; $zip = new ZipArchive(); $res = $zip->open($currentFileName); if ($res === TRUE) { if (!is_dir($currentDir . '/unzipped')) { mkdir($currentDir . '/unzipped'); } $zip->extractTo($currentDir . '/unzipped'); $zip->close(); } else { echo 'error reading archive!'; } } else { okp('no need to update!'); } }