Запрос в Telegram боте
При написании бота в Телеграм с помощью PyTelegramBotAPI столкнулся со следующей проблемой: Имеется функция для поиска видео на Youtube. Функция принимает в себя аргументом ключевое слово\фразу для поиска. И возвращает список ссылок. Как реализовать это в боте так, что бы бот при использовании прописанной команды (скажем /find_video) запрашивал слово\фразу - аргумент для функции и возвращал список ссылок? Добился пока только следующего - аргумент прописан в коде - аргумент запрашивается и вводится непосредственно в PyCharm В обоих случаях, бот отправит ссылку на нужное видео, но только 1. Как вывести списком несколько ссылок?
Вот сама функция:
def findvideo(x):
data1 = []
url = 'https://www.youtube.com/results?search_query=' + quote(x)
links = urllib.request.urlopen(url).read().decode('cp1251', errors='ignore')
match = re.findall("\?v\=(.+?)\"", links)
if not (match is None):
for i in match:
if (len(i) < 25):
data1.append(i)
data1 = dict(zip(data1, data1)).values()
data2 = []
for y in data1:
data2.append('https://www.youtube.com/watch?v=' + y)
return data2
А вот тестовые хендлеры в боте:
@bot.message_handler(commands=["find_video"])
def cmd_find_video(message):
x = input('Введите запрос: ')
bot.send_message(message.chat.id, findvideo(x)) # Запрос вводится в PyCharm
@bot.message_handler(commands=["find_video"])
def cmd_find_video(message):
x = input('ключевоеслово\фраза\для поиска')
bot.send_message(message.chat.id, findvideo(x)) # Статичный аргумент для функции
Ответы (1 шт):
почему `input()` то?
@bot.message_handler(commands=["find_video"])
def find_video(message):
msg = bot.send_message(message.chat.id, 'Введите запрос: ')
bot.register_next_step_handler(msg, find_video_2)
def find_video_2(message):
query = findvideo(message.text.lower())
bot.send_message(message.chat.id, '{}'.format(query))