当前位置: 首页 > news >正文

你的Emby媒体库还缺个‘播报员’?手把手教你用Telegram Bot推送新电影/剧集信息

打造私人影院资讯频道:用Telegram Bot自动推送Emby媒体库更新

每次打开Emby发现新入库的电影时,你是否想过能第一时间把这些精彩内容分享给朋友?传统的群聊@所有人方式不仅打扰,还缺乏影片的详细信息。今天,我将带你用Python和Telegram Bot打造一个优雅的"私人影院资讯频道",让影音分享变得专业又有趣。

1. 系统架构与核心组件

这套自动化推送系统的核心在于实时监控Emby媒体库变化,并通过Telegram Bot将更新内容以精美的卡片形式推送到指定频道。整个流程涉及以下几个关键技术组件:

  • Watchdog模块:Python的watchdog库能够实时监控文件系统变化,当Emby刮削生成新的.nfo文件时立即触发后续处理
  • TMDB API:通过The Movie Database的开放接口获取影片的元数据、海报和剧集详情
  • Telegram Bot API:将整理好的影片信息通过Bot推送到Telegram频道

环境要求对比

组件v1.x版本v2.x优化版本
基础镜像Ubuntu (231MB)Python Alpine (69.5MB)
主要依赖xmllint + Python模块纯Python实现
Python版本3.6+3.10+ (支持match语法)
部署复杂度较高(需系统库)更低(纯Python)

提示:v2.x版本移除了对xmllint的依赖,完全通过Python的ElementTree解析XML,使得镜像体积减少了70%,部署更加轻量

2. 环境准备与配置

2.1 获取必要的API密钥

在开始之前,你需要准备以下三个关键凭证:

  1. Telegram Bot Token

    • 与@BotFather对话创建新bot
    • 获取并妥善保存形如123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11的token
  2. Telegram频道Chat ID

    • 将你的bot添加为频道管理员
    • 通过https://api.telegram.org/bot<YOUR_TOKEN>/getUpdates获取频道ID
  3. TMDB API Key

    • 在TMDB官网申请开发者账号
    • 获取v3 API密钥

2.2 Docker部署配置

推荐使用Docker部署以简化环境管理,以下是典型的运行命令:

docker run -d --name=watchdog-emby --restart=unless-stopped \ -v "/path/to/your/media:/media" \ -e BOT_TOKEN="your_telegram_token" \ -e CHAT_ID="@your_channel" \ -e TMDB_API="your_tmdb_key" \ -e MEDIA_PATH="/media" \ -e LOG_PATH="/var/log/emby_watchdog.log" \ b1gfac3c4t/overwatch

关键参数说明

  • MEDIA_PATH:必须与容器内挂载路径一致
  • LOG_PATH:建议设置为持久化卷位置以便排查问题
  • --restart=unless-stopped:确保容器异常退出后自动重启

3. 核心功能实现解析

3.1 文件监控机制

系统通过watchdog监控.nfo文件的变化,这是Emby完成媒体刮削后生成的元数据文件。当新影片入库时,典型的处理流程如下:

  1. Emby检测到新文件并开始刮削
  2. 刮削完成后生成电影名 (年份).nfo文件
  3. Watchdog检测到.nfo文件创建事件
  4. 触发解析和推送流程

优化后的文件事件处理逻辑

from watchdog.events import FileSystemEventHandler class EmbyHandler(FileSystemEventHandler): def on_created(self, event): if event.is_directory or not event.src_path.endswith('.nfo'): return try: metadata = parse_nfo(event.src_path) tmdb_data = fetch_tmdb_info(metadata) send_telegram_message(tmdb_data) except Exception as e: log_error(f"处理失败: {str(e)}")

3.2 元数据提取与增强

系统从两个来源获取影片信息:

  1. 本地.nfo文件:包含Emby刮削到的基本信息

    • 使用ElementTree解析XML格式的.nfo文件
    • 提取标题、年份、IMDb ID等关键字段
  2. TMDB API:补充丰富的外部数据

    • 通过影片标题和年份或IMDb ID精确匹配
    • 获取高清海报、剧情简介、演职员表等
    • 对于剧集,还能获取季/集信息和单独的海报

TMDB API请求示例

def fetch_tmdb_info(title, year=None, imdb_id=None): params = { 'api_key': TMDB_API, 'language': 'zh-CN', 'query': title, 'year': year } if imdb_id: url = f"https://api.themoviedb.org/3/find/{imdb_id}" params['external_source'] = 'imdb_id' else: url = "https://api.themoviedb.org/3/search/movie" response = requests.get(url, params=params) return response.json().get('results', [])[0]

4. 消息卡片设计与推送优化

4.1 Telegram富媒体消息

通过Telegram Bot API可以发送包含图文、按钮的丰富消息格式。针对影视内容,我们优化了以下展示元素:

  • 海报图片:使用TMDB提供的高清海报
  • 信息排版:合理组织片名、评分、时长等元数据
  • 剧情简介:自动截取适当长度避免消息过长
  • 动作按钮:添加"立即观看"链接直接跳转Emby

消息组装代码片段

def build_telegram_message(movie_data): caption = f"🎬 *{movie_data['title']}* ({movie_data['year']})\n\n" caption += f"⭐ 评分: {movie_data['vote_average']}/10 | ⏳ 时长: {movie_data['runtime']}分钟\n\n" caption += f"{movie_data['overview'][:200]}..." if movie_data['overview'] else "" return { 'chat_id': CHAT_ID, 'photo': f"https://image.tmdb.org/t/p/original{movie_data['poster_path']}", 'caption': caption, 'parse_mode': 'Markdown', 'reply_markup': { 'inline_keyboard': [[{ 'text': '立即观看', 'url': f"https://your-emby-server.com/items/{movie_data['emby_id']}" }]] } }

4.2 剧集信息的特殊处理

对于电视剧集,推送信息需要特别处理以展示季/集结构:

  1. 解析剧集.nfo文件获取TVDB或TMDB ID
  2. 查询TMDB获取整个剧集的信息
  3. 对新添加的季/集进行针对性展示
  4. 为每集生成独立的观看链接

剧集消息效果优化

  • 使用剧集横幅图替代海报
  • 显示本季集数和已添加的集数
  • 为整季添加观看按钮

5. 高级功能与个性化定制

5.1 用户偏好过滤

通过在频道中设置特定的hashtag或命令,用户可以订阅自己感兴趣的影片类型:

# 在消息处理中添加类型过滤 if '#only_movies' in user_request: send_only_movies() elif '#action' in user_request: send_by_genre('动作')

5.2 自动化评分提醒

集成IMDb或豆瓣评分,当影片评分达到设定阈值时自动推送提醒:

if movie_data['vote_average'] >= 8.0: send_highlight_message(f"🔥 高分新片!{movie_data['title']} 获得{movie_data['vote_average']}分")

5.3 定期摘要报告

除了实时推送,还可以设置每周摘要,统计新增内容:

📊 本周媒体库更新报告 • 新增电影: 8部 • 新增剧集: 3部(共12集) • 最高评分: 《奥本海默》(8.5) • 最多观看: 《流浪地球2》

在实际使用中,我发现这套系统不仅替代了传统的群聊@所有人方式,还显著提升了分享内容的质量和接收体验。频道订阅者可以自主选择查看时间,精美的消息卡片也比简单的文字通知更具吸引力。对于团队维护的媒体库,这更是一种专业的内容更新通知方案。

http://www.jsqmd.com/news/513323/

相关文章:

  • 从谐波减速器到伺服电机:拆解一台工业机器人的核心成本密码
  • Qwen3-32B-Chat百度新知冷启动:小众领域知识注入+问答对自动生成策略
  • Ubuntu+Docker+PicHome:三步搞定家庭照片库,还能远程分享给爸妈
  • C语言函数指针在嵌入式系统中的六大工程实践
  • OpenClaw浏览器自动化:GLM-4.7-Flash驱动竞品数据抓取与分析
  • 基于FPGA的永磁同步电机双闭环控制系统的设计,在FPGA实现了永磁同步电机的矢量控制, 坐标...
  • DeepSeek-R1-Distill-Llama-8B实战教程:从部署到推理全流程演示
  • EtherCAT从入门到精通:如何用倍福ET1100芯片搭建你的第一个实时控制网络
  • 次元画室商业落地思考:AIGC内容创作的版权与伦理
  • Graylog新手必看:5分钟搞定交换机日志收集(附华为/思科配置命令)
  • 基于STM32的物联网智能浇花系统设计与实现
  • 2026年宁夏弱电安防行业优质服务商推荐:弱电工程、弱电安防、安防设备、网络设备、监控设备、弱电智能化、安防弱电、宁夏星源智能科技,弱电智能化服务新选择 - 海棠依旧大
  • Qwen-Ranker Pro扩展开发:自定义插件机制详解
  • 基于西门子S7系列PLC与施耐德PLC的环境控制系统定制方案与清单
  • 生成式AI实战:用Stable Diffusion和GPT-4打造你的第一个多模态应用(附代码)
  • HexView高级技巧:利用INI文件批量生成刷写验证结构(含C头文件示例)
  • Mac上如何用Ollama一键部署DeepSeek-R1模型?附7B/14B版本实测对比
  • 测试一下 lokuma.app 生成网站的效果
  • Qwen2.5-0.5B-Instruct实战应用:搭建个人智能问答助手全记录
  • Qwen3.5-9B镜像免配置:一键拉取即运行的9B多模态服务
  • Pixel Dimension Fissioner多场景落地:跨境电商多语言文案裂变方案
  • 三相Vienna整流器过零点电流畸变的智能识别与补偿策略
  • 2026藻油DHA品牌推荐:科学选择守护宝宝脑眼发育 - 品牌排行榜
  • M2LOrder模型API设计规范:RESTful与GraphQL接口对比与实践
  • SAP FAGLL03 报表增强:通过BADI与结构追加实现自定义字段的灵活展示
  • 保姆级教程:基于vLLM快速启动Qwen3-Reranker-0.6B服务
  • 2026年兰炭产品精选推荐:甘肃明兰鸿茂能源10水分/0-5mm/双9指标/烘干兰炭全系供应 - 品牌推荐官
  • 3D Face HRN模型的多角度重建:如何利用多张照片提升精度
  • 使用Fish Speech 1.5实现C++程序的语音交互功能
  • 基于Lychee-Rerank的论文检索系统实战:LaTeX写作好帮手