From 44e2052eca3ee92b70a0ece856284d57b3068e87 Mon Sep 17 00:00:00 2001 From: andri Date: Tue, 2 Dec 2025 14:00:52 +0000 Subject: [PATCH] Add grabbing.md --- grabbing.md | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 grabbing.md diff --git a/grabbing.md b/grabbing.md new file mode 100644 index 0000000..2aa1eba --- /dev/null +++ b/grabbing.md @@ -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." \ No newline at end of file