菜单

脚本和工具

相关源文件

此页面记录了 IPTV 存储库中用于播放列表生成、验证、处理和部署的核心脚本和工具。这些脚本构成了存储库的自动化骨干,能够高效管理数千个 IPTV 流。有关使用这些脚本的自动化工作流的信息,请参阅自动化工作流

脚本组织

IPTV 项目依赖一套全面的自动化脚本来管理、验证和处理 IPTV 流。这些脚本在 package.json 文件中定义,并在 scripts/commands/ 目录下组织,并设有特定功能领域的子目录。

来源:package.json4-25

脚本命令

IPTV 存储库的核心功能由 package.json 中定义的各种 npm 脚本提供支持。这些脚本可以通过 npm run 命令执行,并在整体工作流中发挥特定功能。

主要命令类别

类别目的关键脚本
播放列表管理处理播放列表的创建、格式化和验证playlist:formatplaylist:updateplaylist:generateplaylist:validateplaylist:lintplaylist:test
API 操作生成和维护 API 数据api:loadapi:generateapi:deploy
文档更新文档readme:update
报告创建报告report:create
工作流组合多个操作的复合命令checkformatupdatedeploy

来源:package.json4-25

命令执行流程

下图说明了主命令的执行方式及其关系

来源:package.json19-22

核心脚本功能

播放列表脚本

播放列表脚本是 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 存储库

来源:package.json10-16

API 脚本

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 存储库

来源:package.json7-9

文档和报告脚本

这些脚本维护文档并生成报告。

脚本功能实现
readme:update使用当前统计信息更新存储库 READMEtsx scripts/commands/readme/update.ts
report:create创建关于播放列表状态的报告tsx scripts/commands/report/create.ts

来源:package.json17-18

GitHub Actions 集成

脚本与 GitHub Actions 工作流集成,以自动化验证、格式化和部署任务。共有三个主要工作流:

来源:package.json4-6

工具和验证规则

M3U Linter

存储库使用 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提供核心工具
@octokitGitHub API 集成
axios用于 API 请求的 HTTP 客户端
chalk终端字符串样式
lodash实用函数
commander命令行解析

来源:package.json39-73

脚本操作中的数据流

下图说明了数据在存储库的各种脚本中如何流动。

来源:package.json7-22

本地开发使用

为了进行本地开发和测试,存储库提供了操作模拟脚本。

脚本目的
act:check在本地模拟 check 工作流
act:format在本地模拟 format 工作流
act:update在本地模拟 update 工作流

这些命令使用 act 在本地环境中运行 GitHub Actions 工作流,这对于在提交更改之前进行测试很有用。

来源:package.json4-6