Add grabbing.md
This commit is contained in:
parent
f058e25293
commit
44e2052eca
|
|
@ -0,0 +1,68 @@
|
|||
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."
|
||||
Loading…
Reference in New Issue