import requests
import json
from datetime import datetime, timedelta
from BaseModels.mailSender import techSendMail
from GeneralApp.temp_data_funcs import *
def get_nbrb_currency_id_by_currency_code(code):
data = requests.get('https://www.nbrb.by/api/exrates/currencies')
json_data = json.loads(data.content)
for item in json_data:
if 'Cur_Abbreviation' in item and item['Cur_Abbreviation'] == code:
return item['Cur_Code']
return None
def get_nbrb_rate_by_currency_code(code, date=None):
# if code == 'BYN':
# return 1
#
# tmp_rec = get_tmp_data('currency_rate', code)
# if tmp_rec and tmp_rec.json_data:
# # если с момента последнего импорта прошло меньше 30 минут - забираем курс из базы
# if datetime.strptime(tmp_rec.json_data['DT'], '%d.%m.%Y %H:%M') + timedelta(minutes=30) > datetime.now():
# return tmp_rec.json_data['rate']
# currency_id = get_nbrb_currency_id_by_currency_code('USD')
rate = None
res = None
req_str = None
try:
msg = f'get_nbrb_rate_by_currency_code'
print(msg)
if not date:
# data = requests.get('https://www.nbrb.by/API/ExRates/Rates/{0}?Periodicity=0'.format(str(currency_id)))
req_str = 'https://www.nbrb.by/api/exrates/rates/{0}?parammode=2'.format(str(code))
else:
date_str = datetime.now().strftime('%Y-%m-%d')
date_str = date_str.replace('-0', '-')
req_str = 'https://www.nbrb.by/api/exrates/rates/{0}?parammode=2&ondate={1}'.format(
str(code),
date_str
)
e = None
try:
msg = f'GET {req_str}'
print(msg)
res = requests.get(req_str, timeout=3)
msg = f'answer received = {str(res)}'
print(msg)
except Exception as e:
msg = f'Exception GET {req_str} = {str(e)} ({str(res)})'
print(msg)
res = None
if not res and res != 200:
# if tmp_rec:
# rate = tmp_rec.json_data['rate']
# else:
# rate_Dict = {
# 'rate': 1,
# 'DT': datetime.now().strftime('%d.%m.%Y %H:%M')
# }
# create_or_update_tmp_data('currency_rate', code, rate_Dict)
# rate = 1
msg = '!!!!! --- get_nbrb_rate_by_currency_code requests GET error={0}
{1}
{2}
rate set = {3}'.format(
str(e),
str(res),
str(req_str),
str(rate)
)
print(msg)
techSendMail(msg, 'tE get_nbrb_rate_by_currency_code error')
data = json.loads(res.content)
if data and 'Cur_OfficialRate' in data and 'Cur_Scale' in data:
rate = data['Cur_OfficialRate'] / data['Cur_Scale']
rate_Dict = {
'rate': rate,
'DT': datetime.now().strftime('%d.%m.%Y %H:%M')
}
create_or_update_tmp_data('currency_rate', code, rate_Dict)
except Exception as e:
msg = '!!!!! --- get_nbrb_rate_by_currency_code error={0}
{1}
{2}'.format(
str(e),
str(res),
str(req_str)
)
print(msg)
techSendMail(msg, 'tE get_nbrb_rate_by_currency_code error')
# if not res:
# rate_Dict = {
# 'rate': 1,
# 'DT': datetime.now().strftime('%d.%m.%Y %H:%M')
# }
# create_or_update_tmp_data('currency_rate', code, rate_Dict)
# return 1
if rate:
msg = f'get nbrb nb rate = {rate}'
print(msg)
return rate