使用本地文件编辑 Telegram 频道中消息的图像
Using a local file to edit image of a message in the Telegram channel
我使用的方法是基于我在频道中创建新图像出版物所使用的模型,并进行了当前修改:
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"
}
根据这个回答(),需要对字符串进行序列化,嗯,我试过这样做:
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
我应该怎么做才能解决这个问题?
从数据中删除 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)
经过多次尝试,我想出了如何继续序列化字符串然后编辑:
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)
您应该使用 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())
我使用的方法是基于我在频道中创建新图像出版物所使用的模型,并进行了当前修改:
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"
}
根据这个回答(
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
我应该怎么做才能解决这个问题?
从数据中删除 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)
经过多次尝试,我想出了如何继续序列化字符串然后编辑:
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)
您应该使用 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())