├── CellTrack.py ├── README.md └── trackdetails.csv /CellTrack.py: -------------------------------------------------------------------------------- 1 | import phonenumbers 2 | from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg,NavigationToolbar2Tk 3 | from phonenumbers import carrier 4 | import matplotlib.pyplot as plt 5 | from opencage.geocoder import OpenCageGeocode 6 | import folium 7 | import pandas as pd 8 | from phonenumbers import geocoder 9 | import tkinter.ttk as ttk 10 | from phonenumbers import timezone 11 | import gmaps 12 | from tkinter import * 13 | import tkinter as tk 14 | from tkinter import Tk, Button, Text 15 | import win32print 16 | import csv 17 | 18 | 19 | Key="79cddf3cc33c4231b61622f917ea8850" 20 | print('ENSURE YOU INCLUDE COUNTRY CODE BEFORE NUMBER eg(+2349080249554)') 21 | c=input("ENTER NUMBER:") 22 | phone_number = phonenumbers.parse(c) 23 | location = geocoder.description_for_number(phone_number, "en") 24 | geocoder = OpenCageGeocode(Key) 25 | query = str(location) 26 | result = geocoder.geocode(query) 27 | lat = result[0]['geometry']['lat'] 28 | lng = result[0]['geometry']['lng'] 29 | long = result[0]['geometry']['lng'] 30 | mytime = timezone.time_zones_for_number(phone_number) 31 | parsed_number = phonenumbers.parse(c, "CH") 32 | valid_check = phonenumbers.is_valid_number(parsed_number) 33 | mymap = folium.Map(location=[lat, lng], zoom_start=9) 34 | mymap1 = gmaps.Map(location=[lat, lng], zoom_start=9) 35 | mymap.save("maplocation.html") 36 | print(c) 37 | print(f"Number valid: {valid_check}") 38 | print(location) 39 | print(carrier.name_for_number(phone_number, "en")) 40 | print("Latitude:", lat) 41 | print("Longtitude:", lng) 42 | print("Longtitudemum:", long) 43 | print(mytime) 44 | print(result) 45 | 46 | 47 | file_object = open("trackdetails.csv", "a") 48 | writer = csv. writer(file_object, delimiter = ",") 49 | writer. writerow([c,carrier.name_for_number(phone_number, "en"),f"{valid_check}",f"{mytime}",f"{lat}",f"{long}"]) 50 | file_object.close() 51 | 52 | 53 | login_screen = Tk() 54 | login_screen.title("(Tracker)") 55 | login_screen.config(bg="white") 56 | 57 | fmbar2=tk.Frame(login_screen,bg="white",width=500,height=300) 58 | fmbar2.pack(side=tk.RIGHT, fill=tk.BOTH) 59 | 60 | F5 = Frame(login_screen,bg="white",width=700,height=350,relief=GROOVE, bd=10) 61 | F5.pack(side=tk.LEFT, fill=tk.BOTH) 62 | lndrq = Label(F5, text='Numbers,Service Providers,Number Validity,Country,Lat,Long',anchor="w", font='arial 15',relief=GROOVE, bd=4).pack(fill=X) 63 | 64 | df = pd.read_csv (r'trackdetails.csv') 65 | figure2 = plt.Figure(figsize=(5, 2), dpi=100) 66 | ax2 = figure2.add_subplot(111) 67 | line2 = FigureCanvasTkAgg(figure2, fmbar2) 68 | line2.get_tk_widget().pack(side=tk.RIGHT, fill=tk.BOTH) 69 | yer=df.groupby('Service Providers')['Service Providers'].size() 70 | yer.plot(kind="pie",autopct='%1.1f%%',shadow=True,ax=ax2, startangle=90, fontsize=6) 71 | ax2.set_title("STATISTIC OF SERVICE PROVIDERS",font="century",fontsize=9) 72 | ax2.legend(bbox_to_anchor=(1,0),loc='lower right',bbox_transform=figure2.transFigure,prop={'size':8}) 73 | print (df) 74 | 75 | 76 | 77 | element_header = ['1st', '2nd', '3rd', '4th', '5th','6th'] 78 | treeSpen = tk.Scrollbar(F5) 79 | treeSpen.pack(side='right', fill='y') 80 | 81 | 82 | tree =ttk.Treeview(F5, columns=element_header,height=20, show="headings") 83 | tree.configure(yscrollcommand=treeSpen.set) 84 | tree.column('1st', width=150, minwidth=100, stretch=tk.NO) 85 | tree.column('2nd', width=70, minwidth=100, stretch=tk.NO) 86 | tree.column('3rd', width=70, minwidth=100, stretch=tk.NO) 87 | tree.column('4th', width=100, minwidth=100, stretch=tk.NO) 88 | tree.column('5th', width=100, minwidth=100, stretch=tk.NO) 89 | tree.column('6th', width=100, minwidth=100, stretch=tk.NO) 90 | 91 | with open("trackdetails.csv") as myfile: 92 | reader = csv.DictReader(myfile, delimiter=',') 93 | for row_id in reader: 94 | nmb=row_id['Numbers'] 95 | name = row_id['Service Providers'] 96 | nsurname = row_id['Number Validity'] 97 | nsurnj = row_id['Country'] 98 | nsnj = row_id['Lat'] 99 | nlnj = row_id['Long'] 100 | tree.insert(parent='', index='end', text='', values=(nmb,name, nsurname,nsurnj,nsnj,nlnj)) 101 | tree.pack(side='left', padx=0, pady=0) 102 | treeSpen.config(command=tree.yview) 103 | 104 | login_screen.mainloop() 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Phone-Number-Tracking 2 | This is a python implementation of cell phone tracking based on the assigned phone number from the service provider and geo-location. 3 | -------------------------------------------------------------------------------- /trackdetails.csv: -------------------------------------------------------------------------------- 1 | Numbers,Service Providers,Number Validity,Country,Lat,Long +2348033249224,MTN,True,"('Africa/Lagos',)",9.6000359,7.9999721 +2348126199750,Airtel,True,"('Africa/Lagos',)",9.6000359,7.9999721 2 | +2348055555555,Glo,True,"('Africa/Lagos',)",9.6000359,7.9999721 3 | +14173094085,,True,"('America/Chicago',)",38.7604815,-92.5617875 4 | +2348022222222,Airtel,True,"('Africa/Lagos',)",9.6000359,7.9999721 5 | +2349080249554,9mobile,True,"('Africa/Lagos',)",9.6000359,7.9999721 6 | +2348055228824,Glo,True,"('Africa/Lagos',)",9.6000359,7.9999721 7 | --------------------------------------------------------------------------------