0
0 Комментариев

Написал бота в телеграме — основная его задача показывать материалы с сайта, которые должен соскрабить (если так можно выражаться) pandas.

Запрос он отправляет только при включении бота, во время запроса он не обновляет эту информацию (т.е. бота нужно выключить и включить снова, чтобы он обновил данные).

Я не понимаю, как сделать так, чтобы скрабил pandas не вначале, а после каждого запроса от пользователя.

UPD: Хорошо, если код нужен, то скину. Заранее извиняюсь, если кого-то стошнит — я пока достаточно коряво пишу =( Сам код —

import telebot
import currency
import datetime
 
TOKEN = ''
bot = telebot.TeleBot(TOKEN)
 
now = datetime.datetime.now()
time = str(now.year) + "." + str(now.month) + "." + str(now.day) + " " + str(now.hour) + ":" + str(now.minute) + ":" + str(now.second)
 
 
 
@bot.message_handler(commands=['start'])
def start(message):
    sent = bot.send_message(message.chat.id, 'Привет, ' + str(message.chat.username) + '! Какая валюта тебя интересует? На данный момент я знаю курс : \n1.Доллара\n2.Евро\n3.Фунта\n4.Франка\n5.Юан\n6.Иен')
 
@bot.message_handler(content_types=['text'])
def handler_text(message):
    if message.text == "Доллар" or "Dollar" or "USD" or "/usd" or "/dollar" or "1" or "/1":
        bot.send_message(message.chat.id, "Стоимость Доллара на на момент запроса (" + str(time)  + ") - " + str(currency.usd) + " Рублей")
    elif message.text == "Евро" or "Euro" or "/euro" or "2" or "/2":
        bot.send_message(message.chat.id, "Стоимость Евро на на момент запроса (" + str(time)  + ") - " + str(currency.eur) + " Рублей")
    elif message.text == "Фунт" or "lb" or "pound" or "/lb" or "/pound" or "3" or "/3":
        bot.send_message(message.chat.id, "Стоимость Фунта на на момент запроса (" + str(time)  + ") - " + str(currency.gbp) + " Рублей")
    elif message.text == "Иена" or "Yen" or "/yen" or "6" or "/6":
        bot.send_message(message.chat.id, "Стоимость Иен на на момент запроса (" + str(time)  + ") - " + str(currency.jpy) + " Рублей")
    elif message.text == "Юань" or "Yuan" or "/yuan" or "5" or "/5":
        bot.send_message(message.chat.id, "Стоимость Юаней на на момент запроса (" + str(time)  + ") - " + str(currency.cny) + " Рублей")
    elif message.text == "Франк" or "Frank" or "/frank" or "4" or "/4":
        bot.send_message(message.chat.id, "Стоимость Франков на на момент запроса (" + str(time)  + ") - " + str(currency.chf) + " Рублей")
 
 
 
bot.polling(none_stop=True, interval=0)

Файл currency.py —

import pandas as pd
 
df = pd.read_html('http://www.finanz.ru/valyuty/v-realnom-vremeni', encoding='utf-8')[1] \
       .dropna(axis=1)
 
usd1 = df.loc[df[1].str.contains(r'^USD\/')]
eur1 = df.loc[df[1].str.contains(r'^EUR\/')]
gbp1 = df.loc[df[1].str.contains(r'^GBP\/')]
jpy1 = df.loc[df[1].str.contains(r'^JPY\/')]
cny1 = df.loc[df[1].str.contains(r'^CNY\/')]
chf1 = df.loc[df[1].str.contains(r'^CHF\/')]
 
usd = int(usd1[2][3]) / 10000
eur = int(eur1[2][2]) / 10000
gbp = int(gbp1[2][1]) / 10000
jpy = int(jpy1[2][4]) / 10000
cny = int(cny1[2][5]) / 10000
chf = int(chf1[2][6]) / 10000

Большое спасибо всем, кто проявляет интерес.


Добавить комментарий