Анализ данных, Обработка документов

Бот для конвертации ipynb файлов

Время прочтения: 2 мин.

Для примера напишем конвертер ipynb в html. Сначала получим api токен, для этого в поиске телеграмма найдём «Bot Father». Следуя его инструкции, получим наш токен. Теперь запрограммируем логику нашего бота, с помощью библиотеки telebot языка Python. С этой библиотекой очень просто работать, в ней есть много готовых методов для получения и отправки файлов.

Наша программа получает файл ipynb, скачивает его в папку tmp, затем вызывает метод converter, который делает конвертацию в html страницу, и отправляет результат в чат, после чего удаляет файл из папки tmp. Код описанного алгоритма представлен ниже.

@bot.message_handler(content_types=['document'])
def send_text(message):
    try:
        file_name = message.document.file_name
        file_id = message.document.file_name
        file_id_info = bot.get_file(message.document.file_id)
        downloaded_file = bot.download_file(file_id_info.file_path)
        src = file_name
        if not os.path.exists('tmp'): os.makedirs('tmp') 
        save_dir = r'tmp'
        full_name = save_dir + '/' + src
 
        with open(full_name, 'wb') as new_file:
            new_file.write(downloaded_file)
 
        converter(full_name)
        file_to_send = open(full_name.split('.ipynb')[0] + '.html', 'rb')
        bot.send_document(message.chat.id, data = file_to_send)
        file_to_send.close()
 
        os.remove(full_name.split('.ipynb')[0] + '.html')
 
    except Exception as ex:
        for i in os.listdir(save_dir):
            try:
                os.remove(save_dir + '/' + i)
            except:
                pass
        bot.send_message(message.chat.id, "[!] error - {}".format(str(ex)))

Сам конвертер реализован с помощью библиотеки nbconvert. Код конвертера представлен ниже.

def converter(input_file):
    f = open(input_file, 'r').read()
    jake_notebook = nbformat.reads(f, as_version=4)
    jake_notebook.cells[0]
    html_exporter = HTMLExporter()
    (body, resources) = html_exporter.from_notebook_node(jake_notebook)
    with open(input_file.split('.ipynb')[0] + '.html', 'w') as out:
        out.write(body)

Полученную html страницу легко открыть через любое мобильное устройство, которое имеет доступ в интернет. Пример работы бота показан на Рисунке.

Полную реализацию бота можно посмотреть: https://github.com/pavelKatk/ipynb2html-converter

Советуем почитать