def timestamp_normalizer(self, timestamp: datetime) -> datetime: if len(timestamp.split()) > 1: datestamp, time = timestamp.split() date, month, year = datestamp.split('.') hour, minut, second = time.split(':') timestamp = datetime(int(year), int(month), int(date), int(hour), int(minut), int(second)) else: date, month, year = timestamp.split('.') timestamp = datetime(int(year), int(month), int(date)) return timestamp
def auction_results(date: datetime) -> dict: """ get result of auctions. :param date: :return: """ date = date.strftime('%d.%m.%Y') year = date.split('.')[2] # url = 'https://www.bank.gov.ua/control/uk/auction/details?date=' + date + '&year=' + year url = 'https://www.bank.gov.ua/control/uk/auction/details' payload = {'date': date, 'year': year} # if not proxy_is_used: # responce_get = requests.get(url, headers=headers) # else: # responce_get = requests.get(url, headers=headers, timeout = 3, proxies=proxies) responce_get = requests.get(url, headers=headers, params=payload) soup = BeautifulSoup(responce_get.text, "html.parser") # if date != soup.body.table.find('option', attrs={'selected': ''})['value']: # return None document = {} get_float = lambda tag: float(tag.find('td', attrs={'class': 'cell_c'}).get_text(strip=True)) document['time'] = datetime.strptime(date, '%d.%m.%Y') document['source'] = 'nbu_auction' for field in soup.body.table.find('table', attrs={'border': '0', 'width': '650px'}).find_all('tr'): if isinstance(field.td, type(None)): continue if field.td.string == 'Валюта аукціону': if field.td.next_sibling.next_sibling.get_text(strip=True) == 'Долар США': document['currency'] = 'USD' else: document['currency'] = None elif type(field.next_element) == Comment: if field.next_element in [' 1 # 1.0.1 || 1.0.2 ', ' 1.0.1 || 1.0.2 ']: if field.td.get_text(strip=True) == 'КУПІВЛЯ': document['operation'] = 'buy' elif field.td.get_text(strip=True) == 'ПРОДАЖ': document['operation'] = 'sell' elif field.next_element in [' 2 # 1.1 ', ' 1.1 ', ' 3 ']: # Загальний обсяг заявок суб'єктів ринку, прийнятих на аукціон відповідно до умов його проведення (млн. од. валюти) document['amount_requested'] = get_float(field) elif field.next_element in [' 6 # 1.2.1 ', ' 1.2.1 ']: # Курси гривні, заявлені учасниками аукціону (грн. за 1 од. валюти) document['rate_r_max'] = get_float(field) elif field.next_element in [' 7 # 1.2.2 ', ' 1.2.2 ']: document['rate_r_min'] = get_float(field) elif field.next_element in [' 9 # 1.3.1 ', ' 1.3.1 ']: document['rate_acc_med'] = get_float(field) elif field.next_element in [' 10 # 1.3.2 ', ' 1.3.2 ']: document['rate_acc_max'] = get_float(field) elif field.next_element in [' 11 # 1.3.3 ', ' 1.3.3 ']: document['rate_acc_min'] = get_float(field) elif field.next_element in [' 12 # 1.4 ', ' 1.4 ', ' 7 ']: # Загальний обсяг задоволених заявок учасників аукціону (млн. од. валюти) document['amount_accepted_all'] = get_float(field) elif field.next_element == ' 13 - 1.5 || 1.6 ': # Частка задоволених заявок за максимальним курсом аукціону в загальному обсязі задоволених заявок (%) document['amount_accepted_p_min_max'] = get_float(field) return document
def _monthly_date(date: datetime) -> (str, str): date = date.strftime("%Y-%m-%d") year, month = date.split('-')[:-1] start_date = year + '-' + month + '-01' next_month = int(month) + 1 if int(month) < 12 else 1 next_month = str(next_month) if len( str(next_month)) > 1 else '0' + str(next_month) year = year if next_month == '01' else str(int(year) + 1) end_date = year + '-' + next_month + '-01' return start_date, end_date
def auction_results(date: datetime) -> dict: """ get result of auctions. :param date: :return: """ date = date.strftime('%d.%m.%Y') year = date.split('.')[2] # url = 'https://www.bank.gov.ua/control/uk/auction/details?date=' + date + '&year=' + year url = 'https://www.bank.gov.ua/control/uk/auction/details' payload = {'date': date, 'year': year} # if not proxy_is_used: # responce_get = requests.get(url, headers=headers) # else: # responce_get = requests.get(url, headers=headers, timeout = 3, proxies=proxies) responce_get = requests.get(url, headers=headers, params=payload) soup = BeautifulSoup(responce_get.text, "html.parser") # if date != soup.body.table.find('option', attrs={'selected': ''})['value']: # return None document = {} get_float = lambda tag: float( tag.find('td', attrs={ 'class': 'cell_c' }).get_text(strip=True)) document['time'] = datetime.strptime(date, '%d.%m.%Y') document['source'] = 'nbu_auction' for field in soup.body.table.find('table', attrs={ 'border': '0', 'width': '650px' }).find_all('tr'): if isinstance(field.td, type(None)): continue if field.td.string == 'Валюта аукціону': if field.td.next_sibling.next_sibling.get_text( strip=True) == 'Долар США': document['currency'] = 'USD' else: document['currency'] = None elif type(field.next_element) == Comment: if field.next_element in [ ' 1 # 1.0.1 || 1.0.2 ', ' 1.0.1 || 1.0.2 ' ]: if field.td.get_text(strip=True) == 'КУПІВЛЯ': document['operation'] = 'buy' elif field.td.get_text(strip=True) == 'ПРОДАЖ': document['operation'] = 'sell' elif field.next_element in [' 2 # 1.1 ', ' 1.1 ', ' 3 ']: # Загальний обсяг заявок суб'єктів ринку, прийнятих на аукціон відповідно до умов його проведення (млн. од. валюти) document['amount_requested'] = get_float(field) elif field.next_element in [' 6 # 1.2.1 ', ' 1.2.1 ']: # Курси гривні, заявлені учасниками аукціону (грн. за 1 од. валюти) document['rate_r_max'] = get_float(field) elif field.next_element in [' 7 # 1.2.2 ', ' 1.2.2 ']: document['rate_r_min'] = get_float(field) elif field.next_element in [' 9 # 1.3.1 ', ' 1.3.1 ']: document['rate_acc_med'] = get_float(field) elif field.next_element in [' 10 # 1.3.2 ', ' 1.3.2 ']: document['rate_acc_max'] = get_float(field) elif field.next_element in [' 11 # 1.3.3 ', ' 1.3.3 ']: document['rate_acc_min'] = get_float(field) elif field.next_element in [' 12 # 1.4 ', ' 1.4 ', ' 7 ']: # Загальний обсяг задоволених заявок учасників аукціону (млн. од. валюти) document['amount_accepted_all'] = get_float(field) elif field.next_element == ' 13 - 1.5 || 1.6 ': # Частка задоволених заявок за максимальним курсом аукціону в загальному обсязі задоволених заявок (%) document['amount_accepted_p_min_max'] = get_float(field) return document