如何使用Telegram Bot API发送表格?

Adi*_*tya 6 telegram telegram-bot

我现在需要发送股票市场数据和格式很糟糕.需要发送一些类似的东西

| Symbol | Price | Change | 
|--------|-------|--------|
| ABC | 20.85 | 1.626 | 
| DEF | 78.95 | 0.099 | 
| GHI | 23.45 | 0.192 | 
| JKL | 98.85 | 0.292 |
Run Code Online (Sandbox Code Playgroud)

这就是我尝试过的.

| 符号| 价格| 改变|
| -------- | ------- | -------- |
| ABC | 20.85 | 1.626 |
| DEF | 78.95 | 0.099 |
| GHI | 23.45 | 0.192 |
JKL | 98.85 | 0.292 |

Rio*_*oka 14

在 python 中导入“prettytable”库来格式化你的表:

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'{price:.2f}', f'{change:.3f}'])

    update.message.reply_text(f'<pre>{table}</pre>', parse_mode=ParseMode.HTML)
    # or use markdown
    update.message.reply_text(f'```{table}```', parse_mode=ParseMode.MARKDOWN_V2)
Run Code Online (Sandbox Code Playgroud)

您将收到如下消息:

+--------+-------+--------+
| Symbol | Price | Change |
+--------+-------+--------+
| ABC    | 20.85 |  1.626 |
| DEF    | 78.95 |  0.099 |
| GHI    | 23.45 |  0.192 |
| JKL    | 98.85 |  0.292 |
+--------+-------+--------+
Run Code Online (Sandbox Code Playgroud)

  • 好的解决方案!仅供参考,它与列名称中的表情符号配合不好 (3认同)

Rus*_*kov 12

将 Telegram API parse_mode参数设置为HTML 并将消息包装在 中<pre></pre> ,但请记住,电报 API 不支持嵌套标签。

<pre>
| Tables   |      Are      |  Cool |
|----------|:-------------:|------:|
| col 1 is |  left-aligned | $1600 |
| col 2 is |    centered   |   $12 |
| col 3 is | right-aligned |    $1 |
</pre>
Run Code Online (Sandbox Code Playgroud)

结果在电报信使:

来自电报机器人的屏幕截图

更新。如何转换图片中的表格

智能手机的小屏幕会出现问题。所以这个方法不好。唯一的选择是转换图片中的表格,然后发送:

  1. 或者,您可以使用服务器上的无标题浏览器将 HTML 转换为图像。
  2. 或者您可以使用此处的外部API 服务将 HTML 转换为图像
  3. 或者您可以通过php GD使用更困难的方式将 HTML 转换为图像


小智 8

尝试这个

```| Symbol | Price | Change |
|--------|-------|--------|
| ABC    | 20.85 |  1.626 |
| DEF    | 78.95 |  0.099 |
| GHI    | 23.45 |  0.192 |
| JKL    | 98.85 |  0.292 |```
Run Code Online (Sandbox Code Playgroud)

  • 您需要设置 parse_mode=ParseMode.MARKDOWN_V2 参数才能正常工作。 (3认同)

Sea*_*ean 6

您可以使用HTMLMarkdown标记来发送类似<pre>HTML 的内容。就像这个例子