Your IP : 216.73.216.170


Current Path : /home/bitrix/ext_www/vt.yacl.site/
Upload File :
Current File : /home/bitrix/ext_www/vt.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!');
    }
}