Telegram api html table

Как отправить таблицы с помощью Telegram Bot API?

Привет, люди RPA, это снова я и я несу подарки! В очередном моем приключении о том, как создавать ботов для облегчения рутины. Вот, думаю, стоит.

Ответы 6

Вы можете использовать разметку HTML или Уценка, чтобы отправить что-то вроде в HTML. Прямо как этот пример.

или он может преобразовать таблицу в изображение.

Установите для параметра Telegram API parse_mode значение HTML. и заверните сообщение в , но помните, что API Telegram не поддерживает вложенные теги.

 
| Tables | Are | Cool | |----------|:-------------:|------:| | col 1 is | left-aligned | $1600 | | col 2 is | centered | $12 | | col 3 is | right-aligned | $1 |

Результат в мессенджере Telegram:

ScreenShot from telegram bot

Обновлено. Как преобразовать таблицы на картинке

На маленьких экранах смартфонов будет проблема. Так что этот метод не годится. Единственный вариант — преобразовать таблицы на картинке и отправить:

  1. Или вы можете преобразовать HTML в изображение, используя браузер без заголовка на вашем сервере.
  2. Или вы можете преобразовать HTML в изображение, используя здесь внешний API сервисы
  3. Или вы можете преобразовать HTML в изображение более сложным способом с помощью php GD

Как преобразовать таблицу в картинку?

Я нашел эту библиотеку — TableJs — которая решает эту проблему. Отлично работает в клиентах для настольных ПК, однако клиенты Android не отображали его должным образом.

```| Symbol | Price | Change | |--------|-------|--------| | ABC | 20.85 | 1.626 | | DEF | 78.95 | 0.099 | | GHI | 23.45 | 0.192 | | JKL | 98.85 | 0.292 |``` 

Вам необходимо установить параметр parse_mode = ParseMode.MARKDOWN_V2, чтобы это работало.

Форматирование текста как «Моноширинный» тоже работает

Импортируйте библиотеку «prettytable» в Python для форматирования таблицы:

import prettytable as pt from telegram import ParseMode from telegram.ext import CallbackContext, Updater def send_table(update: Updater, context: CallbackContext): table = pt.PrettyTable(['Symbol', 'Price', 'Change']) table.align['Symbol'] = 'l' table.align['Price'] = 'r' table.align['Change'] = 'r' data = [ ('ABC', 20.85, 1.626), ('DEF', 78.95, 0.099), ('GHI', 23.45, 0.192), ('JKL', 98.85, 0.292), ] for symbol, price, change in data: table.add_row([symbol, f'', f'']) update.message.reply_text(f' 
', parse_mode=ParseMode.HTML) # or use markdown update.message.reply_text(f'``````', parse_mode=ParseMode.MARKDOWN_V2) 

Вы получите сообщение вроде:

+--------+-------+--------+ | Symbol | Price | Change | +--------+-------+--------+ | ABC | 20.85 | 1.626 | | DEF | 78.95 | 0.099 | | GHI | 23.45 | 0.192 | | JKL | 98.85 | 0.292 | +--------+-------+--------+ 

Источник

Как отправить таблицы с помощью Telegram Bot API?

Импортируйте библиотеку "prettytable" в Python для форматирования таблицы:

import prettytable as pt from telegram import ParseMode from telegram.ext import CallbackContext, Updater def send_table(update: Updater, context: CallbackContext): table = pt.PrettyTable(['Symbol', 'Price', 'Change']) table.align['Symbol'] = 'l' table.align['Price'] = 'r' table.align['Change'] = 'r' data = [ ('ABC', 20.85, 1.626), ('DEF', 78.95, 0.099), ('GHI', 23.45, 0.192), ('JKL', 98.85, 0.292), ] for symbol, price, change in data: table.add_row([symbol, f'', f'']) update.message.reply_text(f' 
', parse_mode=ParseMode.HTML) # or use markdown update.message.reply_text(f'``````', parse_mode=ParseMode.MARKDOWN_V2) 

Вы получите сообщение вроде:

+--------+-------+--------+ | Symbol | Price | Change | +--------+-------+--------+ | ABC | 20.85 | 1.626 | | DEF | 78.95 | 0.099 | | GHI | 23.45 | 0.192 | | JKL | 98.85 | 0.292 | +--------+-------+--------+ 

Вы можете использовать разметку HTML или Markdown, чтобы отправить что-то вроде в HTML. Так же, как этот пример.

Вот мое решение, использующее puppeteer для снимка экрана элемента таблицы.

Прежде всего, вам нужно сгенерировать HTML-код таблицы, вот код для генерации этого кода.

async function generateHtml(rows) < return `   thead, tfoot < background-color: #3f87a6; color: #fff; >tbody < background-color: #e4f0f5; >caption < padding: 10px; caption-side: bottom; >table < border-collapse: collapse; border: 2px solid rgb(200, 200, 200); letter-spacing: 1px; font-family: sans-serif; font-size: .8rem; >td, th < border: 1px solid rgb(190, 190, 190); padding: 5px 10px; >td   $
Pornhub Pages Summary
ID Progress Stucked Finished Busy
` >

И вот код для генерации rows аргумент вышеуказанной функции

async function getTheImgOfTheSummaryOfThePages() < const rows = [] for (const [index, val] of statuesOfThePages.entries()) < const row = `$ $ $ $ $ ` rows.push(row) > const path = './summaryOfThePagesOfPornhub.png' const html = await generateHtml(rows.join('\n')) await util.takescrrenshotOnTheHtml(html, browser, path, 'table') return path > 

А вот код скриншота элемента table

async function takescrrenshotOnTheHtml(html, browser, pathToSave, onElement) < const page = await newPage(browser); await page.setContent(html) const element = await page.$(onElement) await element.screenshot() await page.close() > 

Ну, вам просто нужно изменить заголовки таблицы и строки таблицы

Я нашел эту библиотеку - TableJs - которая решает эту проблему. Отлично работает в клиентах для настольных ПК, однако клиенты Android не отображали его должным образом.

Formatting the text as "Monospace" works too

Я написал код для создания html-таблицы Telegram из массива строк.

Просто создайте массив со строками с данными столбцов, разделенными ";" и этот код выведет готовую таблицу Telegram.

Наслаждайтесь, разберитесь с параметрами 🙂

Вы должны использовать «parse_mode» = «html» при отправке сообщения в Telegram Api.

public string BuildTelegramTable( List table_lines, string tableColumnSeparator = "|", char inputArraySeparator = ';', int maxColumnWidth = 0, bool fixedColumnWidth = false, bool autoColumnWidth = false, int minimumColumnWidth = 4, int columnPadRight = 0, int columnPadLeft = 0, bool beginEndBorders = true) < var prereadyTable = new List() < "
" >; var columnsWidth = new List(); var firstLine = table_lines[0]; var lineVector = firstLine.Split(inputArraySeparator); if (fixedColumnWidth && maxColumnWidth == 0) throw new ArgumentException("For fixedColumnWidth usage must set maxColumnWidth > 0"); else if (fixedColumnWidth && maxColumnWidth > 0) < for(var x=0;xelse < for(var x=0;xcolumnFullLength = line.Split(inputArraySeparator)[x].Length > columnFullLength ? line.Split(inputArraySeparator)[x].Length : columnFullLength); columnFullLength = columnFullLength < minimumColumnWidth ? minimumColumnWidth : columnFullLength; var columnWidth = columnFullLength + columnPadRight + columnPadLeft; if (maxColumnWidth >0 && columnWidth > maxColumnWidth) columnWidth = maxColumnWidth; columnsWidth.Add(columnWidth); > > foreach(var line in table_lines) < lineVector = line.Split(inputArraySeparator); var fullLine = new string[lineVector.Length+(beginEndBorders ? 2 : 0)]; if (beginEndBorders) fullLine[0] = ""; for(var x=0;xdataLength ? dataLength : columnSizeWithoutTrimSize; var columnData = clearedData.Substring(0,dataCharsToRead); columnData = columnData.PadRight(columnData.Length + columnPadRight); columnData = columnData.PadLeft(columnData.Length + columnPadLeft); var column = columnData.PadRight(columnWidth); fullLine[x+(beginEndBorders ? 1 : 0)] = column; > if (beginEndBorders) fullLine[fullLine.Length - 1] = ""; prereadyTable.Add(string.Join(tableColumnSeparator,fullLine)); > prereadyTable.Add("

"); return string.Join("\r\n",prereadyTable); >

Источник

How to send Tables with Telegram Bot API

Set the Telegram API parse_mode parameter to HTML and wrap the message in , but remember that telegram API does not support nested tags.

 
| Tables | Are | Cool | |----------|:-------------:|------:| | col 1 is | left-aligned | $1600 | | col 2 is | centered | $12 | | col 3 is | right-aligned | $1 |

Result in Telegram messanger:

ScreenShot from telegram bot

Updated. How convert the tables in the picture

There will be a problem on the small screens of smartphones. So this method is not good. The only option is to convert the tables in the picture and so send :

  1. Or you can convert HTML to image using a headerless browser on your server.
  2. Or you can convert HTML to image using here external API services
  3. Or you can convert HTML to image using more difficult way by php GD
Telegram Bot – how to get a group chat id

In order to get the group chat id, do as follows:

  1. Add the Telegram BOT to the group.
  2. Get the list of updates for your BOT:
 https://api.telegram.org/bot/getUpdates 
 https://api.telegram.org/bot123456789:jbd78sadvbdy63d37gda37bd8/getUpdates 

This is a sample of the response when you add your BOT into a group.

  1. Use the "id" of the "chat" object to send your messages.
  2. (If you created the new group with the bot and you only get <"ok":true,"result":[]>, remove and add the bot again to the group)
  3. Private chart only works in image argoprojlabs/argocd-notifications:v1.1.0 or above.
Javascript – Send a pdf file using telegram bot api

You can specify the file name and file type by using this code:

 getImage("https://your.url/yourfile.pdf", function(err, data) < if(err)< throw new Error(err); >const fileOptions = < // Explicitly specify the file name. filename: 'mypdf.pdf', // Explicitly specify the MIME type. contentType: 'application/pdf', >; bot.sendDocument(msg.chat.id, data, <>, fileOptions); >); 

NOTE: You MUST provide an empty object (<>) in place of Additional Telegram query options, if you have no query options to specify. For example,

// WRONG! // 'fileOptions' will be taken as additional Telegram query options.

bot.sendAudio(chatId, data, fileOptions); 
bot.sendAudio(chatId, data, <>, fileOptions); 

Источник

Читайте также:  Jms java для чего
Оцените статью