from telegram.ext import Updater from telegram.ext import InlineQueryHandler from bs4 import BeautifulSoup import requests import logging from telegram import InlineQueryResultArticle, InputTextMessageContent import os logger = logging.getLogger(__name__) updater = Updater(token=os.environ.get("BOT_TOKEN")) dispatcher = updater.dispatcher logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO) SEARCH_URL = 'https://www.etymonline.com/search?q=' def inline_etym(update, context): query = update.inline_query.query try: logger.info(f"Query: {query}") results = list() text = first_result_return(query) content = f"{query}:\n{text}" results.append(InlineQueryResultArticle( id=query, title=query, input_message_content=InputTextMessageContent(content)) ) context.bot.answer_inline_query(update.inline_query.id, results) except AttributeError: pass if __name__ == '__main__': inline_etym_handler = InlineQueryHandler(inline_etym) dispatcher.add_handler(inline_etym_handler) updater.start_polling(timeout=600) ''' functions from https://github.com/tetrismegistus/etym ''' def soup_search(search_term): # post request to search URL, return beautiful soup parsed object url = SEARCH_URL + search_term response = requests.get(url) return BeautifulSoup(response.text, 'html.parser') def first_result_return(word): search_page = soup_search(word) return search_page.find("section", class_="word__defination--2q7ZH undefined").get_text()