如何从电报机器人发送图像
How to send an image from a telegram bot
我的机器人现在可以工作了,但问题是它只能发送文本。我在 Bot API 中看到有发送照片、视频的功能...但我无法使用它。有人实现了吗?我正在使用来自 yukuku/telebot
的 python 源代码
elif text == '/image':
img = Image.new('RGB', (512, 512))
base = random.randint(0, 16777216)
pixels = [base+i*j for i in range(512) for j in range(512)] # generate sample image
img.putdata(pixels)
output = StringIO.StringIO()
img.save(output, 'JPEG')
reply(img=output.getvalue())
当我更改代码时,没有任何反应。
img = Image.open('image.png')
img.show()
请帮帮我。我需要正确的代码。抱歉我的英语不好。
我明白你的问题了。答案如下:
def sendImageFromUrl(url):
#this tweak added if request image failed
headers = {'user-agent': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7'}
response = requests.get(url, headers=headers)
#response = requests.get(url)
output = StringIO(response.content)
img = Image.open(output)
img.save(output, 'JPEG')
resp = multipart.post_multipart(BASE_URL + 'sendPhoto', [
('chat_id', str(chat_id)),
('caption', 'Your Caption'),
], [
('photo', 'image.jpg', output.getvalue()),
])
确保您的服务器确实有 python 模块:请求。
您可以在这里下载:https://pypi.python.org/pypi/requests#downloads
然后像这样输入你的申请
/myapp/app.yaml
/myapp/main.py
/myapp/requests/packages/
/myapp/requests/__init__.py
/myapp/requests/adapters.py
etc...
来源:
在第 10 行后 main.py
import requests
from StringIO import StringIO
解决方法是
elif 'Hi' in text:
reply(img=urllib2.urlopen('img url').read())
或
if text == 'help':
reply(img=urllib2.urlopen('img url').read())
我添加了两个功能,一个适合发送本地图片,另一个适合发送远程图片。
def sendImage():
url = "https://api.telegram.org/bot<Token>/sendPhoto";
files = {'photo': open('/path/to/img.jpg', 'rb')}
data = {'chat_id' : "YOUR_CHAT_ID"}
r= requests.post(url, files=files, data=data)
print(r.status_code, r.reason, r.content)
def sendImageRemoteFile(img_url):
url = "https://api.telegram.org/bot<Token>/sendPhoto";
remote_image = requests.get(img_url)
photo = io.BytesIO(remote_image.content)
photo.name = 'img.png'
files = {'photo': photo}
data = {'chat_id' : "YOUR_CHAT_ID"}
r= requests.post(url, files=files, data=data)
print(r.status_code, r.reason, r.content)
在发送照片之前,您必须output.seek(0)
将光标放回文件的开头,否则它将被读取为零
我的机器人现在可以工作了,但问题是它只能发送文本。我在 Bot API 中看到有发送照片、视频的功能...但我无法使用它。有人实现了吗?我正在使用来自 yukuku/telebot
的 python 源代码 elif text == '/image':
img = Image.new('RGB', (512, 512))
base = random.randint(0, 16777216)
pixels = [base+i*j for i in range(512) for j in range(512)] # generate sample image
img.putdata(pixels)
output = StringIO.StringIO()
img.save(output, 'JPEG')
reply(img=output.getvalue())
当我更改代码时,没有任何反应。
img = Image.open('image.png')
img.show()
请帮帮我。我需要正确的代码。抱歉我的英语不好。
我明白你的问题了。答案如下:
def sendImageFromUrl(url):
#this tweak added if request image failed
headers = {'user-agent': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7'}
response = requests.get(url, headers=headers)
#response = requests.get(url)
output = StringIO(response.content)
img = Image.open(output)
img.save(output, 'JPEG')
resp = multipart.post_multipart(BASE_URL + 'sendPhoto', [
('chat_id', str(chat_id)),
('caption', 'Your Caption'),
], [
('photo', 'image.jpg', output.getvalue()),
])
确保您的服务器确实有 python 模块:请求。
您可以在这里下载:https://pypi.python.org/pypi/requests#downloads
然后像这样输入你的申请
/myapp/app.yaml
/myapp/main.py
/myapp/requests/packages/
/myapp/requests/__init__.py
/myapp/requests/adapters.py
etc...
来源:
在第 10 行后 main.py
import requests
from StringIO import StringIO
解决方法是
elif 'Hi' in text:
reply(img=urllib2.urlopen('img url').read())
或
if text == 'help':
reply(img=urllib2.urlopen('img url').read())
我添加了两个功能,一个适合发送本地图片,另一个适合发送远程图片。
def sendImage():
url = "https://api.telegram.org/bot<Token>/sendPhoto";
files = {'photo': open('/path/to/img.jpg', 'rb')}
data = {'chat_id' : "YOUR_CHAT_ID"}
r= requests.post(url, files=files, data=data)
print(r.status_code, r.reason, r.content)
def sendImageRemoteFile(img_url):
url = "https://api.telegram.org/bot<Token>/sendPhoto";
remote_image = requests.get(img_url)
photo = io.BytesIO(remote_image.content)
photo.name = 'img.png'
files = {'photo': photo}
data = {'chat_id' : "YOUR_CHAT_ID"}
r= requests.post(url, files=files, data=data)
print(r.status_code, r.reason, r.content)
在发送照片之前,您必须output.seek(0)
将光标放回文件的开头,否则它将被读取为零