Lompat ke konten
dokumentasi.id
Commit a5cb8ad
v2
Star20 rb

Kamu membaca versi lama. Halaman ini hanya bisa dibaca.

8

Phone Number Tracker

phoneGW menangani opsi nomor 3, Phone Number Tracker. Entri di list options menyimpan 'num': 3 dengan 'func': phoneGW, sehingga call_option memanggil fungsi itu tanpa argumen (GhostTR.py:192-196). Fungsi didekorasi @is_option, jadi run_banner dijalankan lebih dulu setiap kali tracker dipilih; mekanisme dekoratornya dibahas di Banner dan Dekorator is_option.

Berbeda dari dua tracker lain, phoneGW tidak menghubungi jaringan sama sekali. Seluruh data berasal dari library phonenumbers, yang diimpor di GhostTR.py:13-14 dan dideklarasikan tanpa pin versi di requirements.txt:1-2.

Input dan default region

phoneGW membaca satu input dengan prompt Enter phone number target Ex [+6281xxxxxxxxx], lalu menetapkan default_region = "ID" (GhostTR.py:80-84). Nilai itu tidak hanya dipakai saat parsing; ia muncul lagi sebagai argumen format panggilan, sehingga satu variabel mengatur dua perilaku.

PemakaianPemanggilanEfek
Parsingphonenumbers.parse(User_phone, default_region)nomor tanpa kode negara ditafsirkan sebagai nomor region ID (GhostTR.py:86-89)
Format panggilanformat_number_for_mobile_dialing(parsed_number, default_region, with_formatting=True)keluaran Mobile format mengikuti gaya dialing Indonesia (GhostTR.py:90-97)

⚠️ Default region ditulis mati sebagai "ID". Nomor luar negeri tanpa kode negara akan tetap dibaca sebagai nomor Indonesia, dan tidak ada opsi untuk mengubah region lewat argumen maupun input.

Rantai pemanggilan library

phonenumbers.parse mengembalikan satu objek PhoneNumber bernama parsed_number. Semua helper sesudahnya menerima objek itu, bukan string mentah, sehingga input hanya diparse sekali (GhostTR.py:86-89).

sequenceDiagram
    autonumber
    participant Menu as options
    participant P as phoneGW
    participant PN as phonenumbers
    participant CR as carrier
    participant GC as geocoder
    participant TZ as timezone
    Menu->>P: panggil func lewat wrapper is_option
    Note over P: baca input User_phone, set default_region = ID
    rect rgb(245,158,11)
    P->>PN: parse User_phone dengan default_region
    PN-->>P: parsed_number
    end
    rect rgb(139,92,246)
    P->>PN: region_code_for_number
    P->>PN: is_valid_number dan is_possible_number
    P->>PN: format_number INTERNATIONAL dan E164
    P->>PN: format_number_for_mobile_dialing with_formatting=True
    P->>PN: number_type
    P->>CR: name_for_number bahasa en
    CR-->>P: jenis_provider
    P->>GC: description_for_number bahasa id
    GC-->>P: location
    P->>TZ: time_zones_for_number
    TZ-->>P: timezone1
    P->>P: timezoneF = join timezone1
    end
    rect rgb(45,125,70)
    P-->>Menu: cetak 12 baris informasi lalu cabang Type
    end
%% fig: Pemanggilan phonenumbers di dalam phoneGW
%% desc: Satu objek parsed_number dipakai ulang oleh helper phonenumbers, carrier, geocoder, dan timezone, lalu hasilnya dicetak menjadi dua belas baris informasi.
Fig. 1: Pemanggilan phonenumbers di dalam phoneGWSatu objek parsed_number dipakai ulang oleh helper phonenumbers, carrier, geocoder, dan timezone, lalu hasilnya dicetak menjadi dua belas baris informasi.

carrier dan geocoder dipanggil dengan kode bahasa yang berbeda, "en" untuk operator dan "id" untuk lokasi (GhostTR.py:86-89). Karena itu satu keluaran yang sama dapat mencampur nama operator berbahasa Inggris dengan deskripsi wilayah berbahasa Indonesia.

Nilai turunan dan label keluarannya

VariabelHelper yang dipanggilLabel keluaran
locationgeocoder.description_for_number(parsed_number, "id")Location
region_codephonenumbers.region_code_for_numberRegion Code
timezoneFtimezone.time_zones_for_number, lalu ', '.joinTimezone
jenis_providercarrier.name_for_number(parsed_number, "en")Operator
is_valid_numberphonenumbers.is_valid_numberValid number
is_possible_numberphonenumbers.is_possible_numberPossible number
formatted_numberformat_number(..., PhoneNumberFormat.INTERNATIONAL)International format
formatted_number_for_mobileformat_number_for_mobile_dialing(..., with_formatting=True)Mobile format
number_typephonenumbers.number_typeType (lihat bagian berikut)

Baris pertama sampai kedelapan tabel di atas berasal dari blok assignment GhostTR.py:86-89 dan GhostTR.py:90-97, sedangkan seluruh label di kolom ketiga diambil dari blok print di GhostTR.py:99-112.

E.164 format tidak punya variabel perantara: nilainya dipanggil langsung di dalam print dengan PhoneNumberFormat.E164 (GhostTR.py:99-112). Baris Country code dan dua baris nomor lokal membaca atribut objek parsed_number, yaitu country_code dan national_number.

Cabang tipe nomor

number_type hanya dipakai untuk memilih satu dari tiga cabang cetak, bukan untuk mengubah nilai lain (GhostTR.py:113-118).

KondisiBaris Type yang dicetak
PhoneNumberType.MOBILEThis is a mobile number
PhoneNumberType.FIXED_LINEThis is a fixed-line number
nilai selain kedua konstanta ituThis is another type of number

⚠️ Cabang else menutupi semua tipe lain, termasuk nomor VoIP atau toll-free. Keluaran This is another type of number tidak memberi petunjuk tipe sebenarnya, dan nilai number_type mentah tidak pernah dicetak.

Batasan yang perlu diketahui

  • Original number dan Local number mencetak atribut yang sama, parsed_number.national_number, sehingga dua baris keluaran selalu identik (GhostTR.py:99-112).
  • phoneGW tidak memiliki blok try/except sendiri, meskipun phonenumbers.parse dapat gagal pada input yang tidak bisa dibaca (GhostTR.py:80-118). Bagaimana kegagalan itu merambat ke menu dibahas di Penanganan Error dan Interupsi.
  • Validasi tidak menghentikan eksekusi: hasil is_valid_number dan is_possible_number hanya dicetak, sehingga nomor tidak valid tetap diproses sampai baris terakhir (GhostTR.py:99-112).