Задать вопрос
@uyshaaaaaa

Как правильно указать точку входа в yandex cloud?

Учусь программированию на python,только написала свой первый тг-бот с использованием базы данных,выбор хостинга пал на яндекс,интерфейс удобный,с впн не надо заходить как на heroku. Яндекс требует указать точку входа в формате имя_файла.обработчик_запросов. Столько с этим у меня мучений. Я использую асинхронную функцию,так что сначала точка входа была имя_файла.async,яндекс выдал ошибку,в поддержке мне сказали использовать в качестве обработчика main,так как async уже зарезервирован python,и это не сработало,поддержка начала меня откровенно игнорить,создавать какие-то обращения,в которых рекомендавали мне обратиться к их фрилансерам. Может хоть здесь кто-то действительно сможет помочь,ниже предоставлю код,может я действительно туплю,такого факта не исключаю,опыта то у меня вообще нет

import asyncio
import datetime
import sqlite3
import requests
from aiogram import Bot, Dispatcher, types
from aiogram.filters.command import Command


TOKEN = '-'  
WEATHER_API_KEY = '-'  

bot = Bot(token=TOKEN)
dp = Dispatcher()

 


def create_db():

    con = sqlite3.connect('wbuser.db')
    cursor = con.cursor()
    cursor.execute('''
        CREATE TABLE IF NOT EXISTS users (
            user_id INTEGER PRIMARY KEY,
            city TEXT NOT NULL,
            time_user TEXT NOT NULL
        )
    ''')
    con.commit()
    con.close()


def request_weather(city):
    """Makes a request to OpenWeatherMap API and returns weather data."""
    try:
        result = requests.get(
            "https://api.openweathermap.org/data/2.5/forecast",
            params={
                'q': city,
                'units': 'metric',
                'lang': 'ru',
                'APPID': WEATHER_API_KEY,
            }
        ).json()
        if result.get('cod') != "200":
            return 0, f"Ошибка: населённый пункт '{city}' не найден."
        return result, None
    except requests.exceptions.RequestException as e:
        return 0, f"Ошибка запроса погоды: {e}"


def generate_result(data, city):
    """Generates a formatted string with weather information."""
    result_string = f"<b>Прогноз погоды в городе {city}</b>\n\n"
    for i in data['list'][:24]:
        cloudy = 'ㅤ' if i.get('cloudy') is None else '⛅️'
        clear = 'ㅤ' if i.get('clear') is None else '☀️'
        temp = int(i['main']['temp'])
        rain = 'ㅤ' if i.get('rain') is None else ''
        snow = 'ㅤ' if i.get('snow') is None else '❄️'
        lightning = 'ㅤ' if i.get('lightning') is None else '️⚡️'

        time = datetime.datetime.fromtimestamp(i['dt']).strftime('%H:%M')
        result_string += (
            f"ㅤ: {cloudy}, ㅤ: {clear}, "
            f"{time} {temp}°C, "
            f" ㅤ: {rain}, ㅤ: {snow}, ㅤ: {lightning}\n "
        )
    return result_string


@dp.message(Command('start'))
async def cmd_start(message: types.Message):
    await message.answer("Привет! Для получения самого точного прогноза погоды, укажи, пожалуйста, свой населённый пункт и время, в которое ты бы хотел получать прогноз :\n"
        "<населённый пункт>, <время> Например: «Нижнекамск, 08:00», это значит, что прогноз в городе Нижнекамск будет приходить тебе каждый день в 8 утра"
    )


@dp.message()
async def save_user_data(message: types.Message):
    """Saves user's city and desired time for weather updates."""
    try:
        user_id = message.from_user.id
        city, time_user = message.text.split(',')

        con = sqlite3.connect('wbuser.db')
        cursor = con.cursor()
        cursor.execute('''
            INSERT OR REPLACE INTO users (user_id, city, time_user) VALUES (?, ?, ?)
        ''', (user_id, city.strip(), time_user.strip()))
        con.commit()
        con.close()

        await message.answer(f"Город {city.strip()} и время {time_user.strip()} успешно сохранены!")
    except (ValueError, sqlite3.OperationalError) as e:
        await message.answer(f"Ошибка при записи данных: {e}. Попробуйте еще раз. Введите данные в формате 'город, время' (например: Нижнекамск, 08:00)")


async def send_weather_updates():
    while True:
        now = datetime.datetime.now().strftime('%H:%M')

        con = sqlite3.connect('wbuser.db')
        cursor = con.cursor()
        cursor.execute('SELECT user_id, city FROM users WHERE time_user = ?', (now,))
        users = cursor.fetchall()
        con.close()
       
        await asyncio.sleep(60)
        
async def main():
create_db()
    await dp.start_polling(bot)
    asyncio.create_task(send_weather_updates())



if __name__ == '__main__':
    asyncio.run(main())
  • Вопрос задан
  • 108 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
nki
@nki
bezkart.ru готовая система лояльности
Начните разбираться с этого примера.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы