Integrasi / Sinkronisasi dengan Portal JDIHN
Portal JDIHN (Jaringan Dokumentasi dan Informasi Hukum Nasional) adalah portal pusat yang mengumpulkan data peraturan dari seluruh anggota JDIHN. ILDIS mengirimkan data ke Portal JDIHN melalui file JSON yang dibuat secara terjadwal — bukan melalui API push.
Cara Kerja
Section titled “Cara Kerja”Arsitektur integrasi menggunakan metode pull-based:
- Cron job di server ILDIS menjalankan perintah
php yii feed/generate-documentsetiap hari - Perintah ini menghasilkan file
feed/document.jsonberisi seluruh dokumen yang dipublikasikan - File JSON tersedia secara publik di URL
https://<domain>/feed/document.json - Portal JDIHN mengambil (pull) file JSON tersebut secara berkala
- Data diperbarui di portal pusat
Keunggulan metode ini dibandingkan API real-time:
- Lebih ringan — query database hanya dijalankan sekali per hari, bukan setiap kali JDIHN meminta data
- Lebih cepat — JDIHN membaca file JSON statis tanpa proses backend tambahan
- Lebih stabil — tidak bergantung pada ketersediaan database saat JDIHN melakukan request
Format Feed JSON
Section titled “Format Feed JSON”Feed berupa JSON array yang berisi seluruh dokumen yang dipublikasikan (is_publish = 1). Setiap objek memiliki 28 field:
| Field | Tipe | Keterangan |
|---|---|---|
idData | string | ID dokumen (primary key) |
tahun_pengundangan | string | Tahun pengundangan (format YYYY) |
tanggal_penetapan | date | Tanggal penetapan |
tanggal_pengundangan | date | Tanggal pengundangan |
jenis | string | Jenis peraturan (contoh: “UNDANG-UNDANG”) |
noPeraturan | string | Nomor peraturan |
judul | string | Judul dokumen |
noPanggil | string | Nomor panggil |
singkatanJenis | string | Singkatan jenis (contoh: “UU”) |
tempatTerbit | string | Tempat terbit |
penerbit | string | Penerbit |
deskripsiFisik | string | Deskripsi fisik |
sumber | string | Sumber (contoh: “BN 2024(1): 100 hlm”) |
isbn | string | ISBN |
status | string | Status (contoh: “Berlaku”) |
bahasa | string | Bahasa (contoh: “Indonesia”) |
bidangHukum | string | Bidang hukum |
teuBadan | string | TEU/badan |
nomorIndukBuku | string | Nomor induk buku |
abstrak | string | Nama file abstrak (contoh: “tesabstrak.pdf”) |
last_updated | datetime | Timestamp update terakhir |
urlAbstrak | string | URL lengkap ke file abstrak PDF |
urlDetailPeraturan | string | URL lengkap ke halaman detail dokumen |
fileDownload | string | Nama file download (saat ini "-") |
urlDownload | string | URL download (saat ini "-") |
subjek | string | Subjek/kata kunci (saat ini kosong) |
operasi | string | Kode operasi JDIHN ("4" = create/update) |
display | string | Flag visibilitas ("1" = tampil) |
Contoh Feed
Section titled “Contoh Feed”[ { "idData": "1", "tahun_pengundangan": "2024", "tanggal_penetapan": "2024-01-01", "tanggal_pengundangan": "2024-01-01", "jenis": "UNDANG-UNDANG", "noPeraturan": "1", "judul": "Undang-Undang tentang Contoh", "singkatanJenis": "UU", "tempatTerbit": "Indonesia", "sumber": "BN 2024(1): 100 hlm", "status": "Berlaku", "bahasa": "Indonesia", "bidangHukum": "Hukum Dagang", "abstrak": "tesabstrak.pdf", "last_updated": "2024-11-15 14:14:51", "urlAbstrak": "https://ildis.example.org/common/dokumen/tesabstrak.pdf", "urlDetailPeraturan": "https://ildis.example.org/dokumen/view?id=1", "fileDownload": "-", "urlDownload": "-", "subjek": "", "operasi": "4", "display": "1" }]Setup Guide
Section titled “Setup Guide”1. Konfigurasi URL Aplikasi
Section titled “1. Konfigurasi URL Aplikasi”Pastikan URL frontend ILDIS sudah dikonfigurasi dengan benar di file .env atau konfigurasi Yii2, karena field urlAbstrak dan urlDetailPeraturan di-generate menggunakan urlManager->createAbsoluteUrl().
Pastikan variabel berikut sesuai dengan domain publik Anda:
FRONTEND_URL=https://ildis.example.orgJika URL tidak sesuai, link pada feed JSON akan mengarah ke http://ildis-frontend.test (default development) alih-alih domain produksi Anda.
2. Buat Cron Job
Section titled “2. Buat Cron Job”Jalankan perintah berikut untuk mengedit crontab:
crontab -eTambahkan baris untuk menjalankan feed generation setiap hari pukul 02:00:
# Generate JDIHN feed setiap hari pukul 02:000 2 * * * php /path/to/ildis/yii feed/generate-document >> /var/log/ildis-feed.log 2>&1Ganti /path/to/ildis dengan path absolut ke instalasi ILDIS Anda.
Jika menggunakan Docker, cron job sudah dikonfigurasi di docker/cron/crontab:
# Run feed/generate-document every day at 2:00 AM0 2 * * * php /var/www/yii feed/generate-document >> /var/log/cron.log 2>&1Container cron dan app berbagi volume feed_data yang dipasang di /var/www/feed, sehingga file JSON yang dihasilkan langsung tersedia untuk web server.
Untuk menjalankan manual di luar jadwal:
docker compose exec cron php /var/www/yii feed/generate-documentDi lingkungan Vagrant, SSH ke VM dan tambahkan cron job:
vagrant sshsudo crontab -eTambahkan:
0 2 * * * php /var/www/ildis/yii feed/generate-document >> /var/log/ildis-feed.log 2>&13. Pastikan Folder feed/ Bisa Diakses Publik
Section titled “3. Pastikan Folder feed/ Bisa Diakses Publik”File JSON harus tersedia secara publik melalui web server. Nginx secara default melayani file di direktori feed/ sebagai static file.
Verifikasi akses dengan curl:
curl -I https://ildis.example.org/feed/document.jsonRespons yang diharapkan:
HTTP/1.1 200 OKContent-Type: application/json4. Daftarkan URL Feed ke Portal JDIHN
Section titled “4. Daftarkan URL Feed ke Portal JDIHN”Setelah feed JSON dapat diakses publik:
- Login ke akun anggota JDIHN di portal JDIHN
- Masuk ke halaman pengaturan akun instansi
- Daftarkan URL feed:
https://<domain-anda>/feed/document.json - Simpan konfigurasi
Portal JDIHN akan mulai menarik data dari URL tersebut secara berkala.
Verifikasi
Section titled “Verifikasi”-
Jalankan perintah feed secara manual
Terminal window php /path/to/ildis/yii feed/generate-documentOutput yang diharapkan:
Dokumen feed berhasil digenerate ke: /path/to/ildis/feed/document.json -
Cek file JSON ter-generate
Terminal window ls -la feed/document.jsonPastikan file ada dan ukurannya lebih dari 0 byte.
-
Validasi format JSON
Terminal window python3 -m json.tool feed/document.json > /dev/null && echo "Valid JSON" || echo "Invalid JSON"Atau gunakan
jq:Terminal window cat feed/document.json | jq '.[0].idData' 2>/dev/nullJika output menampilkan ID dokumen, feed JSON valid.
-
Cek akses publik
Terminal window curl -s https://ildis.example.org/feed/document.json | head -c 200Pastikan respons berisi JSON array yang dimulai dengan
[. -
Verifikasi di Portal JDIHN
Setelah mendaftarkan URL feed, cek di dashboard JDIHN apakah data sudah masuk. Proses sinkronisasi mungkin membutuhkan waktu hingga 24 jam.
Troubleshooting
Section titled “Troubleshooting”File document.json tidak ada
Section titled “File document.json tidak ada”Periksa apakah perintahCLI berjalan dengan benar:
php /path/to/ildis/yii feed/generate-documentJika muncul error database connection, periksa konfigurasi .env dan pastikan MySQL/MariaDB berjalan.
Feed JSON kosong ([])
Section titled “Feed JSON kosong ([])”Feed hanya menyertakan dokumen dengan is_publish = 1. Jika array kosong, berarti belum ada dokumen yang dipublikasikan. Publikasikan minimal satu dokumen di backend, lalu jalankan ulang perintah feed.
Error 403 Forbidden saat mengakses /feed/document.json
Section titled “Error 403 Forbidden saat mengakses /feed/document.json”Periksa permission file dan direktori:
chmod -R 775 feed/chown -R www-data:www-data feed/Error 404 saat mengakses /feed/document.json
Section titled “Error 404 saat mengakses /feed/document.json”Pastikan nginx/apache melayani direktori feed/ sebagai static file. Untuk nginx, konfigurasi try_files harus membolehkan akses langsung:
location / { try_files $uri $uri/ /index.php$is_args$args;}URL urlAbstrak atau urlDetailPeraturan mengarah ke ildis-frontend.test
Section titled “URL urlAbstrak atau urlDetailPeraturan mengarah ke ildis-frontend.test”URL di feed di-generate menggunakan konfigurasi urlManager ILDIS. Pastikan variabel FRONTEND_URL di .env sudah sesuai dengan domain produksi Anda, bukan domain development.
Cron job tidak berjalan
Section titled “Cron job tidak berjalan”Periksa log cron:
grep CRON /var/log/syslogAtau cek log ILDIS feed:
cat /var/log/ildis-feed.logPastikan path di crontab menggunakan path absolut ke php dan yii:
# Gunakan path absolut0 2 * * * /usr/bin/php /path/to/ildis/yii feed/generate-document >> /var/log/ildis-feed.log 2>&1Referensi Teknis
Section titled “Referensi Teknis”| Komponen | Lokasi |
|---|---|
| CLI Command | php yii feed/generate-document |
| Controller | console/controllers/FeedController.php |
| Model | backend/models/DokumenJdih.php |
| Output File | feed/document.json (alias: @feed/document.json) |
| JSON Schema | schema/document-schema.json |
| Docker Volume | feed_data (shared antara app dan cron) |
| Cron Schedule (Docker) | docker/cron/crontab |
| Bootstrap Alias | common/config/bootstrap.php |