Add files via upload
[PyOpenCNAM.git] / pyopencnam.py
blob1bc2c4ba178f34a311f0a41833c09a97798d5ac3
1 #!/usr/bin/python
2 # -*- coding: utf-8 -*-
4 '''
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the Revised BSD License.
8 This program is distributed in the hope that it will be useful,
9 but WITHOUT ANY WARRANTY; without even the implied warranty of
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 Revised BSD License for more details.
13 Copyright 2020 Cool Dude 2k - http://idb.berlios.de/
14 Copyright 2020 Game Maker 2k - http://intdb.sourceforge.net/
15 Copyright 2020 Kazuki Przyborowski - https://github.com/KazukiPrzyborowski
17 $FileInfo: pyopencnam.py - Last Update: 1/20/2020 Ver. 1.2.0 RC 1 - Author: cooldude2k $
18 '''
20 from __future__ import division, absolute_import, print_function;
21 import os, sys, json, base64, platform;
23 '''
24 if(sys.version_info[:2] <= (3, 4)):
25 import imp;
26 else:
27 import importlib;
28 '''
29 import imp;
31 if __name__ == '__main__':
32 import argparse;
33 get_input = input;
34 if(sys.version_info[:2] <= (2, 7)):
35 get_input = raw_input;
37 try:
38 from ConfigParser import SafeConfigParser;
39 except ImportError:
40 if(sys.version_info[:2] <= (3, 2)):
41 from configparser import SafeConfigParser;
42 else:
43 from configparser import ConfigParser as SafeConfigParser;
45 try:
46 imp.find_module('requests');
47 haverequests = True;
48 import requests;
49 except ImportError:
50 haverequests = False;
51 havemechanize = False;
52 try:
53 imp.find_module('mechanize');
54 havemechanize = True;
55 import mechanize;
56 except ImportError:
57 havemechanize = False;
59 try:
60 from urllib2 import urlopen, Request;
61 except ImportError:
62 from urllib.request import urlopen, Request;
64 try:
65 from urllib import urlencode;
66 except ImportError:
67 from urllib.parse import urlencode;
69 __program_name__ = "PyOpenCNAM";
70 __project__ = __program_name__;
71 __project_url__ = "https://github.com/GameMaker2k/PyOpenCNAM";
72 __version_info__ = (1, 2, 0, "RC 1", 1);
73 __version_date_info__ = (2020, 1, 20, "RC 1", 1);
74 __version_date__ = str(__version_date_info__[0])+"."+str(__version_date_info__[1]).zfill(2)+"."+str(__version_date_info__[2]).zfill(2);
76 if(__version_info__[4]!=None):
77 __version_date_plusrc__ = __version_date__+"-"+str(__version_date_info__[4]);
78 if(__version_info__[4]==None):
79 __version_date_plusrc__ = __version_date__;
80 if(__version_info__[3]!=None):
81 __version__ = str(__version_info__[0])+"."+str(__version_info__[1])+"."+str(__version_info__[2])+" "+str(__version_info__[3]);
82 if(__version_info__[3]==None):
83 __version__ = str(__version_info__[0])+"."+str(__version_info__[1])+"."+str(__version_info__[2]);
85 geturls_ua_pyopencnam_python = "Mozilla/5.0 (compatible; {proname}/{prover}; +{prourl})".format(proname=__project__, prover=__version__, prourl=__project_url__);
86 if(platform.python_implementation()!=""):
87 geturls_ua_pyopencnam_python_alt = "Mozilla/5.0 (compatible; {osver}; {archtype}; +{prourl}) {pyimp}/{pyver} (KHTML, like Gecko) {proname}/{prover}".format(osver=platform.system()+" "+platform.release(), archtype=platform.machine(), prourl=__project_url__, pyimp=platform.python_implementation(), pyver=platform.python_version(), proname=__project__, prover=__version__);
88 if(platform.python_implementation()==""):
89 geturls_ua_pyopencnam_python_alt = "Mozilla/5.0 (compatible; {osver}; {archtype}; +{prourl}) {pyimp}/{pyver} (KHTML, like Gecko) {proname}/{prover}".format(osver=platform.system()+" "+platform.release(), archtype=platform.machine(), prourl=__project_url__, pyimp="Python", pyver=platform.python_version(), proname=__project__, prover=__version__);
91 master_phone_number = "+16786318356";
92 master_account_sid = None;
93 master_auth_token = None;
94 master_service_level = "standard";
95 master_casing = "caps";
96 master_mobile = "location";
97 master_no_value = "unknown";
98 master_geo = "wire";
99 master_http_lib = "urllib";
101 master_opencnam_url_old = "https://api.opencnam.com/v3/phone/{phone_number_str}?account_sid={account_sid_str}&auth_token={auth_token_str}&format=json&service_level={service_level_str}&casing={casing_str}&mobile={mobile_str}&no_value={no_value_str}&geo={geo_str}";
102 master_opencnam_url = "https://api.opencnam.com/v3/phone/{phone_number_str}?format=json&service_level={service_level_str}&casing={casing_str}&mobile={mobile_str}&no_value={no_value_str}&geo={geo_str}";
104 if(os.path.exists("pyopencnam.ini") and os.path.isfile("pyopencnam.ini")):
105 cfgparser = SafeConfigParser();
106 cfgparser.read("pyopencnam.ini");
107 master_phone_number = cfgparser.get("OpenCNAM", "phone_number");
108 master_account_sid = cfgparser.get("OpenCNAM", "account_sid");
109 if(len(master_account_sid)<=0):
110 master_account_sid = None;
111 master_auth_token = cfgparser.get("OpenCNAM", "auth_token");
112 if(len(master_auth_token)<=0):
113 master_auth_token = None;
114 master_opencnam_url = cfgparser.get("OpenCNAM", "opencnam_url");
115 master_service_level = cfgparser.get("OpenCNAM", "service_level");
116 master_casing = cfgparser.get("OpenCNAM", "casing");
117 master_mobile = cfgparser.get("OpenCNAM", "mobile");
118 master_no_value = cfgparser.get("OpenCNAM", "no_value");
119 master_geo = cfgparser.get("OpenCNAM", "geo");
120 master_http_lib = cfgparser.get("OpenCNAM", "http_lib");
122 if __name__ == '__main__':
123 argparser = argparse.ArgumentParser(description="Get cnam info from phone numbers from opencnam", conflict_handler="resolve", add_help=True);
124 argparser.add_argument("-v", "--version", action="version", version=__program_name__+" "+__version__);
125 argparser.add_argument("-p", "--phonenumber", default=master_phone_number, help="enter phone number to lookup");
126 argparser.add_argument("-a", "--accountsid", default=master_account_sid, help="enter account sid for lookup");
127 argparser.add_argument("-t", "--authtoken", default=master_auth_token, help="enter auth token for lookup");
128 argparser.add_argument("-s", "--servicelevel", default=master_service_level, help="enter service level for lookup");
129 argparser.add_argument("-o", "--opencnamurl", default=master_opencnam_url, help="enter url for lookup");
130 argparser.add_argument("-c", "--casing", default=master_opencnam_url, help="casing type for output vaule");
131 argparser.add_argument("-m", "--mobile", default=master_opencnam_url, help="output for mobile numbers");
132 argparser.add_argument("-n", "--novalue", default=master_opencnam_url, help="output for unknown numbers");
133 argparser.add_argument("-g", "--geo", default=master_opencnam_url, help="output for geo locations");
134 argparser.add_argument("-h", "--httplib", default=master_http_lib, help="select httplib to use for request");
135 argparser.add_argument("-i", "--input", action="store_false", help="get input from command prompt");
136 getargs = argparser.parse_args();
137 master_phone_number = getargs.phonenumber;
138 master_account_sid = getargs.accountsid;
139 master_auth_token = getargs.authtoken;
140 master_opencnam_url = getargs.opencnamurl;
141 master_service_level = getargs.servicelevel;
142 master_casing = getargs.casing;
143 master_mobile = getargs.mobile;
144 master_no_value = getargs.novalue;
145 master_geo = getargs.geo;
146 master_http_lib = getargs.httplib;
148 def make_http_headers_from_dict_to_list(headers={'Referer': "https://www.opencnam.com/dashboard/delivery/query-tool", 'User-Agent': geturls_ua_pyopencnam_python_alt}):
149 if isinstance(headers, dict):
150 returnval = [];
151 if(sys.version[0]=="2"):
152 for headkey, headvalue in headers.iteritems():
153 returnval.append((headkey, headvalue));
154 if(sys.version[0]>="3"):
155 for headkey, headvalue in headers.items():
156 returnval.append((headkey, headvalue));
157 elif isinstance(headers, list):
158 returnval = headers;
159 else:
160 returnval = False;
161 return returnval;
163 def get_httplib_support(checkvalue=None):
164 global haverequests, havemechanize;
165 returnval = [];
166 returnval.append("urllib");
167 if(haverequests==True):
168 returnval.append("requests");
169 if(havemechanize==True):
170 returnval.append("mechanize");
171 if(not checkvalue==None):
172 if(checkvalue=="urllib1" or checkvalue=="urllib2"):
173 checkvalue = "urllib";
174 if(checkvalue in returnval):
175 returnval = True;
176 else:
177 returnval = False;
178 return returnval;
180 def query_cnam_info(phone_number = master_phone_number, account_sid = master_account_sid, auth_token = master_auth_token, opencnam_url = master_opencnam_url, service_level = master_service_level, casing = master_casing, mobile = master_mobile, no_value = master_no_value, geo = master_geo, httplibuse = master_http_lib):
181 if(phone_number==None or account_sid==None or auth_token==None or service_level==None or (service_level!="standard" and service_level!="plus")):
182 return False;
183 if(not get_httplib_support(httplibuse)):
184 httplibuse = "urllib";
185 if(httplibuse=="urllib"):
186 opencnam_api_url = Request(opencnam_url.format(phone_number_str = phone_number, account_sid_str = account_sid, auth_token_str = auth_token, service_level_str = service_level, casing_str = casing, mobile_str = mobile, no_value_str = no_value, geo_str = geo));
187 preb64_user_string = str(master_account_sid)+":"+str(master_auth_token);
188 if(sys.version[0]=="2"):
189 base64_user_string = base64.b64encode(preb64_user_string);
190 opencnam_api_url.add_header("Authorization", "Basic "+base64_user_string);
191 if(sys.version[0]>="3"):
192 base64_user_string = base64.b64encode(preb64_user_string.encode());
193 opencnam_api_url.add_header("Authorization", "Basic "+base64_user_string.decode());
194 opencnam_api_url.add_header("User-Agent", geturls_ua_pyopencnam_python_alt);
195 opencnam_api_url.add_header("Referer", "https://www.opencnam.com/dashboard/delivery/query-tool");
196 opencnam_api_data = urlopen(opencnam_api_url);
197 outdata = json.load(opencnam_api_data);
198 elif(httplibuse=="requests"):
199 preb64_user_string = str(master_account_sid)+":"+str(master_auth_token);
200 r_header = {};
201 if(sys.version[0]=="2"):
202 base64_user_string = base64.b64encode(preb64_user_string);
203 r_header.update( {'Authorization' : base64_user_string} );
204 if(sys.version[0]>="3"):
205 base64_user_string = base64.b64encode(preb64_user_string.encode());
206 r_header.update( {'Authorization' : base64_user_string.decode()} );
207 r_header.update( {'User-Agent' : geturls_ua_pyopencnam_python_alt} );
208 r_header.update( {'Referer' : "https://www.opencnam.com/dashboard/delivery/query-tool"} );
209 opencnam_api_data = requests.get(opencnam_url.format(phone_number_str = phone_number, account_sid_str = account_sid, auth_token_str = auth_token, service_level_str = service_level, casing_str = casing, mobile_str = mobile, no_value_str = no_value, geo_str = geo), headers=r_header);
210 outdata = opencnam_api_data.json();
211 elif(httplibuse=="mechanize"):
212 geturls_opener = mechanize.Browser();
213 preb64_user_string = str(master_account_sid)+":"+str(master_auth_token);
214 r_header = {};
215 if(sys.version[0]=="2"):
216 base64_user_string = base64.b64encode(preb64_user_string);
217 r_header.update( {'Authorization' : base64_user_string} );
218 if(sys.version[0]>="3"):
219 base64_user_string = base64.b64encode(preb64_user_string.encode());
220 r_header.update( {'Authorization' : base64_user_string.decode()} );
221 r_header.update( {'User-Agent' : geturls_ua_pyopencnam_python_alt} );
222 r_header.update( {'Referer' : "https://www.opencnam.com/dashboard/delivery/query-tool"} );
223 r_header = make_http_headers_from_dict_to_list(r_header);
224 geturls_opener.addheaders = r_header;
225 geturls_opener.set_handle_robots(False);
226 print(r_header);
227 opencnam_api_data = geturls_opener.open(opencnam_url.format(phone_number_str = phone_number, account_sid_str = account_sid, auth_token_str = auth_token, service_level_str = service_level, casing_str = casing, mobile_str = mobile, no_value_str = no_value, geo_str = geo));
228 outdata = opencnam_api_data.json();
229 else:
230 outdata = None;
231 return outdata;
233 if __name__ == '__main__':
234 if(getargs.input==True):
235 print(json.dumps(query_cnam_info(master_phone_number, master_account_sid, master_auth_token, master_opencnam_url, master_service_level, master_casing, master_mobile, master_no_value, master_geo, master_http_lib)));
236 if(getargs.input==False):
237 user_account_sid = get_input("enter account sid for lookup: ");
238 if(len(user_account_sid)<=0):
239 user_account_sid = master_account_sid;
240 user_auth_token = get_input("enter auth token for lookup: ");
241 if(len(user_auth_token)<=0):
242 user_auth_token = master_auth_token;
243 user_service_level = get_input("enter service level for lookup: ");
244 if(len(user_service_level)<=0):
245 user_service_level = master_service_level;
246 user_phone_number = get_input("enter phone number to lookup: ");
247 while(len(user_phone_number)>0):
248 print("\n");
249 print(json.dumps(query_cnam_info(user_phone_number, user_account_sid, user_auth_token, master_opencnam_url, user_service_level, master_casing, master_mobile, master_no_value, master_geo, master_http_lib)));
250 print("\n");
251 user_phone_number = get_input("enter phone number to lookup: ");
252 if(len(user_phone_number)<=0):
253 break;