你的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.63.10 (支持match语法)部署复杂度较高(需系统库)更低(纯Python)提示v2.x版本移除了对xmllint的依赖完全通过Python的ElementTree解析XML使得镜像体积减少了70%部署更加轻量2. 环境准备与配置2.1 获取必要的API密钥在开始之前你需要准备以下三个关键凭证Telegram Bot Token与BotFather对话创建新bot获取并妥善保存形如123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11的tokenTelegram频道Chat ID将你的bot添加为频道管理员通过https://api.telegram.org/botYOUR_TOKEN/getUpdates获取频道IDTMDB API Key在TMDB官网申请开发者账号获取v3 API密钥2.2 Docker部署配置推荐使用Docker部署以简化环境管理以下是典型的运行命令docker run -d --namewatchdog-emby --restartunless-stopped \ -v /path/to/your/media:/media \ -e BOT_TOKENyour_telegram_token \ -e CHAT_IDyour_channel \ -e TMDB_APIyour_tmdb_key \ -e MEDIA_PATH/media \ -e LOG_PATH/var/log/emby_watchdog.log \ b1gfac3c4t/overwatch关键参数说明MEDIA_PATH必须与容器内挂载路径一致LOG_PATH建议设置为持久化卷位置以便排查问题--restartunless-stopped确保容器异常退出后自动重启3. 核心功能实现解析3.1 文件监控机制系统通过watchdog监控.nfo文件的变化这是Emby完成媒体刮削后生成的元数据文件。当新影片入库时典型的处理流程如下Emby检测到新文件并开始刮削刮削完成后生成电影名 (年份).nfo文件Watchdog检测到.nfo文件创建事件触发解析和推送流程优化后的文件事件处理逻辑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 元数据提取与增强系统从两个来源获取影片信息本地.nfo文件包含Emby刮削到的基本信息使用ElementTree解析XML格式的.nfo文件提取标题、年份、IMDb ID等关键字段TMDB API补充丰富的外部数据通过影片标题和年份或IMDb ID精确匹配获取高清海报、剧情简介、演职员表等对于剧集还能获取季/集信息和单独的海报TMDB API请求示例def fetch_tmdb_info(title, yearNone, imdb_idNone): params { api_key: TMDB_API, language: zh-CN, query: title, year: year } if imdb_id: url fhttps://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, paramsparams) 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: fhttps://image.tmdb.org/t/p/original{movie_data[poster_path]}, caption: caption, parse_mode: Markdown, reply_markup: { inline_keyboard: [[{ text: 立即观看, url: fhttps://your-emby-server.com/items/{movie_data[emby_id]} }]] } }4.2 剧集信息的特殊处理对于电视剧集推送信息需要特别处理以展示季/集结构解析剧集.nfo文件获取TVDB或TMDB ID查询TMDB获取整个剧集的信息对新添加的季/集进行针对性展示为每集生成独立的观看链接剧集消息效果优化使用剧集横幅图替代海报显示本季集数和已添加的集数为整季添加观看按钮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》在实际使用中我发现这套系统不仅替代了传统的群聊所有人方式还显著提升了分享内容的质量和接收体验。频道订阅者可以自主选择查看时间精美的消息卡片也比简单的文字通知更具吸引力。对于团队维护的媒体库这更是一种专业的内容更新通知方案。