Lompat ke konten
dokumentasi.id
Commit a5cb8ad
v2
Star20 rb

Kamu membaca versi lama. Halaman ini hanya bisa dibaca.

9

Username Tracker

TrackLu adalah handler untuk opsi menu nomor 4, Username Tracker, yang didaftarkan pada list options bersama func miliknya. Fungsi ini menerima satu username, menyusun URL dari setiap entri social_media, lalu mencatat hasil per platform ke dictionary results berdasarkan response.status_code GhostTR.py:198-201 GhostTR.py:121-124.

Karena TrackLu didekorasi is_option, banner digambar lebih dulu sebelum prompt Enter Username muncul. Mekanisme dekorator itu dibahas di Banner dan Dekorator is_option; halaman ini hanya membahas isi fungsi.

Template URL per platform

Sumber seluruh pemeriksaan adalah list social_media berisi 24 entri, masing-masing sebuah dictionary dengan kunci url (template bertanda {}) dan name (label platform). Hanya Snapchat yang muncul dua kali, sehingga jumlah platform unik adalah 23 GhostTR.py:125-151.

nametemplate url
Facebookhttps://www.facebook.com/{}
Twitterhttps://www.twitter.com/{}
Instagramhttps://www.instagram.com/{}
LinkedInhttps://www.linkedin.com/in/{}
GitHubhttps://www.github.com/{}
Pinteresthttps://www.pinterest.com/{}
Tumblrhttps://www.tumblr.com/{}
Youtubehttps://www.youtube.com/{}
SoundCloudhttps://soundcloud.com/{}
Snapchathttps://www.snapchat.com/add/{}
TikTokhttps://www.tiktok.com/@{}
Behancehttps://www.behance.net/{}
Mediumhttps://www.medium.com/@{}
Quorahttps://www.quora.com/profile/{}
Flickrhttps://www.flickr.com/people/{}
Periscopehttps://www.periscope.tv/{}
Twitchhttps://www.twitch.tv/{}
Dribbblehttps://www.dribbble.com/{}
StumbleUponhttps://www.stumbleupon.com/stumbler/{}
Ellohttps://www.ello.co/{}
Product Hunthttps://www.producthunt.com/@{}
Snapchat (entri kedua)https://www.snapchat.com/add/{}
Telegramhttps://www.telegram.me/{}
We Heart Ithttps://www.weheartit.com/{}

Alur fan-out satu username

Satu input username disebar ke seluruh entri list: site['url'].format(username) menghasilkan URL konkret, requests.get(url) memanggil situs itu, dan hasilnya dipetakan kembali ke results dengan kunci site['name'] GhostTR.py:152-158. Diagram berikut menunjukkan bentuk fan-out tersebut beserta dua cabang hasilnya.

graph TD
  IN["TrackLu: Enter Username"] --> LOOP["for site in social_media (24 entri)"]
  CFG["social_media: kunci 'url' + 'name'"] --> LOOP
  LOOP --> FMT["site['url'].format(username)"]
  FMT --> REQ["requests.get(url)"]
  REQ --> FB["Facebook"]
  REQ --> GH["GitHub"]
  REQ --> IG["Instagram"]
  REQ --> TK["TikTok"]
  REQ --> TW["Twitch"]
  REQ --> REST["We Heart It dan 18 situs lain"]
  FB --> D{"status_code == 200 ?"}
  GH --> D
  IG --> D
  TK --> D
  TW --> D
  REST --> D
  D -->|"ya"| HIT["results[site['name']] = url"]
  D -->|"tidak"| MISS["results[site['name']] = 'Username not found !'"]
  RES["results = {}"] --> HIT
  HIT --> RES
  MISS --> RES
  RES --> PRINT["for site, url in results.items(): print"]
  PRINT --> FIN["SHOW INFORMATION USERNAME"]
  style RES fill:#336791,color:#fff
  style IN fill:#8b5cf6,color:#fff
  style CFG fill:#f59e0b,color:#000
  style REQ fill:#f59e0b,color:#000
  style HIT fill:#2d7d46,color:#fff
  style MISS fill:#dc2626,color:#fff
  style PRINT fill:#336791,color:#fff
%% fig: Fan-out satu username ke 24 entri social_media
%% desc: Username diformat per entri list, diperiksa lewat requests.get, lalu dicatat ke results sesuai status_code sebelum dicetak.
Fig. 1: Fan-out satu username ke 24 entri social_mediaUsername diformat per entri list, diperiksa lewat requests.get, lalu dicatat ke results sesuai status_code sebelum dicetak.

Setiap entri selalu mengisi satu kunci di results, apa pun hasil pemeriksaannya. Konsekuensinya, tahap cetak menampilkan seluruh 23 platform: yang cocok sebagai URL, yang tidak cocok sebagai teks Username not found ! GhostTR.py:152-158 GhostTR.py:159-166.

Kondisi response.status_codeNilai results[site['name']]
== 200url hasil format(username)
selain 200string f"{Ye}Username not found {Ye}!", bukan URL

Siklus satu request dan jalur kegagalan

Urutan pemanggilan berjalan serial di dalam satu for, tanpa jeda antar situs dan tanpa argumen timeout pada requests.get GhostTR.py:152-158. Seluruh blok try membungkus input sekaligus loop, sehingga satu exception dari requests langsung melompat ke except Exception as e, mencetak Error : {e}, lalu return sebelum header SHOW INFORMATION USERNAME sempat dicetak. Artinya results yang sudah terisi sebagian dibuang tanpa ditampilkan GhostTR.py:159-166.

sequenceDiagram
  participant U as user
  participant T as TrackLu
  participant Q as requests
  participant S as situs target
  U->>T: Enter Username
  loop setiap site di social_media
    T->>T: url = site['url'].format(username)
    T->>Q: requests.get(url)
    Q->>S: HTTP GET tanpa timeout
    S-->>Q: response
    Q-->>T: response
    alt status_code == 200
      T->>T: results[site['name']] = url
    else status_code != 200
      T->>T: results[site['name']] = 'Username not found !'
    end
  end
  alt Exception terangkat di mana pun di dalam try
    T-->>U: 'Error : {e}' lalu return
  else loop selesai penuh
    T-->>U: 'SHOW INFORMATION USERNAME' dan semua isi results
  end
  style U fill:#8b5cf6,color:#fff
  style T fill:#f59e0b,color:#000
%% fig: Siklus satu request TrackLu
%% desc: Setiap situs dipanggil berurutan; exception di tengah loop mengakhiri fungsi sebelum tahap cetak, sedangkan loop yang selesai penuh mencetak seluruh results.
Fig. 2: Siklus satu request TrackLuSetiap situs dipanggil berurutan; exception di tengah loop mengakhiri fungsi sebelum tahap cetak, sedangkan loop yang selesai penuh mencetak seluruh results.

⚠️ requests.get(url) dipanggil tanpa timeout dan tanpa time.sleep di antara situs. Satu situs yang menggantung menahan seluruh 24 pemeriksaan, dan exception apa pun membatalkan laporan yang sudah hampir lengkap GhostTR.py:152-158.

⚠️ Pemeriksaan hanya memakai status_code == 200. Halaman login, halaman 404 yang dikembalikan dengan status 200, atau blokir bot akan terbaca sebagai username ditemukan; sebaliknya 301/403 yang tetap menandakan akun ada akan dicatat sebagai Username not found ! GhostTR.py:155-158.

Setelah fungsi selesai mencetak, kendali kembali ke execute_option, yang meminta Press enter to continue lalu menjalankan main() lagi; alur kembali ke menu itu dijelaskan di Validasi Opsi dan Loop Menu. Cara clear() dan run_banner() membersihkan layar sebelum hasil tampil ada di Struktur Berkas dan Arsitektur.