D
D
dyrtage62020-07-22 14:50:24
Python
dyrtage6, 2020-07-22 14:50:24

Why doesn't parser work in python telegram bot?

I'm making a simple parser to track the weather. The bot shows nothing. Why is this happening?
Here is the code -

import telebot
import random
import wikipedia
import config
import time
import requests
from bs4 import BeautifulSoup as BS
from telebot import types
from covid import Covid

bot = telebot.TeleBot(config.token)

play = ["Бумага", "Ножницы", "Камень"]
covid = Covid()
wikipedia.set_lang("RU")

@bot.message_handler(commands=['start'])
def welcome(message):
  sti = open('static/welcome.tgs', 'rb')
  bot.send_sticker(message.chat.id, sti)

  # keyboard
  markup = types.ReplyKeyboardMarkup(resize_keyboard=True)
  item1 = types.KeyboardButton("Погода")
  item2 = types.KeyboardButton("Как дела?")
  item3 = types.KeyboardButton("Камень, ножницы, бумага")
  item4 = types.KeyboardButton("Данные об Коронавирусе")
  item5 = types.KeyboardButton("Википедия")

  markup.add(item1, item2, item3, item4, item5)

  bot.send_message(message.chat.id, "Добро пожаловать, {0.first_name}!\nЯ - <b>{1.first_name}</b>, бот созданный чтобы быть подопытным кроликом.".format(message.from_user, bot.get_me()),
    parse_mode='html', reply_markup=markup)

@bot.message_handler(content_types=['text'])
def task(message):
  try:
    if message.chat.type == 'private':
      if message.text == 'Погода':
        WEATHER = "https://www.google.com/search?q=%D0%BF%D0%BE%D0%B3%D0%BE%D0%B4%D0%B0+%D0%B2+%D0%BD%D0%BE%D0%B2%D0%BE%D1%87%D0%B5%D0%B1%D0%BE%D0%BA%D1%81%D0%B0%D1%80%D1%81%D0%BA%D0%B5&rlz=1C1DVJR_ruRU904RU904&oq=%D0%BF%D0%BE%D0%B3%D0%BE%D0%B4%D0%B0+%D0%B2+%D0%BD&aqs=chrome.1.69i57j69i59j0l5j69i60.2784j1j7&sourceid=chrome&ie=UTF-8"
        headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.163 Safari/537.36"}

        full_page = requests.get(WEATHER, headers=headers)
        soup = BeautifulSoup(full_page.content, 'html.parser')
        degree = soup.findAll("span", {"class": "wob_t", "id": "wob_tm", "style": "display:inline"})
        precipitation = soup.findAll("span", {"id": "wob_pp"})
        wind = soup.findAll("span", {"class": "wob_t", "id": "wob_ws"})

        bot.send_message(message.chat.id, "Температура: " + degree[0].text + " градуса")
        bot.send_message(message.chat.id, "Вероятность осадков: " + precipitation[0].text)
        bot.send_message(message.chat.id, "Скорость ветра: " + wind[0].text)

      elif message.text == 'Как дела?':
        markup = types.InlineKeyboardMarkup(row_width=2)
        item1 = types.InlineKeyboardButton("Хорошо", callback_data='good')
        item2 = types.InlineKeyboardButton("Не очень", callback_data='bad')

        markup.add(item1, item2)

        bot.send_message(message.chat.id, 'Отлично, сам как?', reply_markup=markup)

      elif message.text == 'Камень, ножницы, бумага':
        play = open('static/play.tgs', 'rb')
        bot.send_sticker(message.chat.id, play)
        markup = types.InlineKeyboardMarkup(row_width=3)
        item1 = types.InlineKeyboardButton("Камень", callback_data='rock')
        item2 = types.InlineKeyboardButton("Ножницы", callback_data='scissors')
        item3 = types.InlineKeyboardButton("Бумага", callback_data='paper')

        markup.add(item1, item2, item3)

        bot.send_message(message.chat.id, 'Давай сыграем в игру "Камень, ножницы, бумага". Напиши свой ход и я его сделаю))', reply_markup=markup)

      elif message.text == 'Данные об Коронавирусе':
        bot.send_message(message.chat.id, 'Заражено - ' + str(covid.get_total_confirmed_cases()) + '\nВыздоровело - ' + str(covid.get_total_recovered()) + '\nУмерло - ' + str(covid.get_total_deaths()))

      elif message.text == 'Википедия':
        bot.send_message(message.chat.id, 'Введите /Вики и то что хотите узнать')
      elif '/Вики' in message.text:
        search_query = message.text.replace('/Вики ', '')
        search_result = str(wikipedia.summary(search_query))
        wmeski = "Вот что я нашёл: \n{}".format(search_result)
        bot.send_message(message.chat.id, wmeski)
      else:
        bot.send_message(message.chat.id, 'Я не знаю что ответить ')
  except Exception as E:
    time.sleep(1)

@bot.callback_query_handler(func=lambda call: True)
def callback_inline(call):
  try:
    if call.message:
      if call.data == 'good':
        bot.send_message(call.message.chat.id, 'Вот и отличненько ')
      elif call.data == 'bad':
        bot.send_message(call.message.chat.id, 'Бывает ')

      elif call.data == 'rock':
        bot.send_message(call.message.chat.id, random.choice(play) + '. Как думаешь, кто выиграл? ')
      elif call.data == 'scissors':
        bot.send_message(call.message.chat.id, random.choice(play) + '. Как думаешь, кто выиграл? ')
      elif call.data == 'paper':
        bot.send_message(call.message.chat.id, random.choice(play) + '. Как думаешь, кто выиграл? ')

  except Exception as e:
    print(repr(e))

# RUN
bot.polling(none_stop=True)

Answer the question

In order to leave comments, you need to log in

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question