Загрузка...

Python | Aiogram | повторное отправление сообщений

Тема в разделе Python создана пользователем FeelMyLife 18 дек 2020. 320 просмотров

  1. FeelMyLife
    FeelMyLife Автор темы 18 дек 2020 294 9 апр 2020
    Столкнулся с такой ситуацией, которую к сожалению не могу победить. Написан бот, который проверяет "изменения" из выписки ЕГРН, через requests.

    Если запускать скрипт отдельно, то отрабатывает на 100 процентов. Но вот если данный скрипт начинает работать в боте, то возникают такие ситуации когда сообщения о статусе дублируются (не сразу, а со временем), и по одной фирме в чат приходят 3-4 сообщения одинаково содержания.


    Код

    async def zzz(wait_for: int, coro):
    while True:
    await asyncio.sleep(wait_for)
    await coro()

    if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    Block = Blocker()
    Check = Checker()
    loop.create_task(zzz(900, coro = Block.run_all))
    loop.create_task(zzz(1700 coro = Check.main))
    execute.start_polling(dp,loop = loop)
    Блоки ```Block``` и ```Checker``` это как раз сами проверки один проверяет на наличие блокировки фирмы, второй проверяет на наличие изменении в выписки ЕГРН.



    Ниже представлен метод получения ТОКЕНОВ

    Код

    async def get_token(self, proxy, inn):
    if len(str(inn)) == 10:
    params = {"page": "1", "pageSize": "10", "pbCaptchaToken": "", "token": "", "mode": "search-all", "queryAll": str(inn), "queryUl": "", "okvedUl": "", "statusUl": "", "regionUl": "", "isMspUl": "", "mspUl1": "1", "mspUl2": "2", "mspUl3": "3", "queryIp": "", "okvedIp": "", "statusIp": "", "regionIp": "", "isMspIp": "", "mspIp1": "1", "mspIp2": "2", "mspIp3": "3", "queryUpr": "","uprType1": "1","uprType0": "1", "queryRdl": "", "dateRdl": "", "queryAddr": "", "regionAddr": "", "queryOgr": "", "ogrFl": "1", "ogrUl": "1", "npTypeDoc": "1", "ogrnUlDoc": "", "ogrnIpDoc": "","nameUlDoc": "","nameIpDoc": "","formUlDoc": "","formIpDoc": "","ifnsDoc": "","dateFromDoc": "","dateToDoc": ""}
    try:
    async with httpx.AsyncClient(headers=self.__headers, proxies=f'http://{proxy}') as client:
    response = await client.post(self.__url_token, params=params)
    if response.status_code == 200:
    r = response.json()
    await self.fetch_token(r)
    else:
    await self.__rotate_proxy()
    await self.get_token(proxy=self._proxy, inn=inn)

    except Exception as e:
    logger.error(f'ОШИБКА|{proxy}|{inn}|{e}')
    try:
    await self.__rotate_proxy()
    async with httpx.AsyncClient(headers=self.__headers, proxies=f'http://{self._proxy}') as client:
    response = await client.get(self.__url_token, params=self.__params)
    r = response.json()
    await self.fetch_token(r)
    except:
    pass

    Это метод получения уже самой информации, которая мне необходима



    Код

    async def data_for_token(self, proxy, token):
    params2 = {'token': str(token)}
    try:
    async with httpx.AsyncClient(proxies=f'http://{proxy}') as client:
    response2 = await client.post(self.__url_check, params=params2)
    if response2.status_code == 200:
    e = response2.json()
    await self.check_changes(e)
    else:
    await self.__rotate_proxy()
    logger.warning(f'Повторное отправление {token}')
    await self.data_for_token(proxy=self._proxy, token=token)
    except Exception as e:
    print(e)

    Ну и собственно сам вывод информации в телеграмм бот


    Код

    @staticmethod
    async def check_changes(res: dict):

    data = res.get('vyp')
    name_firm = data.get('НаимЮЛПолн')
    inn = data.get('ИНН')
    mes = None
    try:
    if 'СвНедАдресЮЛ' in data:
    info = data.get('СвНедАдресЮЛ')[0]
    mes = f'Название:{name_firm}\nИНН:{inn}\n\tТекст:<b>СВЕДЕНИЯ О НЕДОСТОВЕРНОСТИ ДАННЫХ ОБ АДРЕСЕ ' \

    if 'СведДолжнФЛ' in data:
    info = data.get('СведДолжнФЛ')[0]
    sugn = info.get('СвНедДанДолжнФЛ')[0]
    mes = f'Название:{name_firm}\nИНН:{inn}\n\tТекст:<b>СВЕДЕНИЯ О НЕДОСТОВЕРНОСТИ ДАННЫХ О РУКОВОДИТЕЛЕ ' \
    f'КОМПАНИИ</b>\n\t{sugn.get("ТекстНедДанДолжнФЛ")}\n\tДата записи:{sugn.get("ДатаЗаписи")}'
    await bot.send_message(chat_id=xxx, text=mes)
    except Exception as e:
    pass


    Прошу прощения, если написан много не нужной информации, постарался максимально изложить всю суть проблемы. Подскажите куда надо копать, и как это можно исправить.
     
    18 дек 2020 Изменено
  2. Двач
    Двач 18 дек 2020 Заблокирован(а) 5 18 дек 2020
    Оберни это всё пожалуйста в
    Python
    тут твой код[CODE], пока что не читабельно
     
    1. FeelMyLife Автор темы
      Двач, Спасибо большое на быструю руку писал. забыл про форматирование
Top
Загрузка...