Grab detail JDIHN berdasarkan id dan menyimpannya menjadi csv
<?php
// Pastikan file simple_html_dom.php ada di satu folder
require 'simple_html_dom.php';
// --------------------------------------------------------------------------
// INPUT DARI USER
// --------------------------------------------------------------------------
echo "Masukkan ID awal: ";
$awal = trim(readline());
echo "Masukkan ID akhir: ";
$akhir = trim(readline());
// Validasi input
if (!is_numeric($awal) || !is_numeric($akhir) || $awal > $akhir) {
die("Input tidak valid. Pastikan awal dan akhir adalah angka dan awal <= akhir.\n");
}
// --------------------------------------------------------------------------
// SETUP NAMA FILE DINAMIS
// --------------------------------------------------------------------------
$filename = $awal."_".$akhir."_detail_JDIHN.csv";
echo "--------------------------------------------------\n";
echo "Proses akan dimulai dari ID $awal hingga $akhir.\n";
echo "Hasil akan disimpan dalam file: $filename\n";
echo "--------------------------------------------------\n";
// --------------------------------------------------------------------------
// FUNGSI-FUNGSI HELPER
// --------------------------------------------------------------------------
// FITUR: Mengambil ID dari URL (tetap dipertahankan untuk modularitas)
function getIdFromUrl($url) {
$path = parse_url($url, PHP_URL_PATH);
$segments = explode('/', $path);
$key = array_search('detail', $segments);
if ($key !== false && isset($segments[$key + 1])) {
return $segments[$key + 1];
}
return 'unknown';
}
// LANGKAH 1: Ambil HTML via cURL
function getHTML($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)');
curl_setopt($ch, CURLOPT_TIMEOUT, 30); // Timeout 30 detik
$output = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
if ($http_code != 200) {
return null; // Kembalikan null jika gagal (misal 404)
}
return $output;
}
// --------------------------------------------------------------------------
// SETUP CSV
// --------------------------------------------------------------------------
$file_exists = file_exists($filename);
// Buka file untuk append ('a'). Ini akan menambah data di akhir file.
$fp = fopen($filename, 'a');
if (!$fp) {
die("Gagal membuka/membuat file CSV. Cek permission folder.\n");
}
// Jika file belum ada, tulis header dan BOM untuk kompatibilitas Excel
if (!$file_exists) {
// Tambahkan BOM agar UTF-8 terbaca benar di Excel
fputs($fp, $bom = (chr(0xEF) . chr(0xBB) . chr(0xBF)));
// Definisikan header secara manual agar lebih robust
$headers = [
'id', 'judul', 'jenis_peraturan', 'nomor_peraturan', 'tahun_peraturan',
'tentang', 'tempat_penetapan', 'tanggal_penetapan', 'tanggal_pengundangan',
'status', 'bahasa', 'lokasi', 'sumber', 'bidang_hukum', 'sub_bidang_hukum', 'link_download'
];
fputcsv($fp, $headers);
echo "File $filename dibuat dan header ditulis.\n";
}
// --------------------------------------------------------------------------
// PROSES LOOPING
// ----------
echo "Memulai proses...\n";
for ($i = $awal; $i <= $akhir; $i++) {
echo "Memproses ID: $i\r"; // Gunakan \r untuk menimpa baris, agar output lebih rapi
// 1. Konfigurasi URL (dinamis berdasarkan loop)
$url = "https://jdihn.go.id/pencarian/detail/" . $i;
// 2. Ambil HTML
$html_content = getHTML($url);
if ($html_content === null) {
// echo "Halaman tidak ditemukan (HTTP Error) atau timeout. Melewati ID $i.\n";
continue; // Lanjut ke iterasi berikutnya
}
// 3. Parsing HTML
$html = str_get_html($html_content);
if (!$html) {
// echo "Gagal mem-parsing HTML. Melewati ID $i.\n";
continue;
}
// Inisialisasi array data untuk ID saat ini
$data = [
'id' => $i // Gunakan $i langsung sebagai ID
];
// A. Ambil Judul
$title_element = $html->find('h4', 0);
$data['judul'] = $title_element ? trim($title_element->plaintext) : '';
// Jika judul kosong, kemungkinan besar ini adalah halaman 404 atau tidak valid
if (empty($data['judul'])) {
// echo "Judul tidak ditemukan, kemungkinan halaman tidak valid. Melewati ID $i.\n";
$html->clear();
continue;
}
// B. Ambil Metadata Tabel
foreach($html->find('table tr') as $row) {
$cols = $row->find('td');
if (count($cols) >= 2) {
$label = trim(str_replace(':', '', $cols[0]->plaintext));
$value = trim(end($cols)->plaintext);
if (!empty($label)) {
$key = strtolower(preg_replace('/[^a-zA-Z0-9]/', '_', $label));
$key = preg_replace('/_+/', '_', $key);
$data[$key] = $value;
}
}
}
// C. Ambil Link Download
$download_link = "";
foreach($html->find('a') as $element) {
if (strpos(strtolower($element->plaintext), 'unduh') !== false || strpos(strtolower($element->plaintext), 'download') !== false) {
$download_link = $element->href;
break;
}
}
if ($download_link && strpos($download_link, 'http') === false) {
$download_link = "https://jdihn.go.id" . $download_link;
}
$data['link_download'] = $download_link;
// Bersihkan memori DOM
$html->clear();
// Simpan data ke CSV (hanya baris data, bukan header)
fputcsv($fp, $data);
}
// --------------------------------------------------------------------------
// SELESAI
// --------------------------------------------------------------------------
// Tutup file setelah loop selesai
fclose($fp);
echo "\n--------------------------------------------------\n";
echo "Proses selesai! Semua data telah disimpan ke file: $filename\n";
echo "--------------------------------------------------\n";
hasil berupa csv:
id,judul,jenis_peraturan,nomor_peraturan,tahun_peraturan,tentang,tempat_penetapan,tanggal_penetapan,tanggal_pengundangan,status,bahasa,lokasi,sumber,bidang_hukum,sub_bidang_hukum,link_download
327,"TIM ASISTENSI E-BUDGETING RENCANA KERJA SATUAN KERJA PERANGKAT DAERAH TINGKAT KOTA BANDUNG TAHUN ANGGARAN 2017","JDIH Pemerintah Kota Bandung","KEPUTUSAN WALIKOTA",050/Kep.697-Bappeda/2016,2016,,KEPWAL,,-,2023-09-04,-,-,-,,,20190806061944531547339.pdf,20190806061944531547339.pdf,,,https://jdih.bandung.go.id/home/produk-hukum/peraturan-perundang-undangan-daerah/3382</button>,https://jdihn.go.id/unduhan
329,"PERUBAHAN ATAS PERATURAN WALIKOTA BANDUNG NOMOR 548 TAHUN 2016 TENTANG TATA CARA PENERAPAN SANKSI ADMINISTRATIF DALAM PENYELENGGARAAN BANGUNAN GEDUNG","JDIH Pemerintah Kota Bandung","PERATURAN WALIKOTA",1032,2016,,PERWAL,,-,2023-09-04,-,-,-,,,"Perwal 1032 Tahun 2016 SANKSI OTENTIFIKASI.pdf","Perwal 1032 Tahun 2016 SANKSI OTENTIFIKASI.pdf",,,https://jdih.bandung.go.id/home/produk-hukum/peraturan-perundang-undangan-daerah/3383</button>,https://jdihn.go.id/unduhan
335,KEPEMUDAAN,"JDIH Pemerintah Kota Bandung","PERATURAN DAERAH KOTA",1,2016,,PERDA,,-,2023-09-04,-,-,-,,,"Perda No. 1 tahun 2016 ttg. Kepemudaan.pdf","Perda No. 1 tahun 2016 ttg. Kepemudaan.pdf",,,https://jdih.bandung.go.id/home/produk-hukum/peraturan-perundang-undangan-daerah/3384</button>,https://jdihn.go.id/unduhan
348,"PERUBAHAN KEDUA ATAS PERATURAN WALIKOTA BANDUNG NOMOR 495 TAHUN 2015 TENTANG STANDAR OPERASIONAL PROSEDUR PELAYANAN PERIZINAN TERPADU","JDIH Pemerintah Kota Bandung","PERATURAN WALIKOTA",265,2016,,PERWAL,,-,2023-09-04,-,-,-,,,20201201003442704186689.pdf,20201201003442704186689.pdf,,,https://jdih.bandung.go.id/home/produk-hukum/peraturan-perundang-undangan-daerah/3260</button>,https://jdihn.go.id/unduhan
363,"Tim Ahli Bangunan Gedung Kota Bandung Masa Bakti 2015-2016","JDIH Pemerintah Kota Bandung","KEPUTUSAN WALIKOTA",640/Kep.977-DisTarCip/2015,2015,,KEPWAL,,-,2023-09-04,-,-,-,,,"SLN SK 640_Kep.977-DisTarCip_2015 perub TABG 2015-2016.pdf","SLN SK 640_Kep.977-DisTarCip_2015 perub TABG 2015-2016.pdf",,,https://jdih.bandung.go.id/home/produk-hukum/peraturan-perundang-undangan-daerah/3248</button>,https://jdihn.go.id/unduhan
364,"PERUBAHAN ATAS PERATURAN DAERAH KOTA BANDUNG NOMOR 24 TAHUN 2012 TENTANG PENYELENGGARAAN DAN PENANGANAN KESEJAHTERAAN SOSIAL","JDIH Pemerintah Kota Bandung","PERATURAN DAERAH KOTA",5,2015,,PERDA,,-,2023-09-04,-,-,-,,,"Perda No. 5 Tahun 2015 kesos.pdf","Perda No. 5 Tahun 2015 kesos.pdf",,,https://jdih.bandung.go.id/home/produk-hukum/peraturan-perundang-undangan-daerah/3270</button>,https://jdihn.go.id/unduhan
368,"Pembentukan Forum Komunikasi Anak Kota Bandung Periode Tahun 2015 2017","JDIH Pemerintah Kota Bandung","KEPUTUSAN WALIKOTA","464/Kep.981 - BPPKB/2015",2015,,KEPWAL,,-,2023-09-04,-,-,-,,,201907220300001983419264.pdf,201907220300001983419264.pdf,,,https://jdih.bandung.go.id/home/produk-hukum/peraturan-perundang-undangan-daerah/3249</button>,https://jdihn.go.id/unduhan
448,"Peraturan Daerah Kotamadya Daerah Tingkat II Salatiga Nomor 18 Tahun 1977 tentang Mengubah untuk Ketiga kalinya Peraturan Daerah tentang Peraturan Daerahgangan dan Penjualan Susu","JDIH Pemerintah Kota Salatiga","PERATURAN DAERAH KOTA",18,1977,-,PERDA,,-,1978-02-27,-,Berlaku,-,"LD Kotamadya Daerah Tingkat II Salatiga 1977 (18)",Indonesia,1977pd3332018.pdf,,,,https://jdih.salatiga.go.id/dokumen/view?id=1363</button>,https://jdihn.go.id/unduhan
463,"Peraturan Daerah Kotamadya Daerah Tingkat II Salatiga Nomor 2 Tahun 1974 tentang Pasar yang Dikuasai oleh Pemerintah Daerah Kotamadya Salatiga","JDIH Pemerintah Kota Salatiga","PERATURAN DAERAH KOTA",2,1974,-,PERDA,,-,1978-11-28,-,Berlaku,-,"LD Kotamadya Daerah Tingkat II Salatiga 1974 (2)",Indonesia,1974pd3332002.pdf,,,,https://jdih.salatiga.go.id/dokumen/view?id=1351</button>,https://jdihn.go.id/unduhan
464,"Peraturan Daerah Kotamadya Daerah Tingkat II Salatiga Nomor 5 Tahun 1980 tentang Penetapan Sisa Perhitungan Anggaran Pendapatan dan Belanja Daerah Kotamadya Daerah Tingkat II Salatiga Tahun Anggaran 1976/1977","JDIH Pemerintah Kota Salatiga","PERATURAN DAERAH KOTA",5,1980,-,PERDA,,-,1980-06-04,-,Berlaku,-,"LD Kotamadya Daerah Tingkat II Salatiga 1980 (5)",Indonesia,1980pd3332005.pdf,,,,https://jdih.salatiga.go.id/dokumen/view?id=1373</button>,https://jdihn.go.id/unduhan
468,"Peraturan Daerah Kotamadya Daerah Tingkat II Salatiga Nomor 1 Tahun 1975 tentang Mengubah Untuk Ketiga Kali Peraturan Daerah tentang Pajak kendaraan","JDIH Pemerintah Kota Salatiga","PERATURAN DAERAH KOTA",1,1975,-,PERDA,,-,1976-11-01,-,Berlaku,-,"LD Kotamadya Daerah Tingkat II Salatiga 1975 (1)",Indonesia,1975pd3332001.pdf,,,,https://jdih.salatiga.go.id/dokumen/view?id=1352</button>,https://jdihn.go.id/unduhan

Top comments (0)