Мне нужна помощь с ботом который находит погоду в интернете и присылает ее пользователю,

from telebot import TeleBot, types
from bs4 import BeautifulSoup
import requests
import tokcen
import json
import os
TOKEN = tokcen.token
bot = TeleBot(TOKEN)


def get_city_by_number(number):
    # Путь к файлу, откуда будут считаны данные
    file_path = 'location.json'

    # Проверяем, существует ли файл
    # if not os.path.exists(file_path):
    #     return None

    # Читаем данные из файла
    with open(file_path, 'r', encoding='utf-8') as f:
        try:
            file_data = json.load(f)
            entry = file_data.get(number)
            if entry:
                return entry["city"]
        except json.JSONDecodeError:
            print("Ошибка при чтении файла.")



def save_city_and_number_to_json(city, number):
    # Путь к файлу, где будут сохранены данные
    file_path = 'location.json'

    if os.path.exists(file_path):
        # Если файл уже существует, читаем его содержимое и обновляем данные
        with open(file_path, 'r+', encoding='utf-8') as f:
            try:
                file_data = json.load(f)

                # Создаем новый словарь с текущими данными
                new_entry = {number: {"city": city}}

                # Обновляем файл, добавляя новый словарь
                file_data.update(new_entry)
                f.seek(0)
                json.dump(file_data, f, ensure_ascii=False, indent=4)
                f.truncate()
            except json.JSONDecodeError:
                print("Ошибка при чтении файла. Запись новых данных.")
                f.seek(0)
                json.dump({number: {"city": city}}, f, ensure_ascii=False, indent=4)
                f.truncate()
    else:
        # Если файл еще не существует, создаем новый файл и записываем туда данные
        with open(file_path, 'w', encoding='utf-8') as f:
            json.dump({number: {"city": city}}, f, ensure_ascii=False, indent=4)

    print(f'Город {city} и номер {number} успешно сохранены в файл {file_path}')


@bot.message_handler(commands=["start"])
def start(message):
    city_message = bot.send_message(chat_id=message.chat.id, text = "введите город")
    bot.register_next_step_handler(city_message, get_city)

def get_city(message):
    city = message.text
    number = message.from_user.id
    save_city_and_number_to_json(city,number)
    print(number)
    return number



@bot.message_handler(commands=["weather"])
def check_weather(message):
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36"
    }

    responce = requests.get(f"https://www.google.com/search?q=погода+в+{get_city_by_number(get_city)}", headers=headers)

    soup = BeautifulSoup(responce.text, "html.parser")

    temperature = soup.select("#wob_tm")[0].getText()
    title = soup.select("#wob_dc")[0].getText()
    humidity = soup.select("#wob_hm")[0].getText()
    time = soup.select("#wob_dts")[0].getText()
    wind = soup.select("#wob_ws")[0].getText()


    weather_return = f"В городе {get_city_by_number(get_city)} {temperature}℃, ветер {wind}, а влажность {humidity}"

    bot.send_message(chat_id=message.chat.id, text=weather_return)


if __name__ == '__main__':
    bot.polling(none_stop=True)

при запуске программы и введению города бот вместо погоды во введенном городе выдает None то есть в городе None... Еще есть файл location.json в который сохраняются данные о городе и id пользователя.


Ответы (0 шт):