Skip to content

syscc/OpenlistSync

 
 

Repository files navigation

logo

OpenlistSync是一个适用于OpenList的自动化同步工具 Sync for OpenList


本程序修改自开源项目 TaoSync V0.3.2

在原有的项目基础上主要改动,新增通过 MoviePilot 入库通知自动同步下载的影视文件到 OpenList;并刷新,利用 OpenListStrm 驱动自动更新 Strm 文件自动入库。

如果好用,请 Star!非常感谢! GitHub DockerHub

Webhook 与自动同步使用方法点击展开截图

由于更新频繁,截图仅供参考,以实际为准

MoviePilot需要用到的插件

  1. 聚合消息通知 用来发消息给 OpenlistSync
  2. 外部消息转发 用来通知 OpenlistSync 的消息至 MoviePilot 可选
  3. 关于 Openlist 的驱动配置我建议吧所有网盘用别名聚合到一起,只要支持302的网盘均可以,然后 Strm 驱动配置到别名路径即可,保存Strm本地路径 记得开启选择本地媒体strm路径内

聚合消息通知设置

聚合消息通知设置

  1. 当前使用通知渠道选 HTTP请求
  2. HTTP请求 请求方法 POST 请求URL http://ip:8023/webhook
  3. 请求头
{
  "Content-Type": "application/json"
}
  1. 请求参数
{
  "title": "${title}",
  "text": "${text}",
  "apikey": "如果配置了WEBHOOK_APIKEY则需要此字段"
}
  1. 消息类型 选择 整理入库

外部消息转发设置

外部消息转发设置

  1. 启用插件
  2. 开启通知
  3. 消息类型 其他

OpenlistSync通知配置

通知配置

  1. 方式选 自定义
  2. 请求地址 http://moviepilot_ip:port/api/v1/plugin/MsgNotify/send_json?apikey=api_token
  3. 请求方法 POST
  4. 请求提类型 application/json
  5. 标题参数名 title
  6. 是否需要内容 需要
  7. 内容参数名 text

演示自动同步到网盘并自动入库

任务自动同步中

任务自动同步结束

任务通知流程

须知

注意:v0.0.6 版本数据库不兼容 <v0.0.5 本版本(v0.0.6)进行了大规模重构,移除了对旧版数据库(alist相关表名)的兼容支持。如果您从 v0.0.5 升级,需要手动处理数据或删除旧数据库文件(data/openlistsync.db)重新配置。

重要 使用本工具前你必须了解并且会使用 OpenList;本工具没有集成 OpenList,你需要额外启动 OpenList

警告!不要在外网暴露本系统,否则后果自负! 本系统已经做了一定的安全方面的工作,但仍不能保证绝对安全。如确实需要,请务必使用强密码,并使用SSL

用途举例

1. 同步备份

把本地文件备份到多个网盘或FTP之类的存储,或者在多个网盘之间同步文件等;

可以定时扫描指定目录下文件差异,让目标目录与源目录相同(全同步模式);或仅新增存在于源目录,却不存在于目标目录的文件(仅新增模式)

2. 定时下载

可以设置一次性任务(cron方式设置年月日时分秒,将在指定时间执行一次),可在闲时自动从特定网盘下载文件到本地

特性

  • 开源免费,接受任意审查,几乎支持所有常用平台
    • windows-amd64
    • windows-arm64
    • darwin-amd64
    • darwin-arm64
    • linux-amd64
    • linux-arm64
    • linux-386
    • linux-arm-v6
    • linux-arm-v7
    • linux-s390x
    • linux-ppc64le
  • Github Actions自动打包与发布构建好的可执行程序,过程公开透明,无投毒风险
  • 支持Docker,下载即用
  • 干净卸载,不用的时候删掉即可,无任何残留或依赖,不影响系统里其他程序
  • 密码加密不可逆,永远不会泄露您的密码,敏感信息均被加密,支持重置密码
  • 完全离线运行(仅连接 OpenList),永不上传用户隐私
  • 完善的错误处理,稳定可靠,逻辑自洽;可能出错,但永不崩溃(我猜的)
  • 完善的日志,所有错误都会被记录
  • 引擎管理,可以自由增删改查OpenList/AList
  • 作业管理,可以新增/删除/启用/禁用/编辑/手动执行作业
  • 支持排除项规则,可以排除指定目录或文件不同步
  • 仅新增、全同步、移动三种模式
  • 定时同步支持间隔、cron、手动调用
  • 同步进度、总体进度、同步速度、实时同步文件、预估时间等实时可视化查看
  • 存储可控,合理配置任务记录与日志保留天数,可以控制本程序所占用存储在可控范围内
  • 支持钉钉群机器人或server酱通知,可在任务成功或失败后发送通知

使用方法

先启动

  • 可执行程序

前往Release下载对应平台的可执行程序,直接执行

提示 开机自启、守护进程等可以参考OpenList的方式,把其中的 openlist 改为 openlistsync;注意,本程序不需要 server 参数

  • docker

docker-compose.yaml 示例:

version: "3.8"
services:
  openlistsync:
    image: syscc/openlistsync:latest
    container_name: openlistsync
    restart: always
    network_mode: bridge
    ports:
      - "8023:8023"
    user: "1000:1001"
    environment:
      - WEBHOOK_DELAY=60 # Webhook延迟触发秒数 取决是否需要等MoviePilot刮削完成后同步,如果不需要可以设置为3
      # - WEBHOOK_APIKEY= # Webhook API Key;若设置,则请求必须包含 apikey 字段且值匹配;若留空则不校验
      # - WEBHOOK_OPENLIST_NAME=OpenList # Webhook 自动创建任务时使用的 OpenList 引擎备注名;若未配置或留空,默认使用第一个引擎
      - TVsource=/media/电视剧        # 电视剧源根目录
      - MOVsource=/media/电影        # 电影源根目录
      # DST开头变量适用于临时存放(如追新电视剧),整季完结后可删除并同步至SYNC路径,非必要不需要启用!
      # - DST_TV_TARGETS=/shanct/电视剧 # 优先同步电视剧到此集合;支持 ,;: 分隔
      # - DST_MOV_TARGETS=/shanct/电影  # 优先同步电影到此集合;支持 ,;: 分隔
      # - DST_REFRESH_TV=/media/电视剧,/videos/电视剧 # DST 同步时的刷新集合;支持 ,;: 分隔
      # - DST_REFRESH_MOV=/media/电影,/videos/电影    # DST 同步时的刷新集合;支持 ,;: 分隔
      - SYNC_TV_TARGETS=/115/videos/电视剧,/ODC/tv{max}/电视剧   # 回退电视剧同步集合;{max} → 自动匹配最大数字后缀目录
      - SYNC_MOV_TARGETS=/115/videos/电影,/ODC/mov{max}/电影     # 回退电影同步集合;{max} → 自动匹配最大数字后缀目录
      - SYNC_REFRESH_TV=/115/videos/电视剧,/ODC/tv{max}/电视剧,/videos/电视剧 # SYNC 同步时的刷新集合
      - SYNC_REFRESH_MOV=/115/videos/电影,/ODC/mov{max}/电影,/videos/电影   # SYNC 同步时的刷新集合
      - SECOND=true # 启用二级目录(从 webhook 文本“类别:xxx”解析为二级路径,电视剧与电影均支持)
    volumes:
      - ./data:/app/data

再使用

访问 http://ip:8023

如果你没有修改,默认账号为admin,密码请到日志中查看输出,登录后请立即前往系统设置修改密码

注意 如果没有显示这个日志,可以到同级目录的data/log/sys_xxx.log文件查看,通常在第一行

进入系统后先到引擎管理菜单创建引擎,然后前往作业管理创建同步作业

配置项

点击展开配置项

配置优先级:data/config.ini>环境变量>默认值;前一个存在,则后边都将被忽略。修改配置需重启程序或Docker。

data/config.ini文件示例(如该文件存在,则优先级最高

[OpenlistSync]
# 运行端口号
port=8023
# 登录有效期,单位天
expires=2
# 日志等级:0-DEBUG,1-INFO,2-WARNING,3-ERROR,4-CRITICAL;数值越大,产生的日志越少,推荐1或2
log_level=1
# 控制台日志等级:适用于v0.2.3及之后版本,与上同
console_level=2
# 系统日志保留天数,该天数之前的日志会自动清理,单位天,0表示不自动清理
log_save=7
# 任务记录保留天数,该天数之前的记录会自动清理,单位天,0表示不自动清理
task_save=0
# 任务执行超时时间,单位小时。一定要设置长一点,以免要备份的东西太多
task_timeout=72

上边的文件默认不存在,如需要,您可以手动在程序同级目录的data目录下创建config.ini,并填入上边的内容。注意,文件应使用UTF-8编码

config.ini Docker环境变量 描述 默认值
port OPENLISTSYNC_PORT 运行端口号 8023
expires OPENLISTSYNC_EXPIRES 登录有效期,单位天 2
log_level OPENLISTSYNC_LOG_LEVEL 日志等级:0-DEBUG,1-INFO,2-WARNING,3-ERROR,4-CRITICAL;数值越大,产生的日志越少,推荐1或2 1
console_level OPENLISTSYNC_CONSOLE_LEVEL 控制台日志等级:适用于v0.2.3及之后版本;与上同 2
log_save OPENLISTSYNC_LOG_SAVE 系统日志保留天数,该天数之前的日志会自动清理,单位天,0表示不自动清理 7
task_save OPENLISTSYNC_TASK_SAVE 任务记录保留天数,该天数之前的记录会自动清理,单位天,0表示不自动清理 0
task_timeout OPENLISTSYNC_TASK_TIMEOUT 任务执行超时时间,单位小时。一定要设置长一点,以免要备份的东西太多 72
- TZ 时区 Asia/Shanghai

Webhook 与自动同步

  • 端点:POST /webhook
  • 行为:
    • 解析标题中“名称(年份)”并识别类型(是否包含 Sxx/Exx/Exx-Exx → 电视剧)
    • 如果存在同名且启用的作业,默认延迟 60 秒后触发手动执行(可通过 delay 覆盖)
    • 若不存在同名作业:检查源存在后自动创建仅手动作业并立即执行;OpenList API 始终使用第一个引擎
    • 任务完成后根据刷新目标集合自动刷新到电影目录或电视剧最大季目录,并发送通知

运行时环境变量

变量 说明 示例
WEBHOOK_DELAY Webhook 延迟触发时间(秒) 60
WEBHOOK_APIKEY Webhook API Key,可选。设置后,Webhook 请求必须包含 apikey 字段且值匹配 123456
WEBHOOK_OPENLIST_NAME Webhook 自动创建任务时使用的 OpenList 引擎备注名;若未配置或留空,默认使用第一个引擎 OpenList
TVsource 电视剧源根 /media/电视剧
MOVsource 电影源根 /media/电影
DST_TV_TARGETS DST_MOV_TARGETS 优先同步根集合(原样使用),存在同名目录时仅同步到这里;仅在末尾追加“名称(年份)”;支持 ,;: 分隔 例如 /shanct/电视剧/shanct/电影
SYNC_TV_TARGETS 电视剧同步目标根集合,用 ,;: 分隔,支持 {max};仅在末尾追加“名称(年份)” 例如 /115/videos/电视剧,/ODC/tv{max}/电视剧/115/videos/tv,tv{max}/tv
SYNC_MOV_TARGETS 电影同步目标根集合,支持 {max};仅在末尾追加“名称(年份)” 例如 /115/videos/电影,/ODC/mov{max}/电影/115/videos/mov,mov{max}/mov
DST_REFRESH_TV DST_REFRESH_MOV 当命中 DST_* 同步集合时使用的刷新集合;仅在末尾追加“名称(年份)”;支持 ,;: 分隔 例如 /media/电视剧,/videos/电视剧/media/电影,/videos/电影
SYNC_REFRESH_TV 当走 SYNC_* 同步集合时使用的刷新集合(仅在末尾追加“名称(年份)”) 例如 /115/videos/电视剧,/ODC/tv{max}/电视剧,/videos/电视剧
SYNC_REFRESH_MOV 当走 SYNC_* 同步集合时使用的刷新集合(仅在末尾追加“名称(年份)”) 例如 /115/videos/电影,/ODC/mov{max}/电影,/videos/电影
SECOND 启用二级目录(从 webhook 文本“类别:xxx”解析为二级路径);开启后源与目标都将拼接该二级目录;电视剧与电影均支持 true
  • 占位符说明:{max} 占位符(支持任意层级)。语法:前缀{max}(如 tv{max}disk{max})。系统会自动扫描父目录下(如果未指定父目录则默认为根目录 /)以该前缀开头的所有子目录,并选择数字后缀最大的那个。例如:/ODC/tv{max}/电视剧 会扫描 /ODC 下的 tv*,若有 tv1~tv9,则替换为 /ODC/tv9/电视剧
  • 源存在判定:TVsourceMOVsource 下存在 名称(年份) 目录才会创建作业。

接口概览

  • GET/POST/PUT/DELETE /svr/openlist 引擎管理(列表、子目录、增删改)
  • GET/POST/PUT/DELETE /svr/job 作业管理(列表、详情、手动执行、启用/禁用、中止、删除)
  • GET/POST/PUT/DELETE /svr/notify 通知配置(列表、增删改、测试)
  • POST /webhook Webhook 触发(标题解析、自动建作业与刷新)。支持参数 apikey(URL参数或Body参数),若服务端配置了 WEBHOOK_APIKEY 则必须提供且匹配。

排除项规则简单说明

  • OpenlistSync 的排除项规则是一种类似gitignore的规则;
    • OpenlistSync 规定的排除项根目录为同步来源或目标目录,例如你的来源目录为 /baidu/pan/ ,使用规则 /123321/* 将忽略目录 /baidu/pan/123321/ 下的文件;使用 /baidu/* 不会有效果。
.*              表示忽略所有 . 开头的文件和目录
*.a             表示忽略所有 .a 结尾的文件
/a.jpg          表示仅仅忽略项目根目录下的 a.jpg 文件,不包括 /abc/a.jpg
data/:          表示忽略data目录下的所有内容,不忽略 data 文件
/data:          表示忽略根目录下的data文件
/*.pdf:         表示忽略/a.pdf,不忽略 /doc/a.pdf
**/a.txt:       表示忽略/a.txt,a/a.txt,a/b/a.txt等
a/**/b.txt:     表示忽略a/b.txt, a/x/b.txt,a/x/y/b.txt等
/mtk/do.doc     表示过滤某个具体文件
fd1/*           表示忽略/fd1/,/fd0/df1/等下所有文件
/fd1/*          表示忽略/fd1/下所有文件,不包括/fd0/fd1/,/fd2/fd1/等

Star随时间

Stargazers over time

About

OpenListSync是一个适用于OpenList的自动化同步工具 Sync for OpenList

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

  • Python 51.4%
  • Vue 35.2%
  • JavaScript 8.1%
  • SCSS 4.7%
  • Other 0.6%