我使用的方法是基于在通道中创建新图像发布所使用的模型,其当前的修改如下:
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)
请求的答复是:
<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
data = {'caption':textalert, 'chat_id':chat_telegram_channel, 'message_id':idmessage, 'media':photourl, 'parse_mode':'HTML'}
requests.post(urlalert, headers=headers, data=data)
答复是:
{
"ok":false,
"error_code":400,
"description":"Bad Request: can't parse input media JSON object"
}
根据这个答案(https://stackoverflow.com/a/68689553/11462274),有必要序列化字符串,嗯,我尝试这样做:
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)
但答复是:
{
"ok":false,
"error_code":400,
"description":"Bad Request: can't parse InputMedia: expected an Object"
}
满足这一需求的API部分是:
https://core.telegram.org/bots/api#editmessagemedia
我该怎么办才能解决这个问题呢?
发布于 2022-02-24 15:14:05
您应该使用POST请求上传文件。
这就是使用post请求发送和编辑照片的方法:
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())
https://stackoverflow.com/questions/71242089
复制相似问题