Мне нужна помощь с ботом который находит погоду в интернете и присылает ее пользователю,
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 пользователя.