Lompat ke konten
dokumentasi.id
Commit a5cb8ad
v4
Star20 rb

Kamu membaca versi lama. Halaman ini hanya bisa dibaca.

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-196 GhostTR.py:13-14

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-38

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.
Fig. 1: Alur data phoneGWNomor 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-97 GhostTR.py:99-112

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-97

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-97

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-112

Label outputNilai yang dicetakAsal nilai
Locationlocationgeocoder.description_for_number(parsed_number, "id")
Region Coderegion_codephonenumbers.region_code_for_number(parsed_number)
TimezonetimezoneF', '.join(timezone1) dari timezone.time_zones_for_number
Operatorjenis_providercarrier.name_for_number(parsed_number, "en")
Valid numberis_valid_numberphonenumbers.is_valid_number(parsed_number)
Possible numberis_possible_numberphonenumbers.is_possible_number(parsed_number)
International formatformatted_numberformat_number(..., PhoneNumberFormat.INTERNATIONAL)
Mobile formatformatted_number_for_mobileformat_number_for_mobile_dialing(..., with_formatting=True)
Original numberparsed_number.national_numberatribut parsed_number
E.164 formathasil format_number(..., PhoneNumberFormat.E164)dihitung langsung di dalam print
Country codeparsed_number.country_codeatribut parsed_number
Local numberparsed_number.national_numberatribut parsed_number
Typesalah satu dari tiga kalimat tetapcabang 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-112

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-118

Nomor mentah dan exception yang tidak ditangkap

⚠️ phoneGW tidak membungkus pemanggilan phonenumbers.parse dengan try. Jalur pemanggilan di atasnya, execute_option, hanya menangani ValueError dan KeyboardInterrupt, sehingga exception dari pustaka phonenumbers tidak ditangkap di jalur opsi ini. GhostTR.py:80-97 GhostTR.py:230-242

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-97

Tangkapan layar di README

README menyebut menu ini dengan nama Phone Tracker dan menampilkan berkas asset/phone.png sebagai contoh keluaran. README.md:39-43

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-97 GhostTR.py:99-112