4.4
Username Tracker
Opsi nomor 4 pada menu, Username Tracker, dipetakan ke fungsi TrackLu melalui 'func': TrackLu di list options (GhostTR.py:197-2001). Fungsi itu dideklarasikan dengan dekorator is_option, sehingga run_banner tampil lebih dulu sebelum ia membaca satu username lewat input dan masuk ke blok try (GhostTR.py:121-1242). Rincian dekorator tersebut dibahas di Banner, Warna ANSI, dan Helper.
Siklus pemeriksaan satu username
TrackLu tidak memanggil satu endpoint agregator. Ia menyiapkan results = {}, lalu menyusun list social_media berisi 24 entri, masing-masing pasangan url bertemplat {} dan name yang dipakai sebagai label hasil (GhostTR.py:125-1513). Loop sesudahnya mengisi templat dengan username target, meminta URL itu ke requests, lalu menulis satu nilai ke results untuk setiap situs (GhostTR.py:152-1584).
sequenceDiagram
autonumber
actor U as User
participant T as TrackLu
participant L as social_media
participant H as requests
participant D as results
U->>T: input Enter Username
T->>D: siapkan dict kosong
loop tiap site pada social_media
T->>L: ambil site url
L-->>T: templat berisi {}
T->>H: requests.get dengan url hasil format
H-->>T: response
alt response.status_code == 200
T->>D: results name diisi url
else status lain
T->>D: results name diisi Username not found !
end
end
loop tiap pasangan pada results
T-->>U: baris [ + ] site dan nilainya
end
%% fig: Siklus TrackLu untuk satu username
%% desc: Satu username diuji ke setiap entri social_media secara berurutan, dan status 200 menentukan nilai yang masuk ke results.Request dijalankan satu per satu di dalam loop, sehingga urutan pemeriksaan sama dengan urutan list: Facebook, Twitter, Instagram, sampai We Heart It. Tidak ada timeout, headers, atau session pada pemanggilan requests.get (GhostTR.py:152-1584).
Percabangan status ke results
Satu-satunya sinyal "ditemukan" adalah response.status_code == 200 (GhostTR.py:152-1584). Status lain tidak memisahkan 404, 403, atau 500; semuanya jatuh ke string Username not found ! yang sudah membawa kode warna Ye di dalam nilainya (GhostTR.py:152-1584). Kedua cabang itu bertemu lagi di results sebelum dicetak.
graph LR
A["username dari input"] --> B["social_media 24 entri"]
B --> C["url = site url + format username"]
C --> D["requests.get url"]
D --> E{"status_code == 200"}
D -.->|exception| I["print Error lalu return"]
E -->|ya| F["results[name] = url"]
E -->|tidak| G["results[name] = Username not found !"]
F --> H["print header dan baris per situs"]
G --> H
style A fill:#f59e0b,color:#000
style B fill:#f59e0b,color:#000
style F fill:#2d7d46,color:#fff
style G fill:#dc2626,color:#fff
style I fill:#dc2626,color:#fff
style H fill:#8b5cf6,color:#fff
%% fig: Percabangan status HTTP ke dict results
%% desc: Hasil tiap request dipetakan ke satu kunci results, lalu semua cabang gabung pada pencetakan header dan baris per situs.| Aspek | Nilai di TrackLu |
|---|---|
Jumlah entri social_media | 24 |
Kunci unik di results | 23, karena nama Snapchat dipakai dua kali |
Nilai saat status_code == 200 | results[name] = url |
| Nilai saat status lain | Username not found ! dengan prefiks warna Ye |
timeout pada request | tidak diset |
| Penentu urutan cetak | urutan penyisipan kunci pada results |
Nama Snapchat muncul dua kali di list dengan URL yang sama, https://www.snapchat.com/add/{} (GhostTR.py:136-1485). Karena results ber-key site['name'], penulisan kedua menimpa yang pertama, jadi 24 entri hanya menghasilkan 23 kunci (GhostTR.py:152-1584).
Pola URL yang diperiksa
Semua entri memakai satu tempat kosong {} yang diisi username lewat str.format (GhostTR.py:152-1584). Perbedaan antarentri hanya path di sekitar tempat kosong itu (GhostTR.py:125-1513).
| Pola path | Situs |
|---|---|
/{} tepat setelah domain | Facebook, Twitter, Instagram, GitHub, Pinterest, Tumblr, Youtube, Behance, Periscope, Twitch, Dribbble, Ello, Telegram, We Heart It |
https://soundcloud.com/{} tanpa www | SoundCloud |
/@{} | TikTok, Medium, Product Hunt |
/in/{} | |
/add/{} | Snapchat, ditulis dua kali |
/profile/{} | Quora |
/people/{} | Flickr |
/stumbler/{} | StumbleUpon |
Format keluaran
Setelah loop selesai, TrackLu mencetak header ========== SHOW INFORMATION USERNAME ==========, satu baris kosong, lalu satu baris per kunci results dengan bentuk [ + ] <site> : <nilai> (GhostTR.py:163-1666). URL yang ditemukan tampil hijau karena prefiks {Gr} pada format string, sedangkan penanda tidak ditemukan tetap kuning karena nilai string-nya sendiri diawali Ye (GhostTR.py:163-1666).
README menyertakan tangkapan layar menu ini tepat di atas keterangan bahwa pencarian dilakukan pada username target di media sosial (README.md:45-487). Pada gambar tersebut header yang tampak berbunyi GHOST - TRACKER USERNAME, sementara run_banner di commit ini menulis GHOST - TRACKER - IP ADDRESS (GhostTR.py:275-2828).
Kegagalan dan jebakan
Blok try menutup hampir seluruh badan fungsi, dari input sampai loop request (GhostTR.py:121-1242). Bila satu request melempar exception, TrackLu mencetak Error : {e} berwarna merah lalu return tanpa mencetak header maupun baris hasil (GhostTR.py:159-1619). Kegagalan pada situs terakhir pun membuang semua hasil yang sudah terkumpul di results.
⚠️
requests.getdipanggil 24 kali secara berurutan tanpatimeout(GhostTR.py:152-1584). Satu host yang menggantung menahan seluruh pemeriksaan, dan exception dari request tersebut menghentikan fungsi sebelum hasil dicetak (GhostTR.py:159-1619).
⚠️ Ambang
200tidak membedakan profil yang benar-benar ada dari halaman error yang tetap membalas 200 (GhostTR.py:152-1584). Verifikasi manual tetap diperlukan sebelum menyimpulkan sebuah username ditemukan.
Hasil pemeriksaan tidak disimpan ke berkas atau database; fungsi hanya mencetaknya ke terminal lalu mengembalikan kendali ke menu. Alur kembali ke menu dan penantian Press enter to continue dijelaskan di Loop Menu dan Dispatch Opsi, sedangkan batas penggunaan fitur ini dibahas di Batasan dan Etika Penggunaan.