首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用本地文件编辑电报信道中的消息图像

使用本地文件编辑电报信道中的消息图像
EN

Stack Overflow用户
提问于 2022-02-23 18:10:59
回答 3查看 557关注 0票数 1

我使用的方法是基于在通道中创建新图像发布所使用的模型,其当前的修改如下:

代码语言:javascript
运行
复制
import requests

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36"
    }

image_file = 'jogos_de_hoje_na_tv_plus_watermark.png'
chat_telegram_channel = ['-XXXXXXXXXXXXXXXXX']
idmessage = 16967

textalert = f'AAAAAAAAAA'
botalert = 'BBBBBBBBBBBB'
urlalert = f'https://api.telegram.org/bot{botalert}/editMessageMedia'
photourl  = open(image_file, "rb")
params = {'caption':textalert, 'chat_id':chat_telegram_channel, 'message_id':idmessage, 'media':photourl, 'parse_mode':'HTML'}
requests.get(urlalert, headers=headers, params=params)

请求的答复是:

代码语言:javascript
运行
复制
<html>
<head><title>414 Request-URI Too Large</title></head>
<body>
<center><h1>414 Request-URI Too Large</h1></center>
<hr><center>nginx/1.18.0</center>
</body>
</html>

尝试使用POST而不是GET

代码语言:javascript
运行
复制
data = {'caption':textalert, 'chat_id':chat_telegram_channel, 'message_id':idmessage, 'media':photourl, 'parse_mode':'HTML'}
requests.post(urlalert, headers=headers, data=data)

答复是:

代码语言:javascript
运行
复制
{
    "ok":false,
    "error_code":400,
    "description":"Bad Request: can't parse input media JSON object"
}

根据这个答案(https://stackoverflow.com/a/68689553/11462274),有必要序列化字符串,嗯,我尝试这样做:

代码语言:javascript
运行
复制
photourl  = open(image_file, "rb")
data = {'caption':textalert, 'chat_id':chat_telegram_channel, 'message_id':idmessage, 'media':json.dumps(str(photourl)), 'parse_mode':'HTML'}
requests.post(urlalert, headers=headers, data=data)

但答复是:

代码语言:javascript
运行
复制
{
    "ok":false,
    "error_code":400,
    "description":"Bad Request: can't parse InputMedia: expected an Object"
}

满足这一需求的API部分是:

https://core.telegram.org/bots/api#editmessagemedia

我该怎么办才能解决这个问题呢?

EN

Stack Overflow用户

回答已采纳

发布于 2022-02-24 15:14:05

您应该使用POST请求上传文件。

这就是使用post请求发送和编辑照片的方法:

代码语言:javascript
运行
复制
import requests
import json

botToken = 'REPLACE_TOKEN'
chatId = 0 # REPLACE CHAT ID


def send_photo():
    image = "image.jpg"
    address = f'https://api.telegram.org/bot{botToken}/sendPhoto'
    data = {"chat_id": chatId, "caption": "before edit"}
    with open(image, "rb") as imageFile:
        result = requests.post(address, files={"photo": imageFile}, data=data).json()
        if result["ok"]:
            return result["result"]["message_id"]
        else:
            raise Exception(result["description"])
    return


def edit_photo(message_id):
    image = "image2.jpg"
    address = f'https://api.telegram.org/bot{botToken}/editMessageMedia'
    media = {"type": "photo", "media": "attach://photo", "caption": "after edit"}
    data = {"chat_id": chatId, "message_id": message_id, "media": json.dumps(media)}
    with open(image, "rb") as imageFile:
        requests.post(address, files={"photo": imageFile}, data=data)
    return


edit_photo(send_photo())
票数 1
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71242089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档