ApiTerasKotaMagelang/grabbing.md

68 lines
3.2 KiB
Markdown

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."