使用 Telegram Bot API,
我知道可以通过 https://core.telegram.org/bots/api#sendphoto
发送图像但是,如何将远程图像嵌入到格式化消息中?
我想要发送的消息可以与带有粗体标题、图像和带有链接的较长文本的新闻文章进行比较。我想出了如何使用 Markdown 创建粗体文本和链接,但我无法插入图像。我们怎样才能做到这一点?
您必须在 HTML 中设置 ParseMode 并在 A 标记中设置图像 Url,如下所示:
<a href="' + image + '">‍</a>
‍
-> 从不在消息中显示
使用
sendPhoto
而不是 sendMessage
是实现此目的的一种更简洁的方法,具体取决于您的用例,例如:
import io
import json
import requests
telegram_bot_token = 'INSERT_TOKEN_HERE'
chat_id = '@INSERT_CHAT_ID_HERE'
bot_url = 'https://api.telegram.org/bot' + telegram_bot_token + '/sendPhoto'
img_url = 'https://upload.wikimedia.org/wikipedia/commons/thumb/0/02/Stack_Overflow_logo.svg/200px-Stack_Overflow_logo.svg.png'
msg_txt = '<b>Stack Overflow Logo</b>'
msg_txt += '\n\nStack Overflow solves all our problems'
payload = {
'chat_id': chat_id,
'caption': msg_txt,
'parse_mode': 'html'
}
remote_image = requests.get(img_url)
photo = io.BytesIO(remote_image.content)
photo.name = 'img.png'
files = {'photo': photo}
req = requests.post(url=bot_url, data=payload, files=files)
response = req.json()
print(response)
import requests
text="testing"
img="http://imageurl.png"
r = requests.get('https://api.telegram.org/botyour_token_here/sendMessage?chat_id=@your_channel_here&parse_mode=markdown&text='+"[]("+img+")"+text)
可能对某人有用。我已经成功以这种方式发送照片+文本+parse_mode(文本格式):
files = {
'chat_id': id,
'text': text,
'photo': open('/root/****/****/*****/photo.jpg', 'rb')
}
url = f'https://api.telegram.org/bot{telegramToken}/sendPhoto?chat_id={id}&caption={text}&parse_mode=HTML'
requests.post(url, files=files)
我只是在 Java 代码中创建了一个指向该点的链接,并将其作为带有预览的消息发送。
"<a href=\"https://avandy-news.ru/*.jpg\">.</a>"
messageService.sendMessageWithPreview(chatId, text, Keyboards.getInfoKeyboard());
public void sendMessageWithPreview(long chatId, String textToSend, ReplyKeyboard keyboard) {
SendMessage message = new SendMessage();
message.setChatId(chatId);
if (textToSend != null && !textToSend.isEmpty()) message.setText(textToSend);
else return;
message.enableHtml(true);
message.setParseMode(ParseMode.HTML);
if (keyboard != null) message.setReplyMarkup(keyboard);
executeMessage(message);
}
private void executeMessage(SendMessage message) {
try {
execute(message);
} catch (TelegramApiException e) {
..
}
return null;
}