【问题标题】:How to send an image from a telegram bot如何从电报机器人发送图像
【发布时间】:2016-11-02 05:07:51
【问题描述】:

我的机器人现在可以工作了,但问题是它只能发送文本。我在 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()

请帮助我。我需要正确的代码。对不起我的英语不好。

【问题讨论】:

  • “更改代码”...什么意思?您将上面的哪些特定行替换为以下内容?他们全部?一些?另外,考虑提供一个 MCVE(根据 stackoverflow.com/help/mcve)——一个 verifiablecomplete 最小复制器。另外,“什么都没发生”是什么意思?股票行为没有变化?根本没有回复?
  • 我的英文不好,我想在用户给我名字的时候给他们发图片 例如发送词狗 机器人发送狗的图片你能帮帮我吗
  • 修复您帖子中的问题,如上所述。指出这些问题以便您纠正它们是如何我试图帮助您。
  • 我想让我的机器人像这个机器人web.telegram.org/#/im?p=@ImageBot
  • 如何更改此代码 elif text == '/image': img = Image.new('RGB', (512, 512)) base = random.randint(0, 16777216) 像素 = [base+i*j for i in range(512) for j in range(512)] # 生成样本图像 img.putdata(pixels) output = StringIO.StringIO() img.save(output, 'JPEG') reply( img=output.getvalue()) 发送这样的图像keenthemes.com/preview/metronic/theme/assets/global/plugins/…

标签: python telegram-bot


【解决方案1】:

我已经包含了两个功能,一个是发送本地图片,一个是发送远程图片。

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)

【讨论】:

    【解决方案2】:

    解决办法是

    elif 'Hi' in text:
    reply(img=urllib2.urlopen('img url').read())
    

    if text == 'help':
                reply(img=urllib2.urlopen('img url').read())
    

    【讨论】:

    • 请添加一些解释。传递底层逻辑比仅仅提供代码更重要,因为它可以帮助 OP 和其他读者自己解决这个问题和类似问题。
    • 从这里获取代码github.com/yukuku/telebot 并像这样回复消息回复(img=urllib2.urlopen('img url').read())
    【解决方案3】:

    在发送照片之前,你必须先output.seek(0)将光标放回文件的开头,否则它会被读取为零

    【讨论】:

      【解决方案4】:

      我明白这个问题。答案如下:

              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...
      

      信用:https://stackoverflow.com/a/17128168/1097372

      在第 10 行之后放入 main.py

      import requests
      from StringIO import StringIO
      

      【讨论】:

        猜你喜欢
        • 2019-06-02
        • 1970-01-01
        • 2019-10-30
        • 2020-08-25
        • 2017-03-19
        • 2017-06-16
        • 1970-01-01
        • 2016-10-18
        • 2020-12-10
        相关资源
        最近更新 更多