Таблица нужна для регистрации (подписка и отписка) данных пользователя: id, time_zone, schedule. Бот по расписанию проверяет таблицу на соответствие текущего времени данным пользователя (зона и расписание), получает данные API погоды и отправляет в чат-бот личное сообщение.
Проблемы будут при определении точной погоды в каком-нибудь Задрищенске, которого нет в международной базе городов. В этом случае нужны будут географические координаты, как там
https://local-disc.firebaseapp.com/menu/#/weather (погода в Кремле).
Анна АндрееваУченик (34)
1 месяц назад
так,по поводу второго абзаца да,я понимаю,пока что пишу бота больше для опыта,думаю потом добавлю гео,но в первом абзаце вы действительно открыли мне глаза,а то я совсем не учла факт отличия часовых поясов,можете чуть подробнее рассказать каким образом я могу это сделать? просто ранее,повторюсь,опыта работы с бд не было,так что была бы очень благодарна
import sqlite3
from databases import Database
from aiogram import Bot
from sqlalchemy import Table
from aiogram.filters.command import Command
from aiogram import Bot, Dispatcher, types, F
import requests
import datetime
weather_key: str = '-'
def request_weather(city, time):
result = requests.get(" https://api.openweathermap.org/data/2.5/forecast ",
params={
'q': city,
'n': time,
'type': 'like',
'units': 'metric',
'lang': 'ru',
'APPID': weather_key,
}).json()
if result.get('cod') != "200":
return 0
else:
return generate_result(result, city)
TOKEN = '-'
bot = Bot(TOKEN)
dp = Dispatcher
@dp.message(Command("Приветствую! Укажи,пожалуйста,название своего населённого пункта и время,в которое тебе удобно будет получать прогноз каждый день. Например: Нижнекамск,8:00. Это значит,что в 8:00 тебе ежедневно будет приходить прогноз погоды на весь день."))
async def cmd_weather(message: types.Message):
city = message.get_args()
if not city:
await message.answer("Пожалуйста,укажи город")
return
weather_data = request_weather(city, time)
if weather_data == 0:
await message.answer(
"К сожалению,такой город не найден. Перепроверь,пожалуйста,точность написания и попробуй ещё раз")
else:
await message.answer(weather_data, parse_mode="HTML")
if not time:
await message.answer("Пожалуйста,укажи время,в которое хочешь получать прогноз погоды")
database = Database('sqlite:///bot.db')
bot.db = "C:\Users\uysha\OneDrive\Рабочий стол\weather-bleather\users wb#1.txt"
connection = sqlite3.connect('bot.db')
cursor = connection.cursor()
connection.close()
async def add_user_to_db(user_id, city, time):
insert_query = f"INSERT INTO users (user_id, city, time) VALUES (?, ?, ?)"
Table(user_id, city, time)
user_id('168408258')
city('Нижнекамск')
time('9:00')