55from datetime import datetime ,timezone
66from newsdataapi .helpers import FileHandler
77from requests .exceptions import RequestException
8- from urllib .parse import urlencode , quote ,urlparse ,parse_qs
98from newsdataapi .newsdataapi_exception import NewsdataException
9+ from urllib .parse import urlencode , quote ,urlparse ,parse_qs ,urljoin
1010
1111class NewsDataApiClient (FileHandler ):
1212
@@ -24,7 +24,14 @@ def __init__(
2424 self .proxies = proxies
2525 self .request_timeout = request_timeout
2626 self .is_debug = debug
27+ self .set_base_url ()
2728 super ().__init__ (folder_path = folder_path )
29+
30+ def set_base_url (self ,new_base_url :str = constants .BASE_URL )-> None :
31+ self .latest_url = urljoin (new_base_url ,constants .LATEST_ENDPOINT )
32+ self .archive_url = urljoin (new_base_url ,constants .ARCHIVE_ENDPOINT )
33+ self .crypto_url = urljoin (new_base_url ,constants .CRYPTO_ENDPOINT )
34+ self .sources_url = urljoin (new_base_url ,constants .SOURCES_ENDPOINT )
2835
2936 def set_retries ( self , max_retries :int , retry_delay :int )-> None :
3037 """ API maximum retry and delay"""
@@ -204,9 +211,9 @@ def news_api(
204211 URL_parameters = self .__validate_parms (user_param = params )
205212 URL_parameters_encoded = urlencode (URL_parameters , quote_via = quote )
206213 if scroll == True :
207- return self .__get_feeds_all (url = f'{ constants . LATEST_URL } ?{ URL_parameters_encoded } ' ,max_result = max_result )
214+ return self .__get_feeds_all (url = f'{ self . latest_url } ?{ URL_parameters_encoded } ' ,max_result = max_result )
208215 else :
209- return self .__get_feeds (url = f'{ constants . LATEST_URL } ?{ URL_parameters_encoded } ' )
216+ return self .__get_feeds (url = f'{ self . latest_url } ?{ URL_parameters_encoded } ' )
210217
211218 def latest_api (
212219 self , q :Optional [str ]= None , qInTitle :Optional [str ]= None , country :Optional [Union [str , list ]]= None , category :Optional [Union [str , list ]]= None ,
@@ -228,9 +235,9 @@ def latest_api(
228235 URL_parameters = self .__validate_parms (user_param = params )
229236 URL_parameters_encoded = urlencode (URL_parameters , quote_via = quote )
230237 if scroll == True :
231- return self .__get_feeds_all (url = f'{ constants . LATEST_URL } ?{ URL_parameters_encoded } ' ,max_result = max_result )
238+ return self .__get_feeds_all (url = f'{ self . latest_url } ?{ URL_parameters_encoded } ' ,max_result = max_result )
232239 else :
233- return self .__get_feeds (url = f'{ constants . LATEST_URL } ?{ URL_parameters_encoded } ' )
240+ return self .__get_feeds (url = f'{ self . latest_url } ?{ URL_parameters_encoded } ' )
234241
235242 def archive_api (
236243 self , q :Optional [str ]= None , qInTitle :Optional [str ]= None , country :Optional [Union [str , list ]]= None , category :Optional [Union [str , list ]]= None ,
@@ -251,9 +258,9 @@ def archive_api(
251258 URL_parameters = self .__validate_parms (user_param = params )
252259 URL_parameters_encoded = urlencode (URL_parameters , quote_via = quote )
253260 if scroll == True :
254- return self .__get_feeds_all (url = f'{ constants . ARCHIVE_URL } ?{ URL_parameters_encoded } ' ,max_result = max_result )
261+ return self .__get_feeds_all (url = f'{ self . archive_url } ?{ URL_parameters_encoded } ' ,max_result = max_result )
255262 else :
256- return self .__get_feeds (url = f'{ constants . ARCHIVE_URL } ?{ URL_parameters_encoded } ' )
263+ return self .__get_feeds (url = f'{ self . archive_url } ?{ URL_parameters_encoded } ' )
257264
258265 def sources_api ( self , country :Optional [str ]= None , category :Optional [str ]= None , language :Optional [str ]= None , prioritydomain :Optional [str ]= None ,raw_query :Optional [str ]= None ):
259266 """
@@ -263,7 +270,7 @@ def sources_api( self, country:Optional[str]= None, category:Optional[str]= None
263270 params = {"apikey" :self .apikey , "country" :country , "category" :category , "language" :language , "prioritydomain" :prioritydomain ,'raw_query' :raw_query }
264271 URL_parameters = self .__validate_parms (user_param = params )
265272 URL_parameters_encoded = urlencode (URL_parameters , quote_via = quote )
266- return self .__get_feeds (url = f'{ constants . SOURCES_URL } ?{ URL_parameters_encoded } ' )
273+ return self .__get_feeds (url = f'{ self . sources_url } ?{ URL_parameters_encoded } ' )
267274
268275 def crypto_api (
269276 self , q :Optional [str ]= None , qInTitle :Optional [str ]= None ,language :Optional [Union [str , list ]]= None , domain :Optional [Union [str , list ]]= None ,
@@ -287,9 +294,9 @@ def crypto_api(
287294 URL_parameters = self .__validate_parms (user_param = params )
288295 URL_parameters_encoded = urlencode (URL_parameters , quote_via = quote )
289296 if scroll == True :
290- return self .__get_feeds_all (url = f'{ constants . CRYPTO_URL } ?{ URL_parameters_encoded } ' ,max_result = max_result )
297+ return self .__get_feeds_all (url = f'{ self . crypto_url } ?{ URL_parameters_encoded } ' ,max_result = max_result )
291298 else :
292- return self .__get_feeds (url = f'{ constants . CRYPTO_URL } ?{ URL_parameters_encoded } ' )
299+ return self .__get_feeds (url = f'{ self . crypto_url } ?{ URL_parameters_encoded } ' )
293300
294301 def __del__ (self ):
295302 if isinstance (self .request_method ,requests .Session ):
0 commit comments