Время прочтения: 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