@@ -3,96 +3,115 @@ var TimezoneParams = require('./TimezoneParams.js');
33
44module . exports = class IPGeolocationAPI {
55
6- constructor ( apiKey = "" ) {
6+ constructor ( apiKey = "" , async = true ) {
77 this . apiKey = apiKey ;
8+ this . async = async ;
89 }
910
10- getApiKey ( ) {
11- return this . apiKey ;
12- }
11+ getGeolocation ( callback , geolocationParams = null ) {
12+ if ( geolocationParams && geolocationParams . getIPAddresses ( ) ) {
13+ var jsonData = JSON . stringify ( {
14+ "ips" : params . getIPAddresses ( )
15+ } ) ;
1316
14- getGeolocation ( params = null , callback ) {
15- if ( params && params . getIPList ( ) ) {
16- return postRequest ( "ipgeo-bulk" , params , this . apiKey , callback ) ;
17+ return postRequest ( "ipgeo-bulk" , buildGeolocationUrlParams ( this . apiKey , geolocationParams ) , jsonData , callback ) ;
1718 } else {
18- return getRequest ( "ipgeo" , buildGeolocationUrlParams ( params , this . apiKey ) , callback ) ;
19+ return getRequest ( "ipgeo" , buildGeolocationUrlParams ( this . apiKey , geolocationParams ) , callback ) ;
1920 }
2021 }
2122
22- getTimezone ( params = null , callback ) {
23- return getRequest ( "timezone" , buildTimezoneUrlParams ( params , this . apiKey ) , callback ) ;
23+ getTimezone ( callback , timezoneParams = null ) {
24+ return getRequest ( "timezone" , buildTimezoneUrlParams ( this . apiKey , timezoneParams ) , callback ) ;
25+ }
26+
27+ getApiKey ( ) {
28+ return this . apiKey ;
29+ }
30+
31+ isAsync ( ) {
32+ return this . async ;
2433 }
2534}
2635
27- function buildTimezoneUrlParams ( params = null , apiKey = "" ) {
36+ function buildGeolocationUrlParams ( apiKey = "" , geolocationParams = null ) {
2837 var urlParams = "" ;
2938
3039 if ( apiKey ) {
3140 urlParams = urlParams . concat ( "apiKey=" , apiKey ) ;
3241 }
3342
34- if ( params ) {
35- var ip = params . getIP ( ) ;
36-
37- if ( ip ) {
43+ if ( geolocationParams ) {
44+ if ( geolocationParams . getIPAddress ( ) ) {
3845 if ( urlParams ) {
3946 urlParams = urlParams . concat ( "&" ) ;
4047 }
41- urlParams = urlParams . concat ( "ip=" , ip ) ;
48+ urlParams = urlParams . concat ( "ip=" , geolocationParams . getIPAddress ( ) ) ;
4249 }
43-
44- var tz = params . getTimezone ( ) ;
45-
46- if ( tz ) {
50+
51+ if ( geolocationParams . getFields ( ) ) {
4752 if ( urlParams ) {
4853 urlParams = urlParams . concat ( "&" ) ;
4954 }
50- urlParams = urlParams . concat ( "tz =" , tz ) ;
55+ urlParams = urlParams . concat ( "fields =" , geolocationParams . getFields ( ) ) ;
5156 }
52-
53- var latitude = params . getLatitude ( ) ;
54- var longitude = params . getLongitude ( ) ;
55-
56- if ( latitude && latitude !== 1000.0 && longitude && longitude !== 1000.0 ) {
57+
58+ if ( geolocationParams . getExcludes ( ) ) {
59+ if ( urlParams ) {
60+ urlParams = urlParams . concat ( "&" ) ;
61+ }
62+ urlParams = urlParams . concat ( "excludes=" , geolocationParams . getExcludes ( ) ) ;
63+ }
64+
65+ if ( geolocationParams . getLang ( ) ) {
5766 if ( urlParams ) {
5867 urlParams = urlParams . concat ( "&" ) ;
5968 }
60- urlParams = urlParams . concat ( "lat =" , latitude , "&long=" , longitude ) ;
69+ urlParams = urlParams . concat ( "lang =" , geolocationParams . getLang ( ) ) ;
6170 }
6271 }
6372 return urlParams ;
6473}
6574
66- function buildGeolocationUrlParams ( params = null , apiKey = "" ) {
75+ function buildTimezoneUrlParams ( apiKey = "" , timezoneParams = null ) {
6776 var urlParams = "" ;
6877
6978 if ( apiKey ) {
7079 urlParams = urlParams . concat ( "apiKey=" , apiKey ) ;
7180 }
7281
73- if ( params ) {
74- var ip = params . getIP ( ) ;
75-
76- if ( ip ) {
82+ if ( timezoneParams ) {
83+ if ( timezoneParams . getIPAddress ( ) ) {
7784 if ( urlParams ) {
7885 urlParams = urlParams . concat ( "&" ) ;
7986 }
80- urlParams = urlParams . concat ( "ip=" , ip ) ;
87+ urlParams = urlParams . concat ( "ip=" , timezoneParams . getIPAddress ( ) ) ;
8188 }
8289
83- var fields = params . getFields ( ) ;
90+ if ( timezoneParams . getTimezone ( ) ) {
91+ if ( urlParams ) {
92+ urlParams = urlParams . concat ( "&" ) ;
93+ }
94+ urlParams = urlParams . concat ( "tz=" , timezoneParams . getTimezone ( ) ) ;
95+ }
96+
97+ if ( timezoneParams . getLatitude ( ) !== 1000.0 && timezoneParams . getLongitude ( ) !== 1000.0 ) {
98+ if ( urlParams ) {
99+ urlParams = urlParams . concat ( "&" ) ;
100+ }
101+ urlParams = urlParams . concat ( "lat=" , timezoneParams . getLatitude ( ) , "&long=" , timezoneParams . getLongitude ( ) ) ;
102+ }
84103
85- if ( fields ) {
104+ if ( timezoneParams . getLang ( ) ) {
86105 if ( urlParams ) {
87106 urlParams = urlParams . concat ( "&" ) ;
88107 }
89- urlParams = urlParams . concat ( "fields =" , fields ) ;
108+ urlParams = urlParams . concat ( "lang =" , timezoneParams . getLang ( ) ) ;
90109 }
91110 }
92111 return urlParams ;
93112}
94113
95- function getRequest ( subUrl = "" , params = "" , callback ) {
114+ function getRequest ( subUrl = "" , urlParams = "" , callback ) {
96115 var jsonData = null ;
97116 var XMLHttpRequest = require ( "xmlhttprequest" ) . XMLHttpRequest ;
98117 var xhttp = new XMLHttpRequest ( ) ;
@@ -107,15 +126,12 @@ function getRequest(subUrl = "", params = "", callback) {
107126 }
108127 }
109128 } ;
110- xhttp . open ( "GET" , "https://api.ipgeolocation.io/" . concat ( subUrl , "?" , params , "" ) , true ) ;
129+ xhttp . open ( "GET" , "https://api.ipgeolocation.io/" . concat ( subUrl , "?" , urlParams , "" ) , this . async ) ;
111130 xhttp . send ( ) ;
112131}
113132
114- function postRequest ( subUrl = "" , params = "" , apiKey = "" , callback ) {
133+ function postRequest ( subUrl = "" , urlParams = "" , requestData = "" , callback ) {
115134 var jsonData = null ;
116- var data = JSON . stringify ( {
117- "ips" : params . getIPList ( )
118- } ) ;
119135 var XMLHttpRequest = require ( "xmlhttprequest" ) . XMLHttpRequest ;
120136 var xhttp = new XMLHttpRequest ( ) ;
121137
@@ -129,7 +145,8 @@ function postRequest(subUrl = "", params = "", apiKey = "", callback) {
129145 }
130146 }
131147 } ;
132- xhttp . open ( "POST" , "https://api.ipgeolocation.io/" . concat ( subUrl , "?apiKey= " , apiKey , "" ) , true ) ;
148+ xhttp . open ( "POST" , "https://api.ipgeolocation.io/" . concat ( subUrl , "?" , urlParams , "" ) , this . async ) ;
133149 xhttp . setRequestHeader ( "Content-Type" , "application/json" ) ;
134- xhttp . send ( data ) ;
150+ xhttp . setRequestHeader ( "Accept" , "application/json" ) ;
151+ xhttp . send ( requestData ) ;
135152}
0 commit comments