我使用的方法是基于在通道中创建新图像发布所使用的模型,其当前的修改如下:
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())发布于 2022-02-23 22:59:01
经过多次尝试,我想出了如何继续序列化字符串,然后编辑:
import requests
import json
BOT_TOKEN = 'AAAAAAAAAA'
chat_telegram_channel = 'BBBBBBBBBB'
idmessage = 16967
image_file = 'jogos_de_hoje_na_tv_plus_watermark.png'
urlalert = f'https://api.telegram.org/bot{BOT_TOKEN}/editMessageMedia'
textalert = f'Programação de jogos na TV\nPowered by:\n@mattosxperiences'
files = {
'media': open(image_file, "rb")
}
media = json.dumps({
'caption':textalert,
'type': 'photo',
'media': 'attach://media'
})
params = {
'chat_id':chat_telegram_channel,
'message_id':idmessage,
'media': media,
'parse_mode':'HTML'
}
requests.get(urlalert, params=params, files=files)发布于 2022-02-23 22:47:59
从数据中删除photourl并将其放入请求files参数中,如下所示:
photourl = open(image_file, "rb")
data = {
'caption':textalert, 'chat_id':chat_telegram_channel, 'message_id':idmessage,
'parse_mode':'HTML'
}
files = {'media':photourl}
requests.post(urlalert, headers=headers, data=data, files=files)https://stackoverflow.com/questions/71242089
复制相似问题