Обработка ссылки для telegram бота в python
вечер). Нужна помощь в дипломной работе, изначальная задача сделать чат бот для компании, которая занимается жд перевозками и т.п, идея пока просто сделать поиск ближайших билетов с помощью Яндекс Api, но не выходит выгрузить в ответ бота информацию о билетах и не понимаю в чём проблема. Функция обрабатывающая команду по поиску билетов в предпоследняя. Заранее спасибо за любую помощь.
import requests
import telebot
from telebot import types
from bs4 import BeautifulSoup
TOKEN = 'Токен'
bot = telebot.TeleBot(TOKEN)
YApi = 'Токен API Яндекс.Расписание'
# Команда /start для приветствия и описания функциональности бота
@bot.message_handler(commands=['start'])
def start(message):
bot.send_message(message.chat.id, 'Добро пожаловать в нашу компанию!\n'
'Я бот, созданный для упрощения деятельности компании.\n'
'Вот список доступных команд:\n'
'/help - Помощь\n'
'/info - Информация о компании\n'
'/contact - Контактная информация\n'
'/feedback - Отправить отзыв\n'
'/order - Оформить заказ\n'
'/status - Проверить статус заказа')
keyboard = types.ReplyKeyboardMarkup(row_width=1, resize_keyboard=True)
btn1 = types.KeyboardButton(text='/help')
btn2 = types.KeyboardButton(text='/info')
btn3 = types.KeyboardButton(text='/contact')
btn4 = types.KeyboardButton(text='/feedback')
btn5 = types.KeyboardButton(text='/order')
btn6 = types.KeyboardButton(text='/status')
keyboard.add(btn1, btn2, btn3, btn4, btn5, btn6)
bot.send_message(message.chat.id, 'Добро пожаловать! Выберите одну из доступных опций:', reply_markup=keyboard)
# Команда /help для вывода списка доступных команд
@bot.message_handler(commands=['help'])
def help(message):
bot.send_message(message.chat.id, 'Вы выбрали команду /help. Вам помощь необходима?')
bot.send_message(message.chat.id, 'Список доступных команд:\n'
'/help - Помощь\n'
'/info - Информация о компании\n'
'/contact - Контактная информация\n'
'/feedback - Отправить отзыв\n'
'/order - Оформить заказ\n'
'/status - Проверить статус заказа')
# Команда /info для вывода информации о компании
@bot.message_handler(commands=['info'])
def info(message):
bot.send_message(message.chat.id, 'Вы выбрали команду /info. Вот информация о нашей компании:')
bot.send_message(message.chat.id, 'Наша компания - Глобал Лоистик, является лидером в области производства и продажи\n'
'товаров высокого качества. Мы предлагаем широкий ассортимент продукции,\n'
'включая электронику, одежду, мебель и многое другое.')
# Команда /contact для вывода контактной информации
@bot.message_handler(commands=['contact'])
def contact(message):
bot.send_message(message.chat.id, 'Вы выбрали команду /contact. Вот контактные данные нашей компании:')
bot.send_message(message.chat.id, 'Контактная информация:\n'
'Телефон: +1 123-456-7890\n'
'Email: [email][email protected][/email]\n'
'Адрес: 1234 Main St, Springfield, IL 62704, USA')
# Команда /feedback для отправки отзыва
@bot.message_handler(commands=['feedback'])
def feedback(message):
bot.send_message(message.chat.id, 'Вы выбрали команду /feedback.')
bot.send_message(message.chat.id, 'Вы можете отправить свой отзыв на нашу электронную почту: [email][email protected][/email]')
# Команда /order для оформления заказа
@bot.message_handler(commands=['order'])
def order(message):
bot.send_message(message.chat.id, 'Вы выбрали команду /order.')
bot.send_message(message.chat.id, 'Для оформления заказа, пожалуйста, свяжитесь с нашим отделом продаж по телефону\n'
'+1 123-456-7890 или отправьте запрос на [email][email protected][/email].')
# Команда /status для проверки статуса заказа
@bot.message_handler(commands=['status'])
def status(message):
bot.send_message(message.chat.id, 'Вы выбраали команду /status.')
bot.send_message(message.chat.id, 'Для проверки статуса заказа, пожалуйста, укажите номер заказа и отправьте запрос.')
@bot.message_handler(commands=['search_tickets'])
def search_tickets(message):
try:
# Отправка запроса на ввод города назначения
bot.send_message(message.chat.id, 'Введите город назначения:')
bot.register_next_step_handler(message, process_to_city_step)
except Exception as e:
bot.send_message(message.chat.id, f'Произошла ошибка: {e}')
# Обработка ввода города назначения
def process_to_city_step(message):
try:
# Получение города назначения от пользователя
to_city = message.text
# Формирование URL-адреса запроса к API Яндекс.Расписаний для поиска билетов
url = f'https://rasp.yandex.ru/search/?fromName=Новороссийск&toName={to_city}&apikey={YApi}'
# Отправка запроса на API Яндекс.Расписаний для поиска билетов
response = requests.get(url)
# Парсинг ответа
soup = BeautifulSoup(response.content, 'html.parser')
# Извлечение информации о билетах
tickets_info = []
segments = soup.find_all('div', class_='SearchTransfer__common')
for segment in segments:
departure_station = segment.find('div', class_='STableStation TableTimeAndStations__station').text.strip()
arrival_station = segment.find('div', class_='TableSearchTransferTimeAndDuration__stationsPath').text.strip()
train_title = segment.find('span', class_='SearchTransfer__title').text.strip()
tickets_info.append(f'Билет: {departure_station} - {arrival_station}, Поезд: {train_title}')
# Отправка информации о билетах пользователю
if tickets_info:
bot.send_message(message.chat.id, f'Найдены билеты в город {to_city}:\n' + '\n'.join(tickets_info))
else:
bot.send_message(message.chat.id, f'Билеты в город {to_city} не найдены')
except Exception as e:
bot.send_message(message.chat.id, f'Произошла ошибка: {e}')
# Обработка текстовых сообщений
@bot.message_handler(func=lambda message: True)
def handle_text(message):
# В данном примере можно добавить дополнительную логику, например, обработку регистрации и авторизации пользователей
# на ваше усмотрение
bot.send_message(message.chat.id, 'Извините, я не могу обработать ваш запрос. Нажмите или напишите /start для начала работы.')
# Запуск бота
if __name__ == '__main__':
bot.polling(none_stop=True)