Бот в ТГ Python

Рейтинг: 0Ответов: 1Опубликовано: 05.05.2023

Подскажите пожалуйста, как сделать что бы бот в ТГ присылал погоду(актуальную) раз в сутки. Когда первый раз запускаешь, он её присылает, а потом информация всегда устарешая, которая была на момент запуска. Сейчас у меня так.

pog = 'https://world-weather.ru/pogoda/russia/moscow/'
headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'} # Запрос как будто от юзера
r = requests.get(pog, headers=headers)

soup = BeautifulSoup(r.text, 'html.parser')

for temp in soup.select_one('.pane > .weather-today > .morning> .weather-temperature '):
    temp = temp.text

for obl in soup.find_all('span', id = 'weather-now-icon'): 
    obl = obl.get('title')

for vlazhnost in soup.select_one('.pane > .weather-today > .morning> .weather-humidity '): 
    vlazhnost = vlazhnost.text

for oshushaetsya in soup.select_one('.pane > .weather-today > .morning> .weather-feeling '): 
    oshushaetsya = oshushaetsya.text

for davlenie in soup.select_one('.pane > .weather-today > .morning> .weather-pressure '): 
    davlenie = davlenie.text

for veter in soup.select_one('.pane > .weather-today > .morning> .weather-wind '): 
    veter = veter.text

for osadki in soup.select_one('.pane > .weather-today > .morning> .weather-probability '): 
    osadki = osadki.text





def send_message():
    messagepog =
                 + 'Погода в Москве: ' + '\n' \
                 + str(temp) + '\n' \
                 + str(obl) + '\n' \
                 + 'Ощущается как: ' + str(oshushaetsya) + '\n' \
                 + 'Вероятность осадков: ' + str(osadki) + '\n' \
                 + "Давление: " + str(davlenie) + ' мм рт. ст.'+'\n'\ 
                 + 'Ветер: ' + str(veter) + ' м/с' + '\n' \
                 + 'Влажность: ' + str(vlazhnost) + '\n' \
              


    bot.send_message(chat_id=chat_id, text=messagepog)

schedule.every().day.at("07:00:00").do(send_message)
while True:
  schedule.run_pending()

Ответы

▲ -1

Самое банальное – сделать цикл "white True" и перед новой его итерацией поставить time.sleep():

pog = 'https://world-weather.ru/pogoda/russia/moscow/'
headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'} # Запрос как будто от юзера

def getData(pog, headers):
    r = requests.get(pog, headers=headers)

    soup = BeautifulSoup(r.text, 'html.parser')

    for temp in soup.select_one('.pane > .weather-today > .morning> .weather-temperature '):
        temp = temp.text

    for obl in soup.find_all('span', id = 'weather-now-icon'): 
        obl = obl.get('title')

    for vlazhnost in soup.select_one('.pane > .weather-today > .morning> .weather-humidity '): 
        vlazhnost = vlazhnost.text

    for oshushaetsya in soup.select_one('.pane > .weather-today > .morning> .weather-feeling '): 
        oshushaetsya = oshushaetsya.text

    for davlenie in soup.select_one('.pane > .weather-today > .morning> .weather-pressure '): 
        davlenie = davlenie.text

    for veter in soup.select_one('.pane > .weather-today > .morning> .weather-wind '): 
        veter = veter.text

    for osadki in soup.select_one('.pane > .weather-today > .morning> .weather-probability '): 
        osadki = osadki.text
    return temp, obl, vlazhnost, oshushaetsya, davlenie, veter, osadki


def send_message(chat_id):
    temp, obl, vlazhnost, oshushaetsya, davlenie, veter, osadki = getData(pog, headers)
    messagepog = 'Погода в Москве: ' + '\n' \
                 + str(temp) + '\n' \
                 + str(obl) + '\n' \
                 + 'Ощущается как: ' + str(oshushaetsya) + '\n' \
                 + 'Вероятность осадков: ' + str(osadki) + '\n' \
                 + "Давление: " + str(davlenie) + ' мм рт. ст.'+'\n'\
                 + 'Ветер: ' + str(veter) + ' м/с' + '\n' \
                 + 'Влажность: ' + str(vlazhnost) + '\n' \

    bot.send_message(chat_id=chat_id, text=messagepog)

while True:
    chat_id = # тут вставляете id из телеграма
    send_message(chat_id)
    time.sleep(60 * 60 * 24) # сутки