egregors / cbrf

Wrapper for The Central Bank of the Russian Federation site API
MIT License
9 stars 3 forks source link

Запросы к API больше не работают #10

Open igor-i-plotnikov opened 2 years ago

igor-i-plotnikov commented 2 years ago

К сожалению, библиотека перестала возвращать курсы валют: ЦБ подключил через ddos-guard.net фильтр трафика. Можно ли с этим что-то сделать и восстановить работоспособность запросов к api?

egregors commented 2 years ago

Можно ли с этим что-то сделать и восстановить работоспособность запросов к api?

@igor-i-plotnikov пока сложно сказать. Сейчас, мягко говоря, не до этого. Посмотрю, что можно сделать на следующих выходных.

Если до этого момента появятся предложения \ варианты решения – буду рад любой помощи, особенно PR'ам.

egregors commented 2 years ago

upd:

An example about the problem:

from cbrf.models import DynamicCurrenciesRates
from datetime import datetime, timedelta
from decimal import Decimal

def get_change_24h(id_code, price):
    today = datetime.today()
    date2 = datetime(today.year, today.month, today.day)
    date1 = date2 - timedelta(days=2)
    date3 = date2 - timedelta(days=1)
    dynamic_rates = DynamicCurrenciesRates(
        date1, date2,
        id_code
    )
    yest_price = dynamic_rates.get_by_date(date3).value
    return (price - yest_price) / yest_price

print(get_change_24h('R01235', Decimal(28.0)))
Traceback (most recent call last):
  File "/home/itertea/python_dev/Coiner_tg/test.py", line 18, in <module>
    print(get_change_24h('R01235', Decimal(28.0)))
  File "/home/itertea/python_dev/Coiner_tg/test.py", line 10, in get_change_24h
    dynamic_rates = DynamicCurrenciesRates(
  File "/home/itertea/.cache/pypoetry/virtualenvs/not_slava_bot-b9y-JYSd-py3.10/lib/python3.10/site-packages/cbrf/models.py", line 163, in __init__
    self._raw_dynamic_rates = get_dynamic_rates(date_req1=date_1, date_req2=date_2, currency_id=id_code)
  File "/home/itertea/.cache/pypoetry/virtualenvs/not_slava_bot-b9y-JYSd-py3.10/lib/python3.10/site-packages/cbrf/api.py", line 83, in get_dynamic_rates
    return XML(response.text)
  File "/usr/lib64/python3.10/xml/etree/ElementTree.py", line 1349, in XML
    parser.feed(text)
xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 1, column 390

It could be a some sort of rate limits of anti ddos filters. Need to reproduce it and check what exactly the response contains.