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
Esempio n. 2
0
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
Esempio n. 3
0
    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
Esempio n. 4
0
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