此页面记录了 IPTV 存储库中用于播放列表生成、验证、处理和部署的核心脚本和工具。这些脚本构成了存储库的自动化骨干,能够高效管理数千个 IPTV 流。有关使用这些脚本的自动化工作流的信息,请参阅自动化工作流。
IPTV 项目依赖一套全面的自动化脚本来管理、验证和处理 IPTV 流。这些脚本在 package.json 文件中定义,并在 scripts/commands/ 目录下组织,并设有特定功能领域的子目录。
IPTV 存储库的核心功能由 package.json 中定义的各种 npm 脚本提供支持。这些脚本可以通过 npm run 命令执行,并在整体工作流中发挥特定功能。
| 类别 | 目的 | 关键脚本 |
|---|---|---|
| 播放列表管理 | 处理播放列表的创建、格式化和验证 | playlist:format、playlist:update、playlist:generate、playlist:validate、playlist:lint、playlist:test |
| API 操作 | 生成和维护 API 数据 | api:load、api:generate、api:deploy |
| 文档 | 更新文档 | readme:update |
| 报告 | 创建报告 | report:create |
| 工作流 | 组合多个操作的复合命令 | check、format、update、deploy |
下图说明了主命令的执行方式及其关系
播放列表脚本是 IPTV 存储库功能的核心,负责 M3U 播放列表的验证、格式化、生成和部署。
| 脚本 | 功能 | 实现 |
|---|---|---|
playlist:format | 标准化和格式化播放列表文件 | tsx scripts/commands/playlist/format.ts |
playlist:update | 使用新数据更新现有播放列表 | tsx scripts/commands/playlist/update.ts |
playlist:generate | 从源流生成播放列表 | tsx scripts/commands/playlist/generate.ts |
playlist:validate | 验证流的完整性和格式 | tsx scripts/commands/playlist/validate.ts |
playlist:lint | 检查 M3U 文件是否存在语法问题 | npx m3u-linter -c m3u-linter.json |
playlist:test | 测试播放列表的功能 | tsx scripts/commands/playlist/test.ts |
playlist:deploy | 将处理后的播放列表部署到 GitHub Pages | 部署到 GitHub Pages 存储库 |
API 脚本处理从播放列表中提取的 API 数据的生成和部署。
| 脚本 | 功能 | 实现 |
|---|---|---|
api:load | 加载 API 生成所需的必要数据 | tsx scripts/commands/api/load.ts |
api:generate | 从播放列表中生成 API JSON 数据 | tsx scripts/commands/api/generate.ts |
api:deploy | 将 API 数据部署到 iptv-org/api 存储库 | 部署到 API 存储库 |
这些脚本维护文档并生成报告。
| 脚本 | 功能 | 实现 |
|---|---|---|
readme:update | 使用当前统计信息更新存储库 README | tsx scripts/commands/readme/update.ts |
report:create | 创建关于播放列表状态的报告 | tsx scripts/commands/report/create.ts |
脚本与 GitHub Actions 工作流集成,以自动化验证、格式化和部署任务。共有三个主要工作流:
存储库使用 m3u-linter 根据 m3u-linter.json 中定义的特定规则来验证 M3U 文件。
| 规则 | 目的 | 已启用 |
|---|---|---|
no-empty-lines | 防止 M3U 文件中出现空行 | 是 |
require-header | 确保 M3U 文件具有正确的标头 | 是 |
attribute-quotes | 检查属性引用是否正确 | 是 |
require-info | 确保提供了流信息 | 是 |
require-title | 使 title 属性成为必需项 | 是 |
no-trailing-spaces | 检查尾随空格 | 否 |
no-whitespace-before-title | 防止在标题前出现空格 | 是 |
no-multi-spaces | 防止出现多个连续空格 | 是 |
no-extra-comma | 检查不必要的逗号 | 是 |
space-before-paren | 确保括号前有正确的空格 | 是 |
no-dash | 在某些上下文中阻止使用破折号 | 是 |
require-link | 使流链接成为必需项 | 是 |
来源:m3u-linter.json3-16 package.json14
IPTV 脚本在 Node.js 环境中执行,并通过 tsx 运行时使用 TypeScript。许多命令从环境变量加载配置,支持用于本地开发的 .env 文件。
该存储库依赖多个外部依赖项来实现其功能:
| 依赖项 | 目的 |
|---|---|
iptv-playlist-parser | 解析 M3U 播放列表文件 |
iptv-checker | 检查流的可访问性和元数据 |
m3u-linter | 检查 M3U 文件是否格式正确 |
@freearhey/core | 提供核心工具 |
@octokit 包 | GitHub API 集成 |
axios | 用于 API 请求的 HTTP 客户端 |
chalk | 终端字符串样式 |
lodash | 实用函数 |
commander | 命令行解析 |
下图说明了数据在存储库的各种脚本中如何流动。
为了进行本地开发和测试,存储库提供了操作模拟脚本。
| 脚本 | 目的 |
|---|---|
act:check | 在本地模拟 check 工作流 |
act:format | 在本地模拟 format 工作流 |
act:update | 在本地模拟 update 工作流 |
这些命令使用 act 在本地环境中运行 GitHub Actions 工作流,这对于在提交更改之前进行测试很有用。