2 # -*- coding: utf-8 -*-
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 $
20 from __future__
import division
, absolute_import
, print_function
;
21 import os
, sys
, json
, base64
, platform
;
24 if(sys.version_info[:2] <= (3, 4)):
31 if __name__
== '__main__':
34 if(sys
.version_info
[:2] <= (2, 7)):
35 get_input
= raw_input;
38 from ConfigParser
import SafeConfigParser
;
40 if(sys
.version_info
[:2] <= (3, 2)):
41 from configparser
import SafeConfigParser
;
43 from configparser
import ConfigParser
as SafeConfigParser
;
46 imp
.find_module('requests');
51 havemechanize
= False;
53 imp
.find_module('mechanize');
57 havemechanize
= False;
60 from urllib2
import urlopen
, Request
;
62 from urllib
.request
import urlopen
, Request
;
65 from urllib
import urlencode
;
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";
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):
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):
163 def get_httplib_support(checkvalue
=None):
164 global haverequests
, havemechanize
;
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
):
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")):
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
);
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
);
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);
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();
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):
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
)));
251 user_phone_number
= get_input("enter phone number to lookup: ");
252 if(len(user_phone_number
)<=0):