Ini adalah inti dari logika script tersebut. Teknik ini disebut **"Dynamic Payload Injection based on Local Topology"**. Secara sederhana: Script tidak menembak data sembarangan, tetapi **membaca "Peta Wilayah" (Tabel RT)** yang ada di database lokal Anda terlebih dahulu, lalu menggunakan data tersebut sebagai **filter** saat meminta data ke API. Berikut adalah penjelasan teknis untuk developer mengenai bagaimana ID Kecamatan, Kelurahan, RW, dan RT "disuntikkan" ke dalam request: ----- ### 1\. Sumber Data (The Source) Script tidak menulis manual ID-ID tersebut di dalam kodingan (hardcoded), melainkan mengambilnya dari database lokal (`models.py` class `RT`). * **Kode:** `rt_list = RT.query.all()` * **Artinya:** "Ambil semua daftar RT yang kita punya di database lokal." * **Implikasi:** Jika di database lokal tabel `RT` ada 100 baris data, script akan melakukan 100 kali request berbeda. ### 2\. Iterasi & Ekstraksi (The Loop) Script melakukan *looping* (perulangan) pada daftar RT tersebut. Di setiap putaran, script "mencabut" ID wilayah dari objek database. * **Kode:** `for idx, rt_obj in enumerate(rt_list):` * **Ekstraksi:** * `rt_obj.id_kec` (misal: 3501) * `rt_obj.id_kel` (misal: 2001) * `rt_obj.no_rw` (misal: 05) * `rt_obj.no_rt` (misal: 12) ### 3\. Konstruksi Payload (The Injection) Inilah jawaban utamanya. ID-ID wilayah tersebut dimasukkan ke dalam **Dictionary Python** (yang akan jadi JSON). API target mewajibkan pengirim (client) mengirimkan parameter ini agar server tahu data mana yang diminta. [Image of JSON payload structure diagram for API request] Lihat bagian kode ini di script Anda: ```python payload = { "id": int(prog_id), # ID Program (Bansos, dll) "id_kec": str(rt_obj.id_kec), # <--- ID Kecamatan disuntikkan di sini "id_kel": str(rt_obj.id_kel), # <--- ID Kelurahan disuntikkan di sini "rw": str(rt_obj.no_rw), # <--- RW disuntikkan di sini "rt": str(rt_obj.no_rt), # <--- RT disuntikkan di sini "start": "0", "limit": "500" } ``` ### 4\. Pengiriman Request (The Execution) Saat `requests.post(url, json=payload)` dijalankan, script mengirim amplop tertutup berisi JSON di atas. **Logika di sisi Server API (Target):** > "Oh, user ini meminta data Program Bansos (id:1), tapi HANYA untuk Kec 3501, Kel 2001, RW 05, RT 12. Oke, saya filter database saya dan kirim balik data warga di titik itu saja." ----- ### Teks Penjelasan untuk Developer (Copy-Paste) Anda bisa memberikan penjelasan berikut ini agar developer langsung paham: > "Teknik pengambilan datanya menggunakan **Zone-Based Filtering** melalui HTTP POST Body. > > 1. Script melakukan query `SELECT * FROM rt` di database lokal untuk mendapatkan daftar target wilayah yang valid. > 2. Di dalam loop, script secara dinamis menyusun **JSON Payload** dengan menyuntikkan value `id_kec`, `id_kel`, `rw`, dan `rt` yang diambil dari row database tersebut. > 3. API Endpoint `/qv2k9` kemudian merespons dengan mengembalikan list warga **spesifik hanya untuk koordinat wilayah RT/RW tersebut** (bukan dump global). > > Jadi, parameter wilayah **didikte oleh data master RT yang ada di database lokal (table `rt`)**, bukan input manual user."