Kali ini kita akan bereksperimen mencari konten masakan khas tiap-tiap kabupaten/ kota menggunakan AI. Kali ini kita pakai Gemini yang gratis.
Pertama kita siapkan dulu nama nama daerahnya pada file text.
kab.txt
kode|kab|prov
11.01|Kabupaten Aceh Selatan|Aceh
11.02|Kabupaten Aceh Tenggara|Aceh
11.03|Kabupaten Aceh Timur|Aceh
11.04|Kabupaten Aceh Tengah|Aceh
11.05|Kabupaten Aceh Barat|Aceh
11.06|Kabupaten Aceh Besar|Aceh
11.07|Kabupaten Pidie|Aceh
11.08|Kabupaten Aceh Utara|Aceh
11.09|Kabupaten Simeulue|Aceh
11.10|Kabupaten Aceh Singkil|Aceh
11.11|Kabupaten Bireuen|Aceh
11.12|Kabupaten Aceh Barat Daya|Aceh
11.13|Kabupaten Gayo Lues|Aceh
11.15|Kabupaten Nagan Raya|Aceh
11.14|Kabupaten Aceh Jaya|Aceh
11.17|Kabupaten Bener Meriah|Aceh
11.18|Kabupaten Pidie Jaya|Aceh
11.16|Kabupaten Aceh Tamiang|Aceh
11.72|Kota Sabang|Aceh
11.74|Kota Langsa|Aceh
11.73|Kota Lhokseumawe|Aceh
11.75|Kota Subulussalam|Aceh
Kemudian saya akan membuat text loop, menulis semua nama daerah satu per satu dengan PHP. karena main di command line maka saya siapkan juga warnanya biar cute.
<?php
// Buka file kab.txt
$file = fopen("kab.txt", "r");
// Kode ANSI untuk warna
$red = "\033[31m"; // Merah
$green = "\033[32m"; // Hijau
$yellow = "\033[33m"; // Kuning
$blue = "\033[34m"; // Biru
$reset = "\033[0m"; // Reset ke warna default
if ($file) {
// Lewati baris pertama karena itu adalah header
fgets($file);
// Baca baris per baris
$no = 0;
while (($line = fgets($file)) !== false) {
$no = $no + 1;
// Pisahkan data berdasarkan "|"
$data = explode("|", trim($line));
// Pastikan ada 3 elemen sebelum menampilkan
if (count($data) === 3) {
list($kode, $kabupaten, $provinsi) = $data;
// Tampilkan satu per satu
echo "Kode: $kode ";
echo "Kabupaten: $kabupaten ";
echo "Provinsi: $provinsi \n";
echo "{$green}Teks ini berwarna merah{$reset}\n";
}
if($no == 3) { exit("{$red}[WARNING]{$reset} paksa exit \n"); }
}
fclose($file);
} else {
echo "Gagal membuka file.";
}
?>
Nah, setelah bisa looping nama daerah satu satu kita akan ambil komponen $kode $kabupaten dan $provinsi
Serta menggabungkan dengan memanggil Gemini
Hmm sekalian juga simpan ke data.txt aliah script hampir jadi.
Oh iya untuk testing saya stop di baris ke 3 ya....
Kode lengkap
<?php
// Buka file kab.txt
$file = fopen("kab.txt", "r");
$file_hasil = 'data.txt';
$apiKey = "ndiasmundh3nd45m03";
$url = "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-pro-exp-02-05:generateContent?key=$apiKey";
// Kode ANSI untuk warna
$red = "\033[31m"; // Merah
$green = "\033[32m"; // Hijau
$yellow = "\033[33m"; // Kuning
$blue = "\033[34m"; // Biru
$reset = "\033[0m"; // Reset ke warna default
if ($file) {
// Lewati baris pertama karena itu adalah header
fgets($file);
// Baca baris per baris
$no = 0;
while (($line = fgets($file)) !== false) {
$no = $no + 1;
// Pisahkan data berdasarkan "|"
$datax = explode("|", trim($line));
// Pastikan ada 3 elemen sebelum menampilkan
if (count($datax) === 3) {
list($kode, $kabupaten, $provinsi) = $datax;
$data = [
"contents" => [
[
"role" => "user",
"parts" => [
["text" => "sebutkan nama masakan khas di $kabupaten provinsi $provinsi minimal 10. buatkan dalam bentuk file csv dengan kolom terdiri dari: kode wilayah,kabupaten, provinsi, nama masakan, keterangan. tiap kolom dipisahkan dengan | dan tiap baris dipisahkan dengan line break. Untuk keterangan buat dalam 1 paragraf kira-kira 240 kata yang meliputi bahan, tampilan, rasa dan info lainnya. Dalam bahasa Indonesia. tidak usah diberi penjelasan cukup tampilkan data saja! kode wilayah = $kode . hilangka ```
dan header row. hilangkan baris kosong. "]
]
]
],
"generationConfig" => [
"temperature" => 1,
"topK" => 64,
"topP" => 0.95,
"maxOutputTokens" => 8192,
"responseMimeType" => "text/plain"
]
];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Content-Type: application/json"]);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
$response = curl_exec($ch);
curl_close($ch);
if ($response === false) {
echo "Curl error: " . curl_error($ch);
} else {
$responseData = json_decode($response, true);
if (isset($responseData['candidates'][0]['content']['parts'][0]['text'])) {
$hasil = $responseData['candidates'][0]['content']['parts'][0]['text'];
// Buka file dengan mode append (a), sehingga data akan ditambahkan ke baris baru
$handle = fopen($file_hasil, 'a');
// Cek apakah file berhasil dibuka
if ($handle) {
// Tambahkan teks dengan newline di akhir
fwrite($handle, $hasil . PHP_EOL);
// Tutup file
fclose($handle);
unset($hasil);
echo "{$green}[SUCCESS]{$reset} Baris $no berhasil \n";
} else {
echo "{$red}[WARNING]{$reset} Baris $no gagal buka file \n";
}
} else {
echo "{$red}[WARNING]{$reset} Baris $no no response \n";
}
}
}
if($no == 3) { exit("{$red}[WARNING]{$reset} paksa exit \n"); }
}
fclose($file);
} else {
echo "Gagal membuka file.";
}
?>
Hasile gini
Jalan di background
Kemudian untuk menjalankannya tanpa henti, kita bisa menjalankannya di terminal cpanel:
nohup php script.php > output.log 2>&1 &
Tampilan terminal cpanel
Ternyata menyisakan 1 baris baru tiap ganti wilayah. Tidak apa=apa lah nanti bisa dibersihkan secara manual atau by sesuatu.
Ternyata sulit juga, tetap tampil baris kosong. intinya sulit main di promptnya, enakan pakai cara manual setelah file selesai dibuat