Как отправить фото на телеграмм боту

Я просто реализую простого бота, который должен отправлять несколько фотографий и видео на мой chat_id. Ну, я использую питон, это скрипт

import sys
import time
import random
import datetime
import telepot

def handle(msg):
    chat_id = msg['chat']['id']
    command = msg['text']

    print 'Got command: %s' % command

    if command == 'command1':
        bot.sendMessage(chat_id, *******)
    elif command == 'command2':
        bot.sendMessage(chat_id, ******)
    elif command == 'photo':
        bot.sendPhoto(...)

bot = telepot.Bot('*** INSERT TOKEN ***')
bot.message_loop(handle)
print 'I am listening ...'

while 1:
    time.sleep(10)

В строке bot.sendphoto я бы вставил путь и chat_id моего изображения, но ничего не происходит.

Где я не прав?

Благодарность


person rollotommasi    schedule 21.04.2016    source источник
comment
Не могли бы вы опубликовать точный вызов sendPhoto()? И, пожалуйста, исправьте отступ в опубликованном вами коде.   -  person Nick Lee    schedule 22.04.2016
comment
может быть так полезно, если вы расскажете о telegram response к вашему запросу   -  person Seyfi    schedule 19.07.2016


Ответы (7)


Если у вас есть локальный путь к изображению:

bot.send_photo(chat_id, photo=open('path', 'rb'))

Если у вас есть URL-адрес изображения из Интернета:

bot.send_photo(chat_id, 'your URl')
person Majid A    schedule 13.08.2019
comment
Это bot.sendPhoto, а не bot.send_photo - person Biplob Das; 29.01.2021
comment
@BiplobDas python-telegram-bot. readthedocs.io/en/stable/ - person Kelvin Wang; 02.05.2021

Я пробовал также отправлять из python с помощью запросов. Может быть, это поздний ответ, но оставив это здесь для других, таких как я ... может быть, это пригодится ... Я добился успеха с subprocess вот так:

def send_image(botToken, imageFile, chat_id):
        command = 'curl -s -X POST https://api.telegram.org/bot' + botToken + '/sendPhoto -F chat_id=' + chat_id + " -F photo=@" + imageFile
        subprocess.call(command.split(' '))
        return
person Cipri    schedule 07.01.2018

Я использовал следующую команду при использовании python-telegram-bot для отправки изображение вместе с подписью:

 context.bot.sendPhoto(chat_id=chat_id, photo=
"url_of_image", caption="This is the test photo caption")
person Manchana    schedule 26.04.2020

Просто используя библиотеку Requests, вы можете сделать это:

def send_photo(chat_id, file_opened):
    method = "sendPhoto"
    params = {'chat_id': chat_id}
    files = {'photo': file_opened}
    resp = requests.post(api_url + method, params, files=files)
    return resp

send_photo(chat_id, open(file_path, 'rb'))
person jarh1992    schedule 07.03.2021

Вам нужно передать 2 параметра

bot.sendPhoto(chat_id, 'URL')
person RuralGalaxy    schedule 14.01.2017

Это полный код для отправки фото в телеграмме:

import telepot
bot = telepot.Bot('______ YOUR TOKEN ________')

# here replace chat_id and test.jpg with real things
bot.sendPhoto(chat_id, photo=open('test.jpg', 'rb'))
person Biplob Das    schedule 29.01.2021

sendPhoto требует как минимум двух параметров; первый - target chat_id, а второй - photo у вас есть три варианта:

  1. Передайте file_id, если фотография уже загружена на серверы Telegram (рекомендуется, потому что вы не нужно перезагрузить его).
  2. Если фотография загружена в другое место, передайте полный URL-адрес http, и телеграмма загрузит ее (максимальный размер фотографии составляет 5 МБ атм).
  3. Опубликуйте файл, используя multipart / form-data, как если бы вы хотите загрузить его через браузер (максимальный размер фотографии в этом случае - 10 МБ).
person Arash Moosapour    schedule 23.05.2017