DEV Community

Eko Priyanto
Eko Priyanto

Posted on

Mencari konten dengan AI dan menyimpannya di text

Image description

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
Enter fullscreen mode Exit fullscreen mode

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.";
}
?>
Enter fullscreen mode Exit fullscreen mode

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.";
}
?>


Enter fullscreen mode Exit fullscreen mode

Hasile gini

Image description

Tampilane gini
Image description

Jalan di background
Kemudian untuk menjalankannya tanpa henti, kita bisa menjalankannya di terminal cpanel:



nohup php script.php > output.log 2>&1 &


Enter fullscreen mode Exit fullscreen mode

Tampilan terminal cpanel

Image description

Hasil di cpanel
Image description

Image description
Ternyata menyisakan 1 baris baru tiap ganti wilayah. Tidak apa=apa lah nanti bisa dibersihkan secara manual atau by sesuatu.

Image description
Ternyata sulit juga, tetap tampil baris kosong. intinya sulit main di promptnya, enakan pakai cara manual setelah file selesai dibuat

Top comments (0)