diff --git a/README.md b/README.md index e7c0008..6b73d6c 100644 --- a/README.md +++ b/README.md @@ -1,100 +1,115 @@ -# dysync.net - 抖音同步工具(我收藏的、我喜欢的,指定博主) +# dysync.net - 抖音同步工具(收藏/喜欢/指定博主,无缝对接Emby/Jellyfin) -`dysync.net` 是一款基于 **.NET Core 6.0** 和 **Vue** 开发的工具,用于同步抖音收藏夹以及我喜欢的视频,解决个人收藏和喜欢的视频容易失效的问题。支持多账号同步,并已预设刮削信息,同步后的视频可直接在 Emby 或 Jellyfin 中播放。 +`dysync.net` 是一款基于 **.NET Core 6.0** 和 **Vue** 开发的工具,用于同步抖音收藏夹、「我喜欢」的视频及指定博主作品,解决个人收藏视频易失效的问题。支持多账号同步,内置视频信息刮削功能,同步后的视频可直接在 Emby 或 Jellyfin 中播放。 -> 如在使用中有任何问题,欢迎添加 QQ:279225040 进行咨询。 +> 🔧 技术咨询:使用中遇到任何问题,欢迎添加 QQ:279225040 咨询 --- -#### 先放一张Emby的图 -![输入图片说明](docs/emby.png) - -### 1. 获取抖音 Cookie 以及用户sec_user_d以及指定博主的sec_user_id - -Cookie 是同步功能的关键,请严格按照以下步骤获取: - -1. 打开 **抖音网页版** (https://www.douyin.com/) 并登录。 -2. 进入你的**收藏夹**页面。 -3. 按 `F12` 打开浏览器「开发者工具」,切换到「Network (网络)」标签。 -4. 在搜索框中输入 `v1/web/aweme/listcollection`。 -5. 点击任意一条筛选出的请求,在右侧「Headers (标头)」中找到 `Cookie` 字段,**完整复制**其内容。 - -![输入图片说明](docs/getcookies.png) -![输入图片说明](docs/secUserId.png) - -6. 进入博主主页浏览器地址栏中的便是博主的sec_user_id,复制其值。也可以在博主主页按 `F12` 打开「开发者工具」,切换到「Network (网络)」标签,点击任意一条请求,在右侧「Headers (标头)」中找到 `sec_user_id` 字段,复制其值。博主作品同步功能不建议开启全量同步(一次性下载作品量过多容易被风控) -![输入图片说明](docs/upers-uid.png) -### 2. 路径映射规则 - -为了方便管理和播放,请理解并正确配置路径映射: -![输入图片说明](docs/upersuidset.png) - -* **视频存储路径**:容器内路径为 `/app/collect`。你需要将此路径映射到你本地的一个目录(如 NAS 或电脑硬盘)。**这个本地路径必须与后续在「抖音授权」页面配置的「文件存储路径」完全一致**。 -* **数据库存储路径**:容器内路径为 `/app/db`。映射此路径用于持久化工具的配置和同步记录,防止容器删除后数据丢失。 -* **多账号配置**:如需同步多个账号,需为每个账号指定一个独立的容器内路径(如 `/app/user1`, `/app/user2`),并分别进行映射。 - -> **重要**:如果不进行路径映射,所有文件将保存在容器内部,无法直接在 EMBY/JF 中访问。 +### 📺 Emby 播放效果预览 +![Emby播放效果](docs/emby.png) --- -## 🔑 默认账号密码 +## 📌 1. 获取抖音关键信息(必做!同步核心凭证) +Cookie 及 `sec_user_id` 是同步功能的核心,需严格按步骤获取,避免遗漏或错误。 -首次登录后台管理页面时使用: +### 1.1 提取抖音 Cookie +1. 打开 **抖音网页版** (https://www.douyin.com/) 并登录目标账号; +2. 进入「我的收藏」页面,确保页面加载完成; +3. 按 `F12` 打开浏览器「开发者工具」,切换到「Network (网络)」标签; +4. 刷新页面,在搜索框中输入 `v1/web/aweme/listcollection` 筛选请求; +5. 点击任意一条筛选结果,在右侧「Headers (标头)」中找到 `Cookie` 字段,**完整复制整段内容**(不可删减字符)。 -* **用户名**:`douyin` -* **密码**:`douyin2025` +![获取Cookie步骤](docs/getcookies.png) +![提取个人sec_user_id](docs/secUserId.png) -> **建议**:登录后请修改密码,保障账号安全。 +### 1.2 提取 `sec_user_id`(个人/指定博主) +- **个人 sec_user_id**(同步自己的收藏/喜欢用): + 进入自己的抖音主页,浏览器地址栏中 `sec_user_id=` 后的字符串即为个人 ID(如 `https://www.douyin.com/user/sec_user_id=xxx`)。 +- **博主 sec_user_id**(同步指定博主作品用): + 1. 进入目标博主主页; + 2. 方式1:直接复制地址栏中 `sec_user_id=` 后的内容; + 3. 方式2:按 `F12` → 「Network」→ 任意请求 → 「Headers」→ 提取 `sec_user_id` 字段值。 + +> ⚠️ 风控提示:同步博主作品时,**禁止开启全量同步**(一次性下载过多易被抖音限制访问),建议分批次同步。 + +![提取博主sec_user_id](docs/upers-uid.png) --- -## 🚀 运行方式 +## 📁 2. 路径映射规则(核心!错配会导致无法访问/数据丢失) +为实现视频在 Emby/Jellyfin 中正常播放及数据持久化,需正确配置本地路径与容器路径的映射: -你可以选择以下任一方式启动服务。**推荐使用 Docker Compose**,因为它更易于管理和维护。 +| 存储类型 | 容器内路径 | 本地路径配置要求 | 用途说明 | +|------------------|------------------|----------------------------------------------------------------------------------|------------------------------| +| 个人收藏视频 | `/app/collect` | 映射到本地目录(如 NAS:`/volume1/抖音/收藏`、电脑:`D:/抖音/收藏`) | 存储同步后的收藏视频 | +| 个人喜欢视频 | `/app/favorite` | 映射到本地目录(建议与收藏视频路径区分,如 `/volume1/抖音/喜欢`) | 存储同步后的「我喜欢」视频 | +| 指定博主视频 | `/app/uper` | 映射到本地目录(如 `/volume1/抖音/博主作品`) | 存储同步后的博主视频 | +| 数据库文件 | `/app/db` | 映射到本地稳定目录(如 `/volume1/抖音/工具数据库`) | 持久化配置、同步记录(防止容器删除后数据丢失) | +| 多账号视频(可选)| `/app/user1`/`/app/user2` 等 | 为每个账号分配独立本地路径(如 `/volume1/抖音/账号A`、`/volume1/抖音/账号B`) | 实现多账号隔离同步 | + +> ✅ 关键注意: +> 1. 本地路径需与后续后台「抖音授权」页面配置的「文件存储路径」**完全一致**; +> 2. 未配置路径映射时,文件仅存于容器内部,Emby/Jellyfin 无法访问,且容器删除后数据丢失。 + +![路径配置示例](docs/upersuidset.png) + +--- + +## 🔑 3. 默认账号密码(首次登录用) +首次访问后台管理页面时,使用以下默认账号密码: +- **用户名**:`douyin` +- **密码**:`douyin2025` + +> ⚠️ 安全建议:登录后立即修改密码,避免未授权访问。 + +--- + +## 🚀 4. 运行方式(推荐 Docker Compose,更易维护) ### 方式一:Docker 命令行 - -将下方命令中的本地路径替换为你的实际路径,然后在终端中执行。 - +将下方命令中的「本地路径」替换为你的实际路径,终端执行即可: ```bash docker run -d --restart=always \ - -v /你的/本地/视频1/路径:/app/collect \ - -v /你的/本地/视频2/路径:/app/favorite \ - -v /你的/本地/数据库/路径:/app/db \ - -v /你的/本地/数据库/路径:/app/uper \ + -v /你的/本地/收藏视频路径:/app/collect \ + -v /你的/本地/喜欢视频路径:/app/favorite \ + -v /你的/本地/数据库路径:/app/db \ + -v /你的/本地/博主视频路径:/app/uper \ -p 10101:10101 \ --name dysync2025 \ registry.cn-hangzhou.aliyuncs.com/jianzhichu/dysync.net +# 注意:-p 后面的容器端口必须为 10101(源码固定) -###-p 后面的第二个端口 必须10101(源码里面写死了) -``` -### 方式 2:Docker-Compose 运行(推荐) +### 方式二:Docker Compose 运行(推荐) +创建 docker-compose.yml 文件,复制以下内容,替换「本地路径」后执行 docker-compose up -d: -```yml +```yaml version: '3.8' services: dysync: image: registry.cn-hangzhou.aliyuncs.com/jianzhichu/dysync.net - container_name: dysync2025 # 容器名称,可自定义 + container_name: dysync2025 # 容器名称可自定义 restart: always # 容器异常退出时自动重启 ports: - "10101:10101" # 端口映射:本地端口:容器端口(容器端口10101不可修改) volumes: - # 第一个账号的收藏的视频存储路径(本地路径:容器路径) - - /本地视频路径1:/app/collect - # 第一个账号的喜欢的视频存储路径(本地路径:容器路径) - - /本地视频路径1:/app/favorite - # 数据库存储路径 - - /本地数据库路径:/app/db - - /指定博主视频路径:/app/uper - # 第二个账号的视频存储路径(多账号示例,需在后台对应配置) - - /本地视频路径2:/app/yeyeye - # (可选)如需添加环境变量,取消下方注释并配置 + # 第一个账号:收藏视频存储路径(本地路径:容器路径) + - /本地/收藏视频路径:/app/collect + # 第一个账号:喜欢视频存储路径(本地路径:容器路径) + - /本地/喜欢视频路径:/app/favorite + # 数据库存储路径(持久化配置和同步记录) + - /本地/数据库路径:/app/db + # 指定博主视频存储路径 + - /本地/博主视频路径:/app/uper + # 多账号示例:第二个账号视频存储路径(需在后台对应配置) + - /本地/第二个账号视频路径:/app/yeyeye + # (可选)环境变量配置(取消注释并修改) # environment: # - ENV_VAR_NAME=value - # (可选)如需自定义网络,取消下方注释并配置 + # (可选)自定义网络配置(取消注释并修改) # networks: # - custom_network @@ -102,34 +117,4 @@ services: # networks: # custom_network: # driver: bridge - -``` -### 方式 3:自己编译运行 - ##### 前端源码在/app里面 -``` -yarn install -yarn dev -yarn run build - -### 运行可能报错,less包如果报错,运行下面的命令即可 - yarn remove less && yarn add less@4.1.3 -D - -``` - ##### 后台编译要先安装.netcore环境 netcore sdk - ```bash - dotnet --version # 输出安装的 .NET Core 版本,说明安装成功 - dotnet build - dotnet build -c Release # 生成文件在 bin/Release/netX.X/ 目录 - -### 调试模式运行 -dotnet run - ``` - -## 软件截图 -![输入图片说明](docs/homepage.png) - -![输入图片说明](docs/datalist.png) - -![输入图片说明](docs/logs.png) - -![输入图片说明](docs/set.png) \ No newline at end of file +``` \ No newline at end of file