Impor USRLE melalui Apache NiFi. Langkah 1 - Unduh File melalui HTTPS

Di salah satu proyek, ada kebutuhan untuk mentransfer proses impor data dari sistem pihak ketiga ke arsitektur layanan mikro. Apache NiFi dipilih sebagai alat. Sebagai percobaan pertama, impor daftar Layanan Pajak Federal telah dipilih.


Data USRLE dipublikasikan sebagai file XML yang dikemas dalam arsip ZIP. Arsip diletakkan setiap hari pada sumber daya https://ftp.egrul.nalog.ru/di direktori terpisah untuk tanggal yang sesuai. Untuk akses, kuncinya adalah # PKCS12.


Tugas yang perlu diselesaikan dengan NiFi adalah mengunduh file dari Layanan Pajak Federal dan menyiapkan data yang diunduh untuk diimpor ke layanan kami. Artikel ini menjelaskan cara menerapkan unduhan file.


Sumber data


Memperoleh data dari USRLE dilakukan sebagai bagian dari layanan Layanan Pajak Federal "Integrasi dan akses ke database USRLE dan USRIP." Deskripsi model interaksi disajikan di sini .


Ini adalah sumber dari Layanan Pajak Federal, tempat Anda ingin mengunduh file.
https://ftp.egrul.nalog.ru/?dir=EGRUL


Direktori dengan akhiran FULL adalah pembongkaran register lengkap pada awal tahun yang sama. Katalog yang tersisa adalah pembaruan harian dalam register. Kami tertarik mengunduh pembaruan harian.


Pengaturan aliran di Apache NiFi


Tugas stream adalah mengumpulkan daftar file katalog dengan unggahan kemarin, dapatkan file-file ini dan unzip.


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')})}

Itu tanggal saat ini diambil dan dikonversi ke representasi numerik dari tanggal. 86.400.000 milidetik dikurangkan darinya. Hasilnya dikonversi ke representasi string dari tanggal dalam format dd.MM.yyyy. Tanggal yang dihasilkan ditambahkan ke bagian permanen tautan.

Pada output, kita mendapatkan FlowFile dari formulir berikut:


Screenshot FlowFile




Mengambil Konten Direktori


Prosesor InvokeHTTP digunakan untuk mendapatkan konten direktori . Dia melakukan permintaan GET menggunakan tautan ke direktori dengan unggahan kemarin. Sebagai tanggapan, prosesor menerima katalog kode HTML dan menambahkan kode HTML ini ke FlowFile sebagai konten.


Tangkapan layar prosesor 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. .



Dalam rantai sertifikat, Anda harus memilih sertifikat Layanan Pajak DPC Rusia dan mengekspornya dalam format .CER dalam penyandian DER . Selanjutnya, Anda perlu mengimpor sertifikat dari file yang diterima ke repositori cacerts menggunakan utilitas keytool . Misalnya, seperti ini:

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}

Kata sandi default untuk cacerts adalah 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 screenshot prosesor


Pada output, prosesor membuat FlowFile untuk setiap file XML yang dibongkar dari arsip ZIP.


Lebih lanjut...


Selanjutnya, setiap XML perlu dikonversi ke JSON dan dipecah oleh organisasi, karena setiap XML berisi dari 1 hingga 1000 pernyataan register. Dan dari JSON di masa mendatang akan dimungkinkan untuk memuat data ke dalam penyimpanan SQL atau NoSQL.


Mengubah XML ke JSON dan AVROSchema ada di artikel selanjutnya.


All Articles