Telegram 聊天机器人中获取照片

发布时间:2024年01月23日

创建图片爬虫时,只从那些允许爬取的网站或平台获取图片。控制爬虫的请求频率,避免给目标网站服务器造成过大压力。使用延时和重试机制,以应对服务器响应限制或故障。合理安排数据存储,确保图片文件的组织和索引方式便于管理和检索。设计爬虫时考虑到网站结构的变化,使其能够适应这些变化。所以说想要做好爬虫并不是太简单,但是只要了解了其规则,爬虫也是很方便。

在这里插入图片描述

问题背景

为了开发一个可以从用户中检索照片并对媒体文件执行多种操作的简单机器人,开发者使用 pyTelegramBotAPI 进行设计。
在查看 Wiki 时发现,可以使用特殊处理程序按内容类型划分接收到的消息。

根据 Wiki,开发者用 @bot.message_handler(content_types= ["photo"]) 方法来验证用户。
然而,在运行该方法时,开发者遇到了一个错误:“No JSON object could be decoded”。
开发者不确定是自己的代码错误还是 API 问题,因此寻求帮助。

解决方案

答案 1:下载照片

第一位回复者提供了一个下载照片的代码示例。
该方法使用 bot.download_file() 函数,该函数需要文件的 file_id 来下载文件。
此方法会将照片下载到脚本所在的目录,并将其命名为 “image.jpg”。

答案 2:获取照片 URL

第二位回复者提供了一个更全面的解决方案。
该方法使用 processPhotoMessage() 函数来处理照片消息。这个函数首先获取照片的 file_id,然后使用 bot.get_file() 函数来获取文件信息。
此方法会将文件信息存储在 file 变量中,以便以后使用。

然后,该方法使用另一个函数 photo() 来处理照片消息。这个函数调用 processPhotoMessage() 函数来获取文件信息,然后使用 file.file_path 来获取文件的相對路徑。
相对路径可以通过在 Telegram API 中使用 https://api.telegram.org/file/bot<token>/<file_path> 模板来获得完整照片 URL。

代码示例

以下是在 Python 中用 pyTelegramBotAPI 获取照片的完整代码示例:

import telebot
import flask
import decorator
from subprocess import Popen, PIPE

# Telegram bot token
TELEBOT_TOKEN = '<token>'

# Flask app
app = flask.Flask(__name__)

# Telebot
bot = telebot.TeleBot(TELEBOT_TOKEN)

# Decorator for error logging
@decorator.decorator
def errLog(func, *args, **kwargs):
    result = None
    try:
        result = func(*args, **kwargs)
    except Exception as e:
        print(e.__repr__())
    return result


# Handle text messages
@bot.message_handler(content_types=['text'])
def echo(message):
    bot.send_message(message.chat.id, message.text)


# Handle photo messages
@errLog
def processPhotoMessage(message):
    print('message.photo =', message.photo)
    fileID = message.photo[-1].file_id
    print('fileID =', fileID)
    file = bot.get_file(fileID)
    print('file.file_path =', file.file_path)


@bot.message_handler(content_types=['photo'])
def photo(message):
    processPhotoMessage(message)


# Main function
def main():
    global data
    bot.remove_webhook()
    bot.set_webhook(url=WEBHOOK_URL_BASE + WEBHOOK_URL_PATH,
                    certificate=open(WEBHOOK_SSL_CERT, 'r'))
    
    # Run Flask app
    app.run(host=WEBHOOK_LISTEN,
            port=8443,
            ssl_context=(WEBHOOK_SSL_CERT, WEBHOOK_SSL_PRIV),
            debug=False)


if __name__ == '__main__':
    main()

这个更全面的解决方案可以帮助开发者从用户的 Telegram 聊天机器人中正确获取照片。

如果要获取照片的完整 URL,可以使用 Telegram API 中提供的模板。

因为现在得图片版权很多,因此不要爬取受版权保护的图片,除非有明确的授权。遵守相关的版权法和知识产权规定。上面就是今天得全部内容,如果有不懂得,可以评论区留言讨论。

文章来源:https://blog.csdn.net/weixin_44617651/article/details/135764246
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。