7
7
▒▐█░░░▐█─░▐█░▒▀▄▀░░▐█▄▄▒██▄▄█░▐█▄█▀░▐█─░▐█░▒▄█▄░
8
8
"""
9
9
10
- import sys
11
10
import logging
11
+ import sys
12
12
from pathlib import Path
13
13
14
14
import folium
15
15
import phonenumbers
16
- from phonenumbers import geocoder , carrier
16
+ import requests
17
17
from opencage .geocoder import OpenCageGeocode
18
+ from phonenumbers import carrier , geocoder
18
19
19
- sys .path .insert (
20
- 0 ,
21
- 'src'
22
- )
20
+ sys .path .insert (0 , "src" )
23
21
24
22
from logger .logger import Logger
25
23
@@ -29,9 +27,7 @@ class PhoneInfo:
29
27
Gets info by phone number.
30
28
"""
31
29
32
- def __init__ (self ,
33
- number : str ,
34
- debug : bool = False ) -> None :
30
+ def __init__ (self , number : str , debug : bool = False ) -> None :
35
31
"""
36
32
Constructor.
37
33
@@ -65,9 +61,9 @@ def get_country(self) -> str:
65
61
"""
66
62
67
63
number = phonenumbers .parse (self .__number )
68
- self .__logger .info (' Find country' )
69
- country = geocoder .description_for_number (number , 'en' )
70
- self .__logger .debug (f' Country found: { country } ' )
64
+ self .__logger .info (" Find country" )
65
+ country = geocoder .description_for_number (number , "en" )
66
+ self .__logger .debug (f" Country found: { country } " )
71
67
return country
72
68
73
69
def get_operator (self ) -> str :
@@ -79,14 +75,12 @@ def get_operator(self) -> str:
79
75
"""
80
76
81
77
number = phonenumbers .parse (self .__number )
82
- self .__logger .info (' Find operator' )
83
- operator = carrier .name_for_number (number , 'en' )
84
- self .__logger .debug (f' Operator found: { operator } ' )
78
+ self .__logger .info (" Find operator" )
79
+ operator = carrier .name_for_number (number , "en" )
80
+ self .__logger .debug (f" Operator found: { operator } " )
85
81
return operator
86
82
87
- def draw_map (self ,
88
- api_key : str = None ,
89
- path_to_save : [str , Path ] = None ) -> None :
83
+ def draw_map (self , api_key : str = None , path_to_save : [str , Path ] = None ) -> None :
90
84
"""
91
85
Draws map with phone location.
92
86
If api_key is not given - map will not be drawn.
@@ -99,26 +93,122 @@ def draw_map(self,
99
93
"""
100
94
101
95
if api_key is None :
102
- self .__logger .raise_fatal (ValueError (' Api key not given' ))
96
+ self .__logger .raise_fatal (ValueError (" Api key not given" ))
103
97
104
98
geocode = OpenCageGeocode (api_key )
105
99
location = self .get_country ()
106
100
results = geocode .geocode (location )
107
101
108
- self .__logger .info (' Get lat and lng' )
109
- lat = results [0 ][' geometry' ][ ' lat' ]
110
- lng = results [0 ][' geometry' ][ ' lng' ]
111
- self .__logger .debug (f' Lat: { lat } , Lng: { lng } ' )
102
+ self .__logger .info (" Get lat and lng" )
103
+ lat = results [0 ][" geometry" ][ " lat" ]
104
+ lng = results [0 ][" geometry" ][ " lng" ]
105
+ self .__logger .debug (f" Lat: { lat } , Lng: { lng } " )
112
106
113
107
my_map = folium .Map (location = [lat , lng ], zoom_start = 9 )
114
108
folium .Marker ([lat , lng ], popup = location ).add_to (my_map )
115
109
116
- self .__logger .info (' Draw map' )
110
+ self .__logger .info (" Draw map" )
117
111
if path_to_save is None :
118
- my_map .save (f' { self .__number } .html' )
119
- self .__logger .debug (f' Map was saved to { self .__number } .html' )
112
+ my_map .save (f" { self .__number } .html" )
113
+ self .__logger .debug (f" Map was saved to { self .__number } .html" )
120
114
else :
121
115
Path (path_to_save ).mkdir (exist_ok = True , parents = True )
122
- my_map .save (f'{ path_to_save } /{ self .__number } .html' )
123
- self .__logger .debug (f'Map was saved to '
124
- f'{ path_to_save } /{ self .__number } .html' )
116
+ my_map .save (f"{ path_to_save } /{ self .__number } .html" )
117
+ self .__logger .debug (
118
+ f"Map was saved to " f"{ path_to_save } /{ self .__number } .html"
119
+ )
120
+
121
+
122
+ class ProbivApiPhoneInfo :
123
+ """
124
+ Gets info by phone number.
125
+ First of all, you need to register and get a subscription to this api:
126
+ https://probivapi.com/.
127
+ """
128
+
129
+ def __init__ (self , secret_key : str , number : str , debug : bool = False ) -> None :
130
+ """
131
+ Constructor.
132
+
133
+ Args:
134
+ * secret_key - Secret key from https://probivapi.com/
135
+ * number - Phone number
136
+ * debug - Activate debug mode
137
+ """
138
+
139
+ self .__secret_key = secret_key
140
+ self .__number = number
141
+ self .__logger = Logger (self .__class__ .__name__ )
142
+ if debug :
143
+ self .__logger .setLevel (logging .DEBUG )
144
+
145
+ @property
146
+ def number (self ) -> str :
147
+ """
148
+ Property number method.
149
+ """
150
+ return self .__number
151
+
152
+ @number .setter
153
+ def number (self , value ):
154
+ self .__number = value
155
+
156
+ def get_info_by_number (self ) -> None :
157
+ """
158
+ Gets all found info by phone number.
159
+ """
160
+
161
+ url = f"https://probivapi.com/api/phone/info/{ self .__number } "
162
+
163
+ head = {"X-Auth" : self .__secret_key }
164
+
165
+ response = requests .get (url , headers = head )
166
+ self .__logger .debug (response .text )
167
+
168
+ try :
169
+ json_response = response .json ()
170
+ except Exception :
171
+ json_response = {}
172
+
173
+ callapp_data = json_response .get ("callapp" , {})
174
+ callapp_api_name = callapp_data .get ("name" , "Not found" )
175
+ callapp_emails = ", " .join (
176
+ [email .get ("email" ) for email in callapp_data .get ("emails" , [])]
177
+ )
178
+ callapp_websites = ", " .join (
179
+ [site .get ("websiteUrl" ) for site in callapp_data .get ("websites" , [])]
180
+ )
181
+ callapp_addresses = ", " .join (
182
+ [addr .get ("street" ) for addr in callapp_data .get ("addresses" , [])]
183
+ )
184
+ callapp_description = callapp_data .get ("description" , "Not found" )
185
+ callapp_opening_hours = ", " .join (
186
+ [
187
+ f"{ day } : { ', ' .join (hours )} "
188
+ for day , hours in callapp_data .get ("openingHours" , {}).items ()
189
+ ]
190
+ )
191
+ callapp_lat = callapp_data .get ("lat" , "Not found" )
192
+ callapp_lng = callapp_data .get ("lng" , "Not found" )
193
+ callapp_spam_score = callapp_data .get ("spamScore" , "Not found" )
194
+ callapp_priority = callapp_data .get ("priority" , "Not found" )
195
+ eyecon_api_name = json_response .get ("eyecon" , "Not found" )
196
+ viewcaller_name_list = [
197
+ tag .get ("name" , "Not found" ) for tag in json_response .get ("viewcaller" , [])
198
+ ]
199
+ viewcaller_api_name = ", " .join (viewcaller_name_list )
200
+
201
+ info = f"""✅ Info for { self .__number }
202
+ ┣ 📱 ФИО (CallApp): { callapp_api_name }
203
+ ┣ 📧 Emails (CallApp): { callapp_emails }
204
+ ┣ 🌐 Сайты (CallApp): { callapp_websites }
205
+ ┣ 🏠 Адреса (CallApp): { callapp_addresses }
206
+ ┣ 📝 Описание (CallApp): { callapp_description }
207
+ ┣ 🕒 Часы работы (CallApp): { callapp_opening_hours }
208
+ ┣ 🌍 Координаты (CallApp): { callapp_lat } , { callapp_lng }
209
+ ┣ ⚠️ Spam Score (CallApp): { callapp_spam_score }
210
+ ┣ ⭐ Priority (CallApp): { callapp_priority }
211
+ ┣ 🌐 ФИО (EyeCon): { eyecon_api_name }
212
+ ┣ 🔎 ФИО (ViewCaller): { viewcaller_api_name } """
213
+
214
+ self .__logger .info (info )
0 commit comments