Как настроить автообновление информации в боте с парсеров
Есть бот под ВК, написанный на Python, размещён на хостинг Heroku. Также на тот же сервер размещены несколько парсеров с разных сайтов, но присутствует небольшая проблема, когда на сайтах информация обновляется, в боте этого не происходит автоматически, только при перезапуска бота вручную. Вопрос: как сделать, чтобы информация автоматически обновлялась и доходила до бота? Пример парсера(ruble_course.py):
import requests as req
from bs4 import BeautifulSoup as BS
r_usd = req.get('https://finance.rambler.ru/calculators/converter/1-USD-RUB/')
html_usd = BS(r_usd.content, 'html.parser')
value_usd = html_usd.select('.converter-display__value')
dif_usd = html_usd.select('.converter-change-table__change')
Использование в боте:
import ruble_course_parser as rcp
import vk_api
from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType
#login to system as club bot
vk_session = vk_api.VkApi(token='тут токен')
longpoll = VkBotLongPoll(vk_session, group_id)
#to get methods
vk = vk_session.get_api()
#ruble course message send
rcp_message = 'Курс рубля: \n 1 доллар = {0} рублей\n Изменение: {1}'.format(rcp.usd_course, rcp.usd_course_dif)
def main():
for event in longpoll.listen():
#if new message was got
if event.type == VkBotEventType.MESSAGE_NEW:
message = event.obj['message']
user = message['from_id']
text = message['text']
if text == 'Узнать курс рубля':
vk.messages.send(peer_id=user,\
message=rcp_message,random_id = 0)
#run mainloop
if __name__ == '__main__':
main()
Ответы (1 шт):
Автор решения: Егор Голев
→ Ссылка
Всем спасибо, кто хотел ответить. Я нашел ответ (https://qna.habr.com/q/520860), для будущих поколений.
Раз вариант:
import sched, time
s = sched.scheduler(time.time, time.sleep)
def f():
s.enter(5, 1, f) # Перезапуск через 5 секунд
print(time.time())
f()
s.run()
Два вариант:
import threading
def f():
threading.Timer(5.0, f).start() # Перезапуск через 5 секунд
print("Hello!")
f()
Совсем тупой вариант:
import time
def f():
print("Hello!")
while True:
time.sleep(5)
f()