Skip to content

Latest commit

 

History

History
312 lines (242 loc) · 9.08 KB

advanced-guide.md

File metadata and controls

312 lines (242 loc) · 9.08 KB

📘 详细使用指南

目录

文件命名规范

智能文件名处理

系统支持两种文件命名方式,并根据不同情况智能处理:

1. 带序号的命名方式(推荐)

  • 格式1:数字 + 标题.扩展名(例如:01-第一章.mp3
  • 格式2:标题 + 数字.扩展名(例如:第一集01.mp3
  • 系统优先使用文件名开头的数字作为剧集编号

2. 不带序号的命名方式

  • 直接使用描述性文件名(例如:简介.mp3
  • 系统会根据文件的创建时间和大小自动生成唯一的排序值
  • 保留完整的文件名作为标题(不含扩展名)

标题显示策略

可以通过全局环境变量或每个播客的配置文件来控制标题显示方式:

  • 完整模式(默认):保留原始文件名(不含扩展名)

    01-简介.mp3    → "01-简介"
    第01期.mp3     → "第01期"
    简介01.mp3     → "简介01"
  • 清理模式:移除数字和分隔符(仅对带序号的文件有效)

    01-简介.mp3    → "简介"
    第01期.mp3     → "第期"
    简介01.mp3     → "简介"

配置详解

podcast.json 完整配置项

{
  "title": "播客标题",
  "description": "播客描述",
  "author": "作者名称",
  "email": "[email protected]",
  "language": "zh-cn",
  "category": "Technology",
  "explicit": false,
  "websiteUrl": "https://example.com",
  "titleFormat": "clean",
  "useMTime": false
}

配置项说明

  • title:播客的标题
  • description:播客的描述
  • author:作者名称
  • email:联系邮箱
  • language:语言代码,遵循 RFC 5646 标准
  • category:播客分类
  • explicit:是否包含限制级内容
  • websiteUrl:相关网站地址
  • titleFormat:标题格式化方式,支持 clean(清理后的标题)和 full(完整文件名)
  • useMTime:时间管理策略,支持两种策略:
    • false:默认策略,带序号的文件使用基准日期加上序号生成发布时间,不带序号的文件使用文件的实际创建时间作为发布时间
    • true:始终使用文件的创建时间作为发布时间,适用于所有文件(无论是否有序号)

高级特性

剧集序号提取策略

系统支持多种从文件名中提取剧集序号的策略:

默认策略

  1. 前缀匹配(优先使用)

    • 从文件名开头查找数字
    • 示例:001-科技早知道.mp3 → 序号: 1
    • 示例:123_人工智能简史.mp3 → 序号: 123
  2. 后缀匹配(次优先级)

    • 从文件扩展名前查找数字
    • 示例:科技早知道_001.mp3 → 序号: 1
    • 示例:人工智能简史-123.mp3 → 序号: 123

可配置策略

在 podcast.json 中可以配置以下策略:

  1. 首个数字

    {
      "episodeNumberStrategy": "first"
    }
    • 从左到右扫描,使用第一个数字
    • 示例:zk01科技新闻08期.mp3 → 序号: 1
  2. 最后数字

    {
      "episodeNumberStrategy": "last"
    }
    • 从右到左扫描,使用最后一个数字
    • 示例:zk01科技新闻08期.mp3 → 序号: 8
  3. 自定义正则表达式

    {
      "episodeNumberStrategy": {
        "pattern": "第(\\d+)期"
      }
    }
    • 使用自定义正则表达式精确匹配
    • 示例:科技新闻第01期.mp3 → 序号: 1

📝 注意:

  • 不配置时默认使用前缀匹配策略
  • 自定义正则表达式必须包含一个捕获组 ()
  • 如果提取失败会自动回退到默认策略

剧集时间管理

系统提供两种时间管理策略,可以通过 podcast.json 中的 useMTime 配置项来控制:

  1. 默认策略useMTime: false):

    • 带序号的文件
      • 使用基准日期(2024-12-18)加上序号生成发布时间
      • 序号越小,发布时间越早
      • 例如:01-简介.mp3 的发布时间会早于 02-正文.mp3
    • 不带序号的文件
      • 使用文件的实际创建时间作为发布时间
      • 使用文件创建时间和大小生成唯一的排序值
      • 保持文件的自然时间顺序
  2. 文件时间策略useMTime: true):

    • 始终使用文件的创建时间作为发布时间
    • 适用于所有文件(无论是否有序号)
    • 完全基于文件系统的时间戳
    • 配置示例:
      {
        "title": "我的播客",
        "description": "播客描述",
        "useMTime": true
      }

📝 提示:

  • 如果您希望完全依赖文件的创建时间来确定发布顺序,请设置 useMTime: true
  • 如果您希望通过文件名序号来控制发布顺序,请使用默认设置或设置 useMTime: false
  • 此配置可以针对每个播客单独设置,不同播客可以使用不同的策略

URL访问规范

系统提供标准的URL访问方式:

http://[服务器地址]/audio/[播客目录名]/[音频文件名]

RSS Feed 访问地址:

http://[服务器地址]/feeds/[播客目录名].xml

📝 注意:

  • 播客目录名就是您的音频文件夹名称
  • 确保文件夹名称不包含特殊字符
  • URL中的所有中文和特殊字符会被自动编码

部署方式

NPM 部署

  1. 环境要求

    • Node.js 14.0 或更高版本
    • NPM 6.0 或更高版本
    • 准备音频文件目录
  2. 安装配置

    # 克隆项目
    git clone https://github.com/your-repo/folder2podcast.git
    cd folder2podcast
    
    # 安装依赖
    npm install
    
    # 配置环境变量(可选)
    export AUDIO_DIR=/path/to/audiobooks
    export PORT=3000
  3. 启动服务

    # 开发模式
    npm run start:dev
    
    # 或指定配置启动
    AUDIO_DIR=/path/to/audiobooks PORT=3000 npm run start:dev
  4. 验证服务

    • 访问管理面板:http://localhost:3000/podcasts
    • 确认音频文件可访问
    • 测试播客订阅功能

API使用说明

1. 播客列表接口

  • 访问 /podcasts 获取所有可用播客列表
  • 返回每个播客的详细信息,包括标题、描述、订阅地址等
  • 支持中文路径和英文别名双重访问
  • Feed URL包含完整的访问地址,可直接用于播客订阅

2. 资源访问

  • 播客封面:/audio/播客名称/cover.jpg
  • 音频文件:/audio/播客名称/episode.mp3
  • 默认资源:/image/default-cover.jpg

最佳实践

1. 目录组织

  • 每个播客系列独立文件夹
  • 使用数字前缀确保正确排序
  • 添加清晰的文件描述
  • 配置合适的播客信息

2. 性能优化

  • 控制单个文件夹的文件数量
  • 使用英文别名提高兼容性
  • 添加合适大小的封面图片(推荐使用正方形图片)

3. 安全性

  • 使用只读挂载保护音频文件
  • 避免在文件名中使用特殊字符
  • 定期备份配置文件

静态资源路径更新

在最新版本中,我们对静态资源的路径进行了调整,以提高资源管理的灵活性和可维护性。以下是主要的更改:

1. 静态资源目录

  • 所有静态资源(如 CSS、JavaScript 和图片)现在位于 assets 目录下。
  • 访问静态资源的路径已更改为:
    • CSS 文件: /web/styles.css
    • JavaScript 文件: /web/app.js
    • 封面图片: /audio/{podcast_dir}/cover.jpg

2. API 路由

  • API 路由生成的 URL 现在指向新的静态资源路径。例如,获取播客封面图片的 URL 现在为:
    /audio/{podcast_dir}/cover.jpg
    

3. Docker 配置

  • Dockerfile 已更新,以确保静态资源和源代码正确复制到容器中。请确保在构建 Docker 镜像时使用最新的 Dockerfile。

4. 测试和验证

  • 在进行任何部署之前,请确保在本地和 Docker 容器中进行全面的测试,验证所有功能是否正常工作。

其他注意事项

  • 请确保在使用新的路径时,更新所有相关的代码和配置文件。

静态资源目录结构

assets/
├── web/          # Web 界面相关文件
│   ├── index.html
│   ├── styles.css
│   └── app.js
├── image/        # 图片资源
│   └── default-cover.jpg

零侵入设计

Folder2Podcast RSS 采用了零侵入设计模式,这意味着:

数据安全性

  • 🔒 只读访问 - 应用只需要音频文件夹的读取权限
  • 📁 原始文件保护 - 不会修改任何原始音频文件或文件夹结构
  • 🔄 状态隔离 - 所有生成的文件(如 feed.xml)存储在独立的 .feeds 目录

技术实现

  • 🛡️ 权限隔离 - 使用独立的存储空间管理应用状态
  • 📊 缓存优化 - feed 文件生成和缓存策略的优化
  • 🔍 智能监控 - 文件系统变化的高效监测

最佳实践

  • 使用只读模式挂载音频文件夹
  • 定期清理 .feeds 目录下的缓存文件
  • 监控系统资源使用情况