Задать вопрос
@diku1502

Как выполнить 2 функции в python используя телеграм бота?

Всем привет. Я сделал парсер-бота в телеге который парсит валюту с гугла. Вопрос: Как мне сделать так чтобы работало 2 функции параллельно? То есть функции: currency_USD = Currency_USD() и currency_EUR.check_currency_EUR(). Потому что если первой стоит функция доллара то парсится только доллар в телегу и наоборот. Если я отправляю запрос на евро, то парсится только евро и доллар не видит, хотя в терминал при помощи принта выводятся оба запроса.

import requests
from bs4 import BeautifulSoup
import telebot
from telebot import types
from threading import Thread
from multiprocessing import Process
bot = telebot.TeleBot('1156880733:AAGNUiAiw79mbTVLoD4tOZtykU5JLTORgOI')


@bot.message_handler(commands=['start'])
def start(message):
    markup = types.ReplyKeyboardMarkup(resize_keyboard=True, row_width=1)
    btn1 = types.KeyboardButton('Доллар $')
    btn2 = types.KeyboardButton('Фунт Стерлингов £')
    btn3 = types.KeyboardButton('Евро €')
    markup.add(btn1, btn2, btn3)
    send_mess = 'Воспользуйтесь клавиатурой'
    sti = open('stic/fr.webp', 'rb')
    bot.send_sticker(message.chat.id, sti)
    bot.send_message(message.chat.id, send_mess, sti, reply_markup=markup)

class Currency_EUR:
    EUR_LINK = 'https://www.google.com/search?client=firefox-b-d&q=%D0%B5%D0%B2%D1%80%D0%BE+%D0%BA+%D1%80%D1%83%D0%B1%D0%BB%D1%8E'
    headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0'}

    def get_currency_price_EUR(self):
        full_page = requests.get(self.EUR_LINK, headers=self.headers)
        soup = BeautifulSoup(full_page.content, 'html.parser')
        convert = soup.findAll("span", {"class": "DFlfde", "class": "SwHCTb", "data-precision": 2})
        return convert[0].text


    def check_currency_EUR(self):
        print('Выполняется парсинг евро...')
        currency_EUR = str(self.get_currency_price_EUR())
        print("Сейчас курс: 1 евро = " + str(currency_EUR))

        @bot.message_handler(content_types=['text'])
        def EUR(message):
            get_message_bot = message.text.strip().lower()
            if get_message_bot == 'евро €':
                bot.send_message(message.chat.id, 'Сейчас курс: 1 евро = ' + str(currency_EUR) + ' руб.')

# Основной класс
class Currency_USD:
    # Ссылка на нужную страницу
    DOLLAR_RUB = 'https://www.google.com/search?client=firefox-b-d&q=%D0%B4%D0%BE%D0%BB%D0%BB%D0%B0%D1%80+%D0%BA+%D1%80%D1%83%D0%B1%D0%BB%D1%8E'
    # Заголовки для передачи вместе с URL
    headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'}

    # Метод для получения курса валюты
    def get_currency_price_USD(self):
        # Парсим всю страницу
        full_page = requests.get(self.DOLLAR_RUB, headers=self.headers)
        # Разбираем через BeautifulSoup
        soup = BeautifulSoup(full_page.content, 'html.parser')
        # Получаем нужное для нас значение и возвращаем его
        convert = soup.findAll("span", {"class": "DFlfde", "class": "SwHCTb", "data-precision": 2})
        return convert[0].text

    # Проверка изменения валюты
    def check_currency_USD(self):
        print('Выполняется парсинг доллара...')
        currency_USD = str(self.get_currency_price_USD())
        print("Сейчас курс: 1 доллар = " + str(currency_USD))

        @bot.message_handler(content_types=['text'])
        def USD(message):
            get_message_bot = message.text.strip().lower()
            if get_message_bot == 'доллар $':
                bot.send_message(message.chat.id, "Сейчас курс: 1 доллар = " + str(currency_USD) + " руб.")


# Создание объекта и вызов метода доллара
currency_USD = Currency_USD()
currency_USD.check_currency_USD()


#Создание объекта и вызов метода евро
currency_EUR = Currency_EUR()
currency_EUR.check_currency_EUR()

# Создание объекта и вызов бота
bot.polling(none_stop=True)
  • Вопрос задан
  • 830 просмотров
Подписаться 3 Средний 1 комментарий
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы