11import requests
22
33class Client (object ):
4- base_url = 'https://api.forexrateapi.com/v1'
4+ SERVERS = {
5+ 'us' : 'https://api.forexrateapi.com/v1' ,
6+ 'eu' : 'https://api-eu.forexrateapi.com/v1'
7+ }
58
69 def _removeEmpty (self , params ):
7- return {key :value for key ,value in params .items () if value != '' }
10+ return {key : value for key , value in params .items () if value is not None and value != '' }
811
9- def __init__ (self , api_key ):
12+ def __init__ (self , api_key , server = 'us' ):
13+ self .base_url = self .SERVERS .get (server , self .SERVERS ['us' ])
1014 self .client = requests .Session ()
1115 self .client .params .update ({'api_key' : api_key })
1216
17+ def setServer (self , server ):
18+ self .base_url = self .SERVERS .get (server , self .SERVERS ['us' ])
19+
1320 def fetchSymbols (self ):
1421 response = self .client .get (f'{ self .base_url } /symbols' )
1522 return response .json ()
1623
17- def fetchLive (self , base = '' , currencies = [] ):
24+ def fetchLive (self , base = '' , currencies = None , math = '' ):
1825 params = self ._removeEmpty ({
1926 'base' : base ,
20- 'currencies' : ',' .join (currencies )
27+ 'currencies' : ',' .join (currencies or []),
28+ 'math' : math ,
2129 })
2230 response = self .client .get (f'{ self .base_url } /latest' , params = params )
2331 return response .json ()
2432
25- def fetchHistorical (self , date , base = '' , currencies = [] ):
33+ def fetchHistorical (self , date , base = '' , currencies = None ):
2634 params = self ._removeEmpty ({
2735 'base' : base ,
28- 'currencies' : ',' .join (currencies )
36+ 'currencies' : ',' .join (currencies or []),
2937 })
3038 response = self .client .get (f'{ self .base_url } /{ date } ' , params = params )
3139 return response .json ()
3240
33- def ohlc (self , base , currency , date , date_type ):
41+ def hourly (self , base = '' , currency = '' , start_date = '' , end_date = '' , math = '' , date_type = '' ):
3442 params = self ._removeEmpty ({
3543 'base' : base ,
3644 'currency' : currency ,
37- 'date' : date ,
45+ 'start_date' : start_date ,
46+ 'end_date' : end_date ,
47+ 'math' : math ,
3848 'date_type' : date_type
3949 })
50+ response = self .client .get (f'{ self .base_url } /hourly' , params = params )
51+ return response .json ()
52+
53+ def ohlc (self , base = '' , currency = '' , date = '' , date_type = '' ):
54+ params = self ._removeEmpty ({
55+ 'base' : base ,
56+ 'currency' : currency ,
57+ 'date' : date ,
58+ 'date_type' : date_type ,
59+ })
4060 response = self .client .get (f'{ self .base_url } /ohlc' , params = params )
4161 return response .json ()
4262
43- def convert (self , to_currency , amount , from_currency = '' , date = '' ):
63+ def convert (self , from_currency = '' , to_currency = '' , amount = '' , date = '' ):
4464 params = self ._removeEmpty ({
4565 'from' : from_currency ,
4666 'to' : to_currency ,
4767 'amount' : amount ,
48- 'date' : date
68+ 'date' : date ,
4969 })
5070 response = self .client .get (f'{ self .base_url } /convert' , params = params )
5171 return response .json ()
5272
53- def timeframe (self , start_date , end_date , base = '' , currencies = [] ):
73+ def timeframe (self , start_date , end_date , base = '' , currencies = None ):
5474 params = self ._removeEmpty ({
5575 'start_date' : start_date ,
5676 'end_date' : end_date ,
5777 'base' : base ,
58- 'currencies' : ',' .join (currencies )
78+ 'currencies' : ',' .join (currencies or []),
5979 })
6080 response = self .client .get (f'{ self .base_url } /timeframe' , params = params )
6181 return response .json ()
6282
63- def change (self , start_date , end_date , base = '' , currencies = [] ):
83+ def change (self , start_date , end_date , base = '' , currencies = None , date_type = '' ):
6484 params = self ._removeEmpty ({
6585 'start_date' : start_date ,
6686 'end_date' : end_date ,
6787 'base' : base ,
68- 'currencies' : ',' .join (currencies )
88+ 'currencies' : ',' .join (currencies or []),
89+ 'date_type' : date_type ,
6990 })
7091 response = self .client .get (f'{ self .base_url } /change' , params = params )
7192 return response .json ()
7293
7394 def usage (self ):
7495 response = self .client .get (f'{ self .base_url } /usage' )
75- return response .json ()
96+ return response .json ()
0 commit comments