• Как сделать парсинг selenium раз в десять минут?

    @pavelermolenko Автор вопроса
    truenotnamed, попробовал сделать так:
    def getCurrentCourse():
        params = {
            "symbol": "EUR_RUB__TOD",
            "classcode": "CETS",
            "resolution": 60,
            "from": round(time() - 72 * 3600),
            "to": round(time())
        }
        response = get("https://api.bcs.ru/udfdatafeed/v1/history", params)
        data = response.json()
        if response:
            result = data.get("c")[-1] if data.get("c") else None
        else:
            result = None
        return result
    
    
    def get_value(coeff):
        curreu = str(round(float(getCurrentCourse())*coeff, 2))
        fin = "человек выдаст наличные евро, с вас перевод на карту сбербанка или другого российского банка. Курс обмена евро - " + curreu + " руб.\n" + "\n" + "Возможен обмен в обратную сторону. Курс уточняйте.\n" + "\n" + "Покупаем криптовалюту. Курс уточняйте."
        return fin
    
    
    
    print(get_value(coeff))


    выдает ошибку:
    Traceback (most recent call last):
      File "C:\Users\user\PycharmProjects\Currency_bot\main.py", line 44, in <module>
        print(get_value(coeff))
      File "C:\Users\user\PycharmProjects\Currency_bot\main.py", line 38, in get_value
        curreu = str(round(float(getCurrentCourse())*coeff, 2))
      File "C:\Users\user\PycharmProjects\Currency_bot\main.py", line 25, in getCurrentCourse
        "from": round(time() - 72 * 3600),
    TypeError: 'module' object is not callable

    Я, видимо, не совсем понял, в каком виде он возвращает значение
    Написано
  • Как сделать парсинг selenium раз в десять минут?

    @pavelermolenko Автор вопроса
    Justa Gain, потому что мне нужен курс конкретного источника, открытого api у него я не нашел
    Написано
  • Как отправлять сообщение каждый час?

    @pavelermolenko Автор вопроса
    await употребляется только внутри async функций -_-
    Написано
  • Как отправить стикеры через бота?

    @pavelermolenko Автор вопроса
    mmmxi, в aiogram не нахожу такой функции, только answer_sticker
  • Как отправить стикеры через бота?

    @pavelermolenko Автор вопроса
    дико извиняюсь, а что это за функция и куда ее поставить в код?
  • Как сделать так, чтобы inline-кнопка не исчезала?

    @pavelermolenko Автор вопроса
    Лучший, спасибо!
  • Как исправить aiogram.utils.exceptions.BadRequest: Unsupported parse_mode ошибку?

    @pavelermolenko Автор вопроса
    да, это вообще код ни о чем, я все до ума довел и отлично работает
    если вдруг кто то будет искать похожие вопросы, вот решение:
    import requests
    from aiogram import Bot, Dispatcher, executor, types
    import time
    from bs4 import BeautifulSoup
    EURO_RUB = 'https://www.google.com/search?q=euro+to+ruble&newwindow=1&sxsrf=APwXEde8pFrfqho1nOYcU2NFF-_YaVBCCg%3A1680350839745&ei=dx4oZP_5LLKB9u8P_v-OwAs&ved=0ahUKEwi_kZrX0oj-AhWygP0HHf6_A7gQ4dUDCA8&uact=5&oq=euro+to+ruble&gs_lcp=Cgxnd3Mtd2l6LXNlcnAQAzIMCAAQigUQQxBGEIICMgUIABCABDIFCAAQgAQyBQgAEIAEMgUIABCABDIFCAAQgAQyBQgAEIAEMgUIABCABDIFCAAQgAQyBQgAEIAEOgoIABBHENYEELADOgoIABCKBRCwAxBDOgQIIxAnOgoILhDHARDRAxAnOgsILhCABBDHARDRAzoHCAAQigUQQzoHCC4QigUQQzoQCC4QigUQxwEQ0QMQ1AIQQzoHCAAQgAQQCjoKCAAQgAQQFBCHAjoPCAAQgAQQFBCHAhBGEIICSgQIQRgAUIEIWLIeYL4iaAFwAXgAgAH0AYgBrAySAQU1LjcuMZgBAKABAcgBCsABAQ&sclient=gws-wiz-serp'
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36'} # добавляем в код ссылку на страницу, с которой берем курс валюты и данные сетевого агента
    
    
    def get_value(): # инициализация функции, которая парсит страницу и достает значение
        full_page = requests.get(EURO_RUB, headers=headers)
        soup = BeautifulSoup(full_page.content, 'html.parser') # передаем ссылку и данные сетевого агента в локальные переменные
        convert = soup.findAll("span", {"class": "DFlfde", "class": "SwHCTb", "data-precision": 2}) # используем функцию bs4, которая ищет нужный элемент на странице по его классам и характеристике data-precision
        print(convert[0].text) # просто тестовый принт взятого с веб-страницы значения
        fin = "Актуальный курс Евро (EUR):\n" + str(round(float(convert[0].text.replace(',', '.'))*1.05, 2)) + "\n" + "Актуальный курс Сербского Динара(RSD):\n"+ currdin = str(round(float(convert[0].text.replace(',', '.'))*1.05/117, 2)) + "\n" "Для обновления курса нажмите /refresh"
        return fin # делаю строковую переменную для вывода сообщения через бота, плюс умножил курс на комиссию брокера и свифт-перевода, а также посчитал курс сербских динаров через курс евро
    
    API_TOKEN = '5653760842:AAGQrVSXGQkMXpia3Ce9DNp2G60v3v291o8' # токен тг бота
    bot = Bot(token=API_TOKEN)
    dp = Dispatcher(bot) # создание переменных bot, которая равна функции bot(token) из библиотеки aiogram и переменной dp , которая равна функции dispatcher
    
    @dp.message_handler(commands=['start']) # этот хэндлер сработает тогда, когда пользователь отправит /start
    async def send_welcome(message: types.Message):
        await message.reply(get_value()) # при срабатывании хэндлера вызывается функция get_value()
    
    @dp.message_handler(commands=['refresh']) #  тот же самый хэндлер с той же функцией в теле, но вызывается по команде /refresh
    async def send_welcome(message: types.Message):
        await message.reply(get_value())
    
    if __name__ == '__main__':
        executor.start_polling(dp, skip_updates=True) # зацикливание программы