استيراد USRLE عن طريق Apache NiFi. الخطوة 1 - تنزيل الملفات عبر HTTPS

في أحد المشاريع ، كانت هناك حاجة لنقل عملية استيراد البيانات من أنظمة الجهات الخارجية إلى بنية الخدمات الصغيرة. تم اختيار Apache NiFi كأداة. كأول تجربة ، تم تحديد استيراد سجل دائرة الضرائب الفيدرالية.


يتم نشر بيانات USRLE كملفات XML في أرشيف ZIP. يتم وضع المحفوظات يوميًا على مورد https://ftp.egrul.nalog.ru/في دليل منفصل للتاريخ المقابل. للوصول ، المفتاح هو # PKCS12.


المهمة التي تحتاج إلى حل مع NiFi هي تنزيل الملفات من خدمة الضرائب الفيدرالية وإعداد البيانات التي تم تنزيلها لاستيرادها في خدماتنا. توضح هذه المقالة كيفية تنفيذ تنزيلات الملفات.


مصدر البيانات


يتم الحصول على البيانات من USRLE كجزء من خدمة دائرة الضرائب الفيدرالية "التكامل والوصول إلى قواعد بيانات USRLE و USRIP." يتم تقديم وصف لنموذج التفاعل هنا .


هذا هو مصدر خدمة الضرائب الفيدرالية ، التي تريد تنزيل الملفات منها.
https://ftp.egrul.nalog.ru/؟dir=EGRUL


الدلائل ذات اللاحقة الكاملة هي تفريغ السجل الكامل في بداية السنة المقابلة. الكتالوجات المتبقية هي تحديثات يومية في التسجيل. نحن مهتمون بتنزيل التحديثات اليومية.


إعداد الدفق في Apache NiFi


تتمثل مهمة البث في جمع قائمة بملفات الكتالوج مع تحميل الأمس ، والحصول على هذه الملفات وفك ضغطها.


NiFi :

  1. FlowFile,
  2. HTML
  3. HTML ,


FlowFile


FlowFile GenerateFlowFile.


GenerateFlowFile






24 FlowFile fnsEgrulURL. https://ftp.egrul.nalog.ru/?dir=EGRUL/14.04.2020. NiFi Expression Language:

${literal('https://ftp.egrul.nalog.ru/?dir=EGRUL/'):append(${now():toNumber():minus(86400000):format('dd.MM.yyyy')})}

أولئك. يتم أخذ التاريخ الحالي وتحويله إلى تمثيل رقمي للتاريخ. يتم طرح 8640000 مللي ثانية منه. يتم تحويل النتيجة إلى تمثيل سلسلة للتاريخ بالتنسيق dd.MM.yyyy. تتم إضافة التاريخ الناتج إلى الجزء الدائم من الارتباط.

عند الإخراج ، نحصل على ملف Flow من النموذج التالي:


لقطات الشاشة FlowFile




استرداد محتوى الدليل


يتم استخدام معالج InvokeHTTP للحصول على محتويات الدليل . يقوم بإجراء طلب GET باستخدام الارتباط إلى الدليل مع تحميل أمس. استجابة لذلك ، يتلقى المعالج رمز HTML للكتالوج ويضيف رمز HTML هذا إلى FlowFile كمحتوى.


لقطات شاشة لمعالج InvokeHTTP




:
HTTPMethod — GET;
Remote URL — , URL . ${fnsEgrulURL} — FlowFile fnsEgrulURL;
SSL Context Service — SSLContextService , .. HTTPS. #PKCS12 .


FlowFile , , — HTML- .


SSLContextService


SSLContextService




SSLContexService #PKCS12 , , .


cacerts JDK. . https://fns.egrul.nalog.ru , #PKCS12. .



في سلسلة الشهادة، يجب عليك تحديد الروسي DPC دائرة الضرائب شهادة وتصديره في .CER شكل في ترميز DER . بعد ذلك ، تحتاج إلى استيراد الشهادة من الملف المستلم إلى مستودع cacerts باستخدام أداة keytool . على سبيل المثال ، مثل هذا:

C:\Program Files\Java\jdk1.8.0_121\bin> keytool -importcert -keystore "C:\Program Files\Java\jdk1.8.0_121\jre\lib\security\cacerts" -file {   .CER}

و الافتراضي كلمة السر ل cacerts هي changeit .

cacerts , NiFi . , Persistent Volume. SSLContextService. PKSC12, cacertsJKS.



GetHTMLElement, HTML- FlowFile-. ZIP-.


<div id="page-content" class="container">
    <div id="directory-list-header">
        <div class="row">
            <div class="col-md-7 col-sm-6 col-xs-10"></div>
            <div class="col-md-2 col-sm-2 col-xs-2 text-right"></div>
            <div class="col-md-3 col-sm-4 hidden-xs text-right"> </div>
        </div>
    </div>
    <ul id="directory-listing" class="nav nav-pills nav-stacked">
                            <li data-name=".." data-href="https://ftp.egrul.nalog.ru/?dir=EGRUL">
                <a href="https://ftp.egrul.nalog.ru/?dir=EGRUL" class="clearfix" data-name="..">
                    <div class="row">
                        <span class="file-name col-md-7 col-sm-6 col-xs-9">
                            <i class="fa fa-level-up fa-fw"></i>
                            ..                                </span>
                        <span class="file-size col-md-2 col-sm-2 col-xs-3 text-right">
                            -                                </span>
                        <span class="file-modified col-md-3 col-sm-4 hidden-xs text-right">
                            2020-04-05 22:00:00                                </span>
                    </div>
                </a>
            </li>
                            <li data-name="EGRUL_2020-04-05_1.zip" data-href="EGRUL/05.04.2020/EGRUL_2020-04-05_1.zip">
                <a href="EGRUL/05.04.2020/EGRUL_2020-04-05_1.zip" class="clearfix" data-name="EGRUL_2020-04-05_1.zip">
                    <div class="row">
                        <span class="file-name col-md-7 col-sm-6 col-xs-9">
                            <i class="fa fa-file-archive-o fa-fw"></i>
                            EGRUL_2020-04-05_1.zip                                </span>
                        <span class="file-size col-md-2 col-sm-2 col-xs-3 text-right">
                            528.78KB                                </span>
                        <span class="file-modified col-md-3 col-sm-4 hidden-xs text-right">
                            2020-04-05 22:00:24                                </span>
                    </div>
                </a>                     
                    <a href="javascript:void(0)" class="file-info-button">
                        <i class="fa fa-info-circle"></i>
                    </a>
            </li>
    </ul>
</div>


GetHTMLElement


:
URL — URL HTML-;
CSS Selector — . li[data-name^=EGRUL]li, data-name, EGRUL;
Output TypeAttribute — HTML-;
Destinationflowfile-attributeFlowFile- ( HTMLElement);
Attribute Name — , . abs:${literal('data-href')} — URL (abs:) + data-href , CSS-.


, CSS- FlowFile ZIP- HTMLElement.



InvokeHTTP , HTML- . URL HTMLElement, ZIP-. SSLContextService .


InvokeHTTP


ZIP- FlowFile .



UnpackContent. — ZIP.


لقطات من معالج UnpackContent


عند الإخراج ، ينشئ المعالج FlowFile لكل ملف XML تم فك حزمه من أرشيف ZIP.


بالإضافة إلى ذلك...


علاوة على ذلك ، يجب تحويل كل XML إلى JSON وتقسيمه حسب المنظمة ، لأنه يحتوي كل XML على من 1 إلى 1000 كشف تسجيل. ومن JSON في المستقبل سيكون من الممكن تحميل البيانات في تخزين SQL أو NoSQL.


تحويل XML إلى JSON و AVROSchema في المقالة التالية.


All Articles