4.3
Phone Number Tracker
phoneGW menjalankan opsi 3, Phone Number Tracker, pada daftar options. Fungsi ini membaca satu nomor lewat input, memanggil phonenumbers.parse dengan region default ID, lalu mencetak operator, lokasi, zona waktu, dan beberapa format nomor ke layar. Tidak ada request HTTP di dalamnya: seluruh nilai berasal dari pustaka phonenumbers yang diimpor di bagian atas berkas. GhostTR.py:192-1961 GhostTR.py:13-142
Sebelum badan fungsi berjalan, decorator is_option menjalankan run_banner, sehingga layar dibersihkan dan banner ASCII dicetak lebih dulu. Mekanisme decorator itu dijelaskan di Banner, Warna ANSI, dan Helper. GhostTR.py:30-383
Alur dari input ke output
Diagram berikut menunjukkan perpindahan data di dalam phoneGW, mulai dari input mentah sampai baris terakhir yang dicetak.
graph TD
A["options: 3 Phone Number Tracker"] --> B["phoneGW"]
B --> C["input: Enter phone number target"]
C --> D["default_region = 'ID'"]
D --> E["phonenumbers.parse(User_phone, default_region)"]
E -->|exception| F["exception lolos ke execute_option"]
E --> G["parsed_number"]
G --> H["carrier.name_for_number"]
G --> I["geocoder.description_for_number"]
G --> J["timezone.time_zones_for_number"]
G --> K["is_valid_number / is_possible_number"]
G --> L["format_number INTERNATIONAL dan E164"]
H --> M["Operator"]
I --> N["Location"]
J --> O["Timezone"]
K --> P["Valid number / Possible number"]
L --> Q["International, Mobile, E.164 format"]
M --> R["SHOW INFORMATION PHONE NUMBERS"]
N --> R
O --> R
P --> R
Q --> R
R --> S["number_type"]
S -->|MOBILE| T["This is a mobile number"]
S -->|FIXED_LINE| U["This is a fixed-line number"]
S -->|lainnya| V["This is another type of number"]
style D fill:#f59e0b,color:#000
style E fill:#8b5cf6,color:#fff
style G fill:#8b5cf6,color:#fff
style F fill:#dc2626,color:#fff
style R fill:#2d7d46,color:#fff
style S fill:#f59e0b,color:#000
%% fig: Alur data phoneGW
%% desc: Nomor dari input diproses dengan region default ID, lalu lima pembacaan phonenumbers memasok baris cetak dan cabang tipe nomor.Semua nilai turunan dihitung sekali di awal fungsi, sebelum blok print dijalankan. Hanya format E.164 yang dihitung ulang langsung di dalam pemanggilan print. GhostTR.py:80-974 GhostTR.py:99-1125
Region default dan sumber nilai
phoneGW menetapkan default_region = "ID" secara hardcoded, sehingga nomor yang ditulis tanpa kode negara ditafsirkan sebagai nomor Indonesia. Prompt input meminta contoh berawalan kode negara, yaitu Ex [+6281xxxxxxxxx], dan nilai itu langsung diteruskan ke phonenumbers.parse tanpa pembersihan. GhostTR.py:80-974
Dua pembacaan memakai locale berbeda. carrier.name_for_number dipanggil dengan "en" sehingga nama operator dicetak dalam bahasa Inggris, sedangkan geocoder.description_for_number dipanggil dengan "id" sehingga deskripsi lokasi mengikuti locale Indonesia. Hasil timezone.time_zones_for_number berupa tuple, lalu digabung dengan pemisah ', ' menjadi variabel timezoneF. GhostTR.py:80-974
Field yang dicetak
Blok cetak dibuka dengan header SHOW INFORMATION PHONE NUMBERS, lalu tiga belas baris berlabel. Tabel berikut memetakan setiap label ke variabel yang mencetaknya. GhostTR.py:99-1125
| Label output | Nilai yang dicetak | Asal nilai |
|---|---|---|
Location | location | geocoder.description_for_number(parsed_number, "id") |
Region Code | region_code | phonenumbers.region_code_for_number(parsed_number) |
Timezone | timezoneF | ', '.join(timezone1) dari timezone.time_zones_for_number |
Operator | jenis_provider | carrier.name_for_number(parsed_number, "en") |
Valid number | is_valid_number | phonenumbers.is_valid_number(parsed_number) |
Possible number | is_possible_number | phonenumbers.is_possible_number(parsed_number) |
International format | formatted_number | format_number(..., PhoneNumberFormat.INTERNATIONAL) |
Mobile format | formatted_number_for_mobile | format_number_for_mobile_dialing(..., with_formatting=True) |
Original number | parsed_number.national_number | atribut parsed_number |
E.164 format | hasil format_number(..., PhoneNumberFormat.E164) | dihitung langsung di dalam print |
Country code | parsed_number.country_code | atribut parsed_number |
Local number | parsed_number.national_number | atribut parsed_number |
Type | salah satu dari tiga kalimat tetap | cabang number_type |
Baris Original number dan Local number mencetak ekspresi yang sama, yaitu parsed_number.national_number, sehingga keduanya selalu menampilkan nilai identik. Nomor E.164 tidak disimpan di variabel tersendiri; nilainya dibentuk ulang di argumen print. GhostTR.py:99-1125
Cabang tipe nomor
Setelah dua belas baris informatif, phoneGW membandingkan number_type dengan dua konstanta pustaka. PhoneNumberType.MOBILE mencetak This is a mobile number, PhoneNumberType.FIXED_LINE mencetak This is a fixed-line number, dan semua nilai lain jatuh ke cabang else yang mencetak This is another type of number. Jadi tipe selain mobile dan fixed-line tidak dibedakan lebih lanjut. GhostTR.py:113-1186
Nomor mentah dan exception yang tidak ditangkap
⚠️
phoneGWtidak membungkus pemanggilanphonenumbers.parsedengantry. Jalur pemanggilan di atasnya,execute_option, hanya menanganiValueErrordanKeyboardInterrupt, sehingga exception dari pustakaphonenumberstidak ditangkap di jalur opsi ini. GhostTR.py:80-974 GhostTR.py:230-2427
Nilai User_phone dipakai apa adanya. Tidak ada strip() atau validasi panjang sebelum nomor diserahkan ke pustaka, sehingga spasi atau karakter tambahan pada input ikut masuk ke proses pemanggilan phonenumbers.parse. Pembahasan lengkap jalur kegagalan ada di Penanganan Error dan Interrupt. GhostTR.py:80-974
Tangkapan layar di README
README menyebut menu ini dengan nama Phone Tracker dan menampilkan berkas asset/phone.png sebagai contoh keluaran. README.md:39-438
Gambar itu berasal dari revisi lama: prompt pada gambar berbunyi Masukkan nomor telepon dan labelnya Jenis Provider, sedangkan kode pada commit ini memakai prompt Enter phone number target dengan label Operator. Gunakan tabel field di atas sebagai acuan, bukan teks pada tangkapan layar. GhostTR.py:80-974 GhostTR.py:99-1125