Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- !pip install pyTelegramBotAPI
- !pip install googletrans
- !pip install flask
- import telebot
- import requests
- from googletrans import Translator
- from pprint import pprint
- import datetime
- APPID = 'd699d894ac2c53930be1ee0df5f8d64d'
- TOKEN = '833600167:AAFs3BiDmCGOc_kTqFyssj0nUmrOnT-wr9Y'
- bot = telebot.TeleBot(TOKEN)
- translator = Translator()
- users = {}
- modes = {}
- def weather(city, gap):
- answer = ''
- try:
- if gap == 'now':
- res = requests.get("http://api.openweathermap.org/data/2.5/weather",
- params={'q': (city), 'units': 'metric', 'lang': 'ru', 'APPID': APPID})
- data = res.json()
- pprint(data)
- answer = str(data['weather'][0]['description']) + '\n' + str(data['main']['temp']) + ' ℃'
- elif gap == 'hourly':
- answer = []
- data = requests.get("http://api.openweathermap.org/data/2.5/forecast/hourly",
- params={'q': (city), 'units': 'metric', 'lang': 'ru', 'APPID': APPID}).json()
- for i in data['list']:
- answer.append(i['dt_txt'] + '\n' + i['weather']['description'] + '\n' + i['main']['temp'])
- answer = '\n'.join(answer)
- elif gap == '5d':
- answer = []
- data = requests.get("http://api.openweathermap.org/data/2.5/forecast",
- params={'q': (city), 'units': 'metric', 'lang': 'ru', 'APPID': APPID}).json()
- for i in data['list']:
- answer.append(i['dt_txt'] + '\n' + i['weather']['description'] + '\n' + i['main']['temp'])
- answer = '\n'.join(answer)
- elif gap == '16d':
- answer = []
- data = requests.get("http://api.openweathermap.org/data/2.5/forecast/daily",
- params={'q': (city), 'units': 'metric', 'lang': 'ru', 'APPID': APPID}).json()
- for i in data['list']:
- answer.append(i['dt_txt'] + '\n' + i['weather']['description'] + '\n' + i['main']['temp'])
- answer = '\n'.join(answer)
- except Exception as e:
- answer = "Exception (weather): " + str(e)
- return answer
- def coord(lat, lon):
- try:
- res = requests.get("http://api.openweathermap.org/data/2.5/weather",
- params={'lat': str(lat), 'lon': str(lon), 'units': 'metric', 'lang': 'ru', 'APPID': APPID})
- data = res.json()
- answer = str(data['weather'][0]['description']) + '\n' + str(data['main']['temp']) + ' ℃' + '\n' + str(
- data['name'])
- if gap == 'now':
- res = requests.get("http://api.openweathermap.org/data/2.5/weather",
- params={'lat': str(lat), 'lon': str(lon), 'units': 'metric', 'lang': 'ru',
- 'APPID': APPID})
- data = res.json()
- pprint(data)
- answer = str(data['weather'][0]['description']) + '\n' + str(data['main']['temp']) + ' ℃'
- elif gap == 'hourly':
- answer = []
- data = requests.get("http://api.openweathermap.org/data/2.5/forecast/hourly",
- params={'lat': str(lat), 'lon': str(lon), 'units': 'metric', 'lang': 'ru',
- 'APPID': APPID}).json()
- for i in data['list']:
- answer.append(i['dt_txt'] + '\n' + i['weather']['description'] + '\n' + i['main']['temp'])
- answer = '\n'.join(answer)
- elif gap == '5d':
- answer = []
- data = requests.get("http://api.openweathermap.org/data/2.5/forecast",
- params={'lat': str(lat), 'lon': str(lon), 'units': 'metric', 'lang': 'ru',
- 'APPID': APPID}).json()
- for i in data['list']:
- answer.append(i['dt_txt'] + '\n' + i['weather']['description'] + '\n' + i['main']['temp'])
- answer = '\n'.join(answer)
- elif gap == '16d':
- answer = []
- data = requests.get("http://api.openweathermap.org/data/2.5/forecast/daily",
- params={'lat': str(lat), 'lon': str(lon), 'units': 'metric', 'lang': 'ru',
- 'APPID': APPID}).json()
- for i in data['list']:
- answer.append(i['dt_txt'] + '\n' + i['weather']['description'] + '\n' + i['main']['temp'])
- answer = '\n'.join(answer)
- except Exception as e:
- answer = "Exception (weather): " + str(e)
- return answer
- def to_coords(city):
- url = "https://geocode-maps.yandex.ru/1.x/"
- params = {
- 'geocode': city,
- 'format': 'json'
- }
- response = requests.get(url, params)
- json = response.json()
- coordinates_str = json['response']['GeoObjectCollection']['featureMember'][0]['GeoObject']['Point']['pos']
- lon, lat = map(float, coordinates_str.split())
- return lat, lon
- def get_carbon(lat, lon):
- try:
- data = requests.get("http://api.openweathermap.org/pollution/v1/co/",
- params={'location': f'{str(lat)},{str(lon)}',
- 'datetime': datetime.datetime.now().isoformat(), 'APPID': APPID}).json()
- answer = data['data'][0]['value']
- except Exception as e:
- answer = e
- return answer
- @bot.message_handler(commands=['start'])
- def handle_start(message):
- user_markup = telebot.types.ReplyKeyboardMarkup(True, False)
- user_markup.row('/start', '/stop')
- # user_markup.row('Погода')
- bot.send_message(message.from_user.id,
- "Напишите нужный вам город или отправьте геопозицию и получите сводку погоды.",
- reply_markup=user_markup)
- @bot.message_handler(commands=['stop'])
- def handle_stop(message):
- hide_markup = telebot.types.ReplyKeyboardRemove()
- bot.send_message(message.from_user.id, "...", reply_markup=hide_markup)
- @bot.message_handler(commands=['gap'])
- def handle_stop(message):
- global users
- msgl = message.text.lower().strip('/gap').strip()
- if msgl in ['now', 'hourly', '5d', '16d']:
- users[message.from_user.id] = msgl
- else:
- bot.send_message(message.from_user.id,
- "Некорректный промежуток времени. Значения: now, hourly, 5d, 16d")
- @bot.message_handler(commands=['mode'])
- def handle_stop(message):
- global users
- msgl = message.text.lower().strip('/mode').strip()
- if msgl in ['weather', 'cd']:
- users[message.from_user.id] = msgl
- else:
- bot.send_message(message.from_user.id,
- "Некорректное значение. Допустимые: weather, cd")
- @bot.message_handler(content_types=['location'])
- def handle_location(message):
- global users, modes
- if message.from_user.id not in users:
- users[message.from_user.id] = 'day'
- if message.from_user.id not in modes:
- modes[message.from_user.id] = 'weather'
- answer = coord(message.location.latitude, message.location.longitude)
- bot.send_message(message.from_user.id, answer)
- if modes[message.from_user.id] == 'weather':
- bot.send_message(message.from_user.id, coord(message.location.latitude, message.location.longitude))
- else:
- bot.send_message(message.from_user.id, get_carbon(message.location.latitude, message.location.longitude))
- @bot.message_handler(content_types=['text'])
- def handle_text(message):
- global users
- if message.from_user.id not in users:
- users[message.from_user.id] = 'day'
- if message.from_user.id not in modes:
- modes[message.from_user.id] = 'weather'
- if modes[message.from_user.id] == 'weather':
- bot.send_message(message.from_user.id, weather(translator.translate(message.text.lower(), dest='en').text,
- users[message.from_user.id]))
- else:
- bot.send_message(message.from_user.id, get_carbon(*to_coords(message.text.lower())))
- bot.polling(none_stop=True)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement