Script PHP untuk scrape JDIHN menggunakan counting mundur.
Yup funny...
Kode lengkap
<?php
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
Top comments (0)