scrape JDIHN menggunakan PHP DiDOM dan supabase
Script PHP untuk scrape JDIHN menggunakan counting mundur. Yup funny... Kode lengkap

Script PHP untuk scrape JDIHN menggunakan counting mundur.
Yup funny...
Kode lengkap
require 'vendor/autoload.php';
use DiDom\Document;
function safe_url($text) {
return trim(preg_replace('/[^a-z0-9]+/i', '_', strtolower($text)), '_');
}
function insertToSupabase($data) {
// Supabase API Config
$supabaseUrl = 'https://ndahe.supabase.co';
$supabaseKey = 'ndi45m03';
$tableName = 'peraturan'; // Nama tabel di Supabase
// Mengonversi array ke format asosiatif
$formattedData = [];
foreach ($data as $item) {
if (!empty($item[1])) { // Abaikan field kosong
$formattedData[$item[0]] = $item[1];
}
}
$jsonData = json_encode([$formattedData]);
$ch = curl_init("$supabaseUrl/rest/v1/$tableName");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Content-Type: application/json",
"apikey: $supabaseKey",
"Authorization: Bearer $supabaseKey",
"Prefer: return=representation" // Mengembalikan data yang telah di-insert
]);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return [
'status' => $httpCode,
'response' => json_decode($response, true)
];
}
//1987000
//1986526 working
for ($i = 1986526; $i >= 0; $i--) {
echo "[$i] ";
$uri = "https://jdihn.go.id/pencarian/detail/$i";
$html = @file_get_contents($uri); // Tambahkan @ untuk menghindari warning
// Jika gagal mengambil halaman, lanjutkan ke iterasi berikutnya
if ($html === false) {
echo " \e[31m page not found \e[0m \n";
continue;
}
$document = new Document($html);
// Cari elemen tabel pertama dalam halaman
$table = $document->first('table');
// Jika tabel tidak ditemukan, lanjutkan ke iterasi berikutnya
if (!$table) {
echo " \e[31m table not found \e[0m \n";
continue;
}
// Ambil semua baris dari tabel
$rows = $table->find('tr');
$data = [];
foreach ($rows as $row) {
// Ambil semua sel dari baris
$cells = $row->find('td'); // Gunakan 'th' jika ingin mengambil header
$rowData = [];
if (isset($cells[0])) {
$rowData[0] = safe_url($cells[0]->text());
}
if (isset($cells[2])) {
$links = $cells[2]->find('a');
foreach ($links as $link) {
$rowData[1] = $link->getAttribute('href');
}
if (!isset($rowData[1])) {
$rowData[1] = $cells[2]->text();
}
}
// Tambahkan data jika tidak kosong
if (!empty($rowData)) {
$data[] = $rowData;
}
}
$data[] = ["url_id", $i];
$pesan = insertToSupabase($data);
echo "\e[34m maybe \e[0m [OK] \n";
usleep(rand(100000, 500000));
}
Ini untuk bikin tabel di supabase, jangan lupa tambahkan id yang autoincreement (lupa namanya kalau di supabase)
CREATE TABLE peraturan (
asal_dokumen TEXT,
jenis_dokumen TEXT,
nomor TEXT,
tahun TEXT,
judul TEXT,
t_e_u TEXT,
singkatan_jenis TEXT,
tempat_terbit TEXT,
tanggal_penetapan TEXT,
tanggal_pengundangan TEXT,
subyek TEXT,
status TEXT,
penandatangan TEXT,
sumber TEXT,
bahasa TEXT,
unduhan TEXT,
unduhan_alternatif TEXT,
abstrak TEXT,
unduhan_abstrak_alternatif TEXT,
detil_dokumen TEXT,
url_id TEXT,
);
Jangan lupa jalankan di Terminal Cpanel
nohup php script.php