-
Notifications
You must be signed in to change notification settings - Fork 0
/
bot.py
75 lines (57 loc) · 3.72 KB
/
bot.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
'''
Tiempo América Central
Bot en Telegram sobre las condiciones atmosféricas actuales en América Central.
Archivo iniciador.
Autor: Andrés David Chavarría-Palma
Junio - 2023
'''
from bs4 import BeautifulSoup
from datetime import datetime, timedelta
import ssl
from telegram import Update, InlineKeyboardMarkup, InlineKeyboardButton
from telegram.ext import ApplicationBuilder, ContextTypes, CommandHandler, CallbackQueryHandler
from urllib.request import urlopen
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):
nombre = update.message.from_user.first_name
buttons = [[InlineKeyboardButton("Lista de comandos", callback_data="comandos")]]
await update.message.reply_text(text=f"¡Bienvenido {nombre}! Estoy para mostrarte la actualidad atmosférica de América Central. Mira la lista de comandos aceptados.",
reply_markup=InlineKeyboardMarkup(buttons))
async def ayuda(update: Update, context: ContextTypes.DEFAULT_TYPE):
await update.callback_query.answer()
ayuda_text = '''/tiempo para ver imagen satelital actualizada de las condiciones atmosféricas en América Central.'''
await context.bot.send_message(chat_id=update.effective_chat.id, text=ayuda_text)
async def tiempo(update: Update, context: ContextTypes.DEFAULT_TYPE):
await context.bot.send_chat_action(chat_id=update.effective_chat.id, action='upload_photo')
ahora = datetime.now()
if (ahora.hour >= 18 and ahora.hour<=23) or (ahora.hour >= 0 and ahora.hour<6):
html = urlopen('https://weather.msfc.nasa.gov/cgi-bin/get-abi?satellite=GOESEastfullDiskband14&lat=11.5&lon=-84.3&zoom=1&width=1000&height=800&quality=100&palette=ir2.pal', context=ctx).read()
soup = BeautifulSoup(html, 'html.parser')
imagen = 'https://weather.msfc.nasa.gov' + soup.img['src']
hora_utf = imagen.split('/')[-1][4:6] + ':' + imagen.split('/')[-1][6:8]
utc6 = timedelta(hours=6)
utc5 = timedelta(hours=5)
hora_6 = (datetime.strptime(hora_utf,'%H:%M') - utc6).strftime('%H:%M')
hora_5 = (datetime.strptime(hora_utf,'%H:%M') - utc5).strftime('%H:%M')
await context.bot.send_photo(chat_id=update.effective_chat.id, photo=imagen, caption = f'Condiciones atmosféricas a las {hora_6} UTC-6 y a las {hora_5} UTC-5 (horas locales). Fuente: GOES - NOAA. Banda 14, Infrarrojo de onda lejana.')
else:
html = urlopen('https://weather.msfc.nasa.gov/cgi-bin/get-abi?satellite=GOESEastfullDiskband02&lat=11.5&lon=-84.3&zoom=4&width=1000&height=800&quality=100', context=ctx).read()
soup = BeautifulSoup(html, 'html.parser')
imagen = 'https://weather.msfc.nasa.gov' + soup.img['src']
hora_utf = imagen.split('/')[-1][4:6] + ':' + imagen.split('/')[-1][6:8]
utc6 = timedelta(hours=6)
utc5 = timedelta(hours=5)
hora_6 = (datetime.strptime(hora_utf,'%H:%M') - utc6).strftime('%H:%M')
hora_5 = (datetime.strptime(hora_utf,'%H:%M') - utc5).strftime('%H:%M')
await context.bot.send_photo(chat_id=update.effective_chat.id, photo=imagen, caption = f'Condiciones atmosféricas a las {hora_6} UTC-6 y a las {hora_5} UTC-5 (horas locales). Fuente: GOES - NOAA. Banda 2, espectro del rojo visible.')
if __name__ == '__main__':
application = ApplicationBuilder().token('TOKEN').build()
ayuda_handler = CallbackQueryHandler(ayuda,'comandos')
start_handler = CommandHandler('start', start)
tiempo_handler = CommandHandler('tiempo', tiempo)
application.add_handler(ayuda_handler)
application.add_handler(start_handler)
application.add_handler(tiempo_handler)
application.run_polling()