部署来自 main 的最新文档变更: 791dd57f23

This commit is contained in:
amtoaer
2026-05-07 06:48:09 +00:00
commit f4de22a586
77 changed files with 477 additions and 0 deletions

1
assets/app.D7044GBf.js Normal file
View File

@@ -0,0 +1 @@
import{U as o,a4 as p,a5 as u,a6 as l,a7 as c,a8 as f,a9 as d,aa as m,ab as h,ac as g,ad as A,d as P,u as v,y,x as w,ae as C,af as R,ag as b,ah as E}from"./chunks/framework.Bsyxd66g.js";import{R as S}from"./chunks/theme.CXiSjCOs.js";function i(e){if(e.extends){const a=i(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const s=i(S),T=P({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=v();return y(()=>{w(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&C(),R(),b(),s.setup&&s.setup(),()=>E(s.Layout)}});async function _(){globalThis.__VITEPRESS__=!0;const e=D(),a=x();a.provide(u,e);const t=l(e.route);return a.provide(c,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),s.enhanceApp&&await s.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function x(){return h(T)}function D(){let e=o,a;return g(t=>{let n=A(t),r=null;return n&&(e&&(a=n),(e||a===n)&&(n=n.replace(/\.js$/,".lean.js")),r=import(n)),o&&(e=!1),r},s.NotFound)}o&&_().then(({app:e,router:a,data:t})=>{a.go().then(()=>{p(a.route,t.site),e.mount("#app")})});export{_ as createApp};

View File

@@ -0,0 +1,11 @@
import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.Bsyxd66g.js";const g=JSON.parse('{"title":"命令行参数","description":"","frontmatter":{},"headers":[],"relativePath":"args.md","filePath":"args.md","lastUpdated":1778136465000}'),l={name:"args.md"},e=n(`<h1 id="命令行参数" tabindex="-1">命令行参数 <a class="header-anchor" href="#命令行参数" aria-label="Permalink to &quot;命令行参数&quot;"></a></h1><p>程序支持有限的命令行参数,可以通过执行 <code>bili-sync-rs --help</code> 查看说明。</p><div class="language-shell vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">bili-sync/target/debug</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> main</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">*</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ⇡</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"></span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ./bili-sync-rs</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --help</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">由</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> Rust</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> &amp; </span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">Tokio</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 驱动的哔哩哔哩同步工具</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">Usage:</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> bili-sync-rs</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> [OPTIONS]</span></span>
<span class="line"></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">Options:</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> -s,</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --scan-only</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> [env: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">SCAN_ONLY=]</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> -l,</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --log-level</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> &lt;</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">LOG_LEVE</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">L</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">&gt;</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> [env: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">RUST_LOG=]</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> [default: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">None,bili_sync=info]</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> -h,</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --help</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> Print</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> help</span></span>
<span class="line"><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> -V,</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --version</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> Print</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> version</span></span></code></pre></div><p>可以看到除版本和帮助信息外,程序仅支持两个参数,参数除可以通过命令行设置外,还可通过环境变量设置。</p><h2 id="scan-only" tabindex="-1"><code>--scan-only</code> <a class="header-anchor" href="#scan-only" aria-label="Permalink to &quot;\`--scan-only\`&quot;"></a></h2><p><code>--scan-only</code> 参数用于仅扫描列表,而不实际执行下载操作。该参数的主要目的是<a href="https://github.com/amtoaer/bili-sync/issues/66#issuecomment-2066642481" target="_blank" rel="noreferrer">方便用户从 v1 迁移</a>,新用户不需要关注。</p><h2 id="log-level" tabindex="-1"><code>--log-level</code> <a class="header-anchor" href="#log-level" aria-label="Permalink to &quot;\`--log-level\`&quot;"></a></h2><p><code>--log-level</code> 参数用于设置日志级别,一般可以维持默认。该参数与 Rust 程序中 <code>RUST_LOG</code> 的语义相同,可以查看<a href="https://docs.rs/env_logger/latest/env_logger/#enabling-logging" target="_blank" rel="noreferrer">相关文档</a>获取详细信息。</p>`,8),t=[e];function h(p,k,r,d,o,F){return a(),i("div",null,t)}const y=s(l,[["render",h]]);export{g as __pageData,y as default};

View File

@@ -0,0 +1 @@
import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.Bsyxd66g.js";const g=JSON.parse('{"title":"命令行参数","description":"","frontmatter":{},"headers":[],"relativePath":"args.md","filePath":"args.md","lastUpdated":1778136465000}'),l={name:"args.md"},e=n("",8),t=[e];function h(p,k,r,d,o,F){return a(),i("div",null,t)}const y=s(l,[["render",h]]);export{g as __pageData,y as default};

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
window.__VP_HASH_MAP__=JSON.parse("{\"collection.md\":\"BnZftCMc\",\"frontend.md\":\"kMFDNQHa\",\"configuration.md\":\"CTYDd3uK\",\"index.md\":\"BVOMjzO4\",\"submission.md\":\"hnRuTJtY\",\"args.md\":\"BYVWDxsV\",\"question.md\":\"y7BNY2M3\",\"quick-start.md\":\"M-lcs-PN\",\"design.md\":\"90q2hBns\",\"favorite.md\":\"fsf7BiTt\",\"introduction.md\":\"D4x9QJ7E\"}");window.__VP_SITE_DATA__=JSON.parse("{\"lang\":\"zh-Hans\",\"dir\":\"ltr\",\"title\":\"bili-sync\",\"description\":\"由 Rust & Tokio 驱动的哔哩哔哩同步工具\",\"base\":\"/\",\"head\":[],\"router\":{\"prefetchLinks\":true},\"appearance\":true,\"themeConfig\":{\"outline\":{\"label\":\"页面导航\",\"level\":\"deep\"},\"nav\":[{\"text\":\"主页\",\"link\":\"/\"},{\"text\":\"v2.11.1\",\"items\":[{\"text\":\"程序更新\",\"link\":\"https://github.com/amtoaer/bili-sync/releases\"},{\"text\":\"文档更新\",\"link\":\"https://github.com/search?q=repo:amtoaer/bili-sync+docs&type=commits\"}]}],\"sidebar\":[{\"text\":\"简介\",\"items\":[{\"text\":\"什么是 bili-sync\",\"link\":\"/introduction\"},{\"text\":\"快速开始\",\"link\":\"/quick-start\"}]},{\"text\":\"细节\",\"items\":[{\"text\":\"配置说明\",\"link\":\"/configuration\"},{\"text\":\"命令行参数\",\"link\":\"/args\"},{\"text\":\"工作原理\",\"link\":\"/design\"}]},{\"text\":\"参考\",\"items\":[{\"text\":\"获取收藏夹信息\",\"link\":\"/favorite\"},{\"text\":\"获取合集/列表信息\",\"link\":\"/collection\"},{\"text\":\"获取用户投稿信息\",\"link\":\"/submission\"}]},{\"text\":\"其它\",\"items\":[{\"text\":\"常见问题\",\"link\":\"/question\"},{\"text\":\"管理页\",\"link\":\"/frontend\"}]}],\"socialLinks\":[{\"icon\":\"github\",\"link\":\"https://github.com/amtoaer/bili-sync\"}],\"search\":{\"provider\":\"local\"},\"notFound\":{\"title\":\"你来到了没有知识的荒原\",\"quote\":\"这里什么都没有\",\"linkText\":\"返回首页\"},\"docFooter\":{\"prev\":\"上一页\",\"next\":\"下一页\"},\"lastUpdated\":{\"text\":\"上次更新于\"},\"returnToTopLabel\":\"回到顶部\",\"sidebarMenuLabel\":\"菜单\",\"darkModeSwitchLabel\":\"主题\",\"lightModeSwitchTitle\":\"切换到浅色模式\",\"darkModeSwitchTitle\":\"切换到深色模式\"},\"locales\":{},\"scrollOffset\":134,\"cleanUrls\":true}");

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
import{_ as e,c as a,o as t,a3 as s}from"./chunks/framework.Bsyxd66g.js";const o="/assets/season.DhuB2-D3.webp",c="/assets/series.BaQswuih.webp",f=JSON.parse('{"title":"获取合集/列表信息","description":"","frontmatter":{},"headers":[],"relativePath":"collection.md","filePath":"collection.md","lastUpdated":1778136465000}'),i={name:"collection.md"},n=s('<h1 id="获取合集-列表信息" tabindex="-1">获取合集/列表信息 <a class="header-anchor" href="#获取合集-列表信息" aria-label="Permalink to &quot;获取合集/列表信息&quot;"></a></h1><p>视频合集和视频列表虽然在哔哩哔哩网站交互上行为类似,但在接口层级是两个不同的概念,程序配置中需要对两者做出区分。</p><p>目前 B 站绝大部分内容都是视频合集Season视频列表Series是古早的功能现在已经不常见了。</p><h2 id="配置形式与区分方法" tabindex="-1">配置形式与区分方法 <a class="header-anchor" href="#配置形式与区分方法" aria-label="Permalink to &quot;配置形式与区分方法&quot;"></a></h2><p>新版本 b 站网页端已经对两种类型做了初步整合,将需要的参数展示在了视频合集/视频列表的 URL 中不再需要手动查看接口。URL 的路径格式为:</p><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>/{mid}/lists/{id}?type={season/series}</span></span></code></pre></div><p>点开你想要订阅的视频合集/视频列表详情,对照查看 URL 即可获取所需参数。</p><h3 id="视频合集" tabindex="-1">视频合集 <a class="header-anchor" href="#视频合集" aria-label="Permalink to &quot;视频合集&quot;"></a></h3><p><img src="'+o+'" alt="image"></p><p>类型为 <code>合集Season</code>,用户 ID 为 <code>521722088</code>,合集 ID 为 <code>1987140</code>。</p><h3 id="视频列表" tabindex="-1">视频列表 <a class="header-anchor" href="#视频列表" aria-label="Permalink to &quot;视频列表&quot;"></a></h3><p><img src="'+c+'" alt="image"></p><p>类型为 <code>列表Series</code>,用户 ID 为 <code>521722088</code>,列表 ID 为 <code>387214</code>。</p>',13),d=[n];function r(l,p,h,_,m,u){return t(),a("div",null,d)}const g=e(i,[["render",r]]);export{f as __pageData,g as default};

View File

@@ -0,0 +1 @@
import{_ as e,c as a,o as t,a3 as s}from"./chunks/framework.Bsyxd66g.js";const o="/assets/season.DhuB2-D3.webp",c="/assets/series.BaQswuih.webp",f=JSON.parse('{"title":"获取合集/列表信息","description":"","frontmatter":{},"headers":[],"relativePath":"collection.md","filePath":"collection.md","lastUpdated":1778136465000}'),i={name:"collection.md"},n=s("",13),d=[n];function r(l,p,h,_,m,u){return t(),a("div",null,d)}const g=e(i,[["render",r]]);export{f as __pageData,g as default};

BIN
assets/config._3EbYWXX.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
import{_ as a,c as i,o as e,a3 as s}from"./chunks/framework.Bsyxd66g.js";const b=JSON.parse('{"title":"配置说明","description":"","frontmatter":{},"headers":[],"relativePath":"configuration.md","filePath":"configuration.md","lastUpdated":1778136465000}'),t={name:"configuration.md"},l=s("",87),h=[l];function n(p,o,r,d,k,c){return e(),i("div",null,h)}const u=a(t,[["render",n]]);export{b as __pageData,u as default};

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
import{_ as e,c as a,o,a3 as i}from"./chunks/framework.Bsyxd66g.js";const t="/assets/bili_collection.DiWdQ_1C.webp",s="/assets/bili_video.AE-Vm7po.webp",r="/assets/single_page.jTeO_DvF.webp",d="/assets/multi_page.tN1txa1M.webp",l="/assets/multi_page_detail.BYT8HIYs.webp",f=JSON.parse('{"title":"工作原理","description":"","frontmatter":{},"headers":[],"relativePath":"design.md","filePath":"design.md","lastUpdated":1778136465000}'),p={name:"design.md"},c=i("",49),n=[c];function h(v,u,b,g,_,m){return o(),a("div",null,n)}const k=e(p,[["render",h]]);export{f as __pageData,k as default};

BIN
assets/detail.ChUzrbas.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 342 KiB

BIN
assets/dir.CYojSJXr.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 258 KiB

View File

@@ -0,0 +1 @@
import{_ as a,c as o,o as s,j as e,a as t}from"./chunks/framework.Bsyxd66g.js";const r="/assets/favorite.BWmN8cbK.webp",b=JSON.parse('{"title":"获取收藏夹信息","description":"","frontmatter":{},"headers":[],"relativePath":"favorite.md","filePath":"favorite.md","lastUpdated":1778136465000}'),c={name:"favorite.md"},i=e("h1",{id:"获取收藏夹信息",tabindex:"-1"},[t("获取收藏夹信息 "),e("a",{class:"header-anchor",href:"#获取收藏夹信息","aria-label":'Permalink to "获取收藏夹信息"'},"")],-1),n=e("p",null,[t("收藏夹的 ID 获取非常简单,在网页端打开自己的收藏夹列表,切换到你想要获取的收藏夹,然后查看 URL 地址栏中的 "),e("code",null,"fid"),t(" 参数内容即可。")],-1),d=e("p",null,[e("img",{src:r,alt:"image"})],-1),l=[i,n,d];function _(p,f,m,h,u,v){return s(),o("div",null,l)}const B=a(c,[["render",_]]);export{b as __pageData,B as default};

View File

@@ -0,0 +1 @@
import{_ as a,c as o,o as s,j as e,a as t}from"./chunks/framework.Bsyxd66g.js";const r="/assets/favorite.BWmN8cbK.webp",b=JSON.parse('{"title":"获取收藏夹信息","description":"","frontmatter":{},"headers":[],"relativePath":"favorite.md","filePath":"favorite.md","lastUpdated":1778136465000}'),c={name:"favorite.md"},i=e("h1",{id:"获取收藏夹信息",tabindex:"-1"},[t("获取收藏夹信息 "),e("a",{class:"header-anchor",href:"#获取收藏夹信息","aria-label":'Permalink to "获取收藏夹信息"'},"")],-1),n=e("p",null,[t("收藏夹的 ID 获取非常简单,在网页端打开自己的收藏夹列表,切换到你想要获取的收藏夹,然后查看 URL 地址栏中的 "),e("code",null,"fid"),t(" 参数内容即可。")],-1),d=e("p",null,[e("img",{src:r,alt:"image"})],-1),l=[i,n,d];function _(p,f,m,h,u,v){return s(),o("div",null,l)}const B=a(c,[["render",_]]);export{b as __pageData,B as default};

View File

@@ -0,0 +1 @@
import{_ as t,c as a,o as s,j as e,a as n}from"./chunks/framework.Bsyxd66g.js";const o="/assets/webui.CZmBmDyk.webp",k=JSON.parse('{"title":"管理页","description":"","frontmatter":{},"headers":[],"relativePath":"frontend.md","filePath":"frontend.md","lastUpdated":1778136465000}'),r={name:"frontend.md"},c=e("h1",{id:"管理页",tabindex:"-1"},[n("管理页 "),e("a",{class:"header-anchor",href:"#管理页","aria-label":'Permalink to "管理页"'},"")],-1),d=e("p",null,"自 2.6.0 版本开始bili-sync 的配置文件已经完全迁移至数据库中,程序的所有操作都可以通过 WebUI 管理页进行。",-1),i=e("p",null,[e("img",{src:o,alt:"管理页"})],-1),_=[c,d,i];function l(p,m,f,h,u,b){return s(),a("div",null,_)}const B=t(r,[["render",l]]);export{k as __pageData,B as default};

View File

@@ -0,0 +1 @@
import{_ as t,c as a,o as s,j as e,a as n}from"./chunks/framework.Bsyxd66g.js";const o="/assets/webui.CZmBmDyk.webp",k=JSON.parse('{"title":"管理页","description":"","frontmatter":{},"headers":[],"relativePath":"frontend.md","filePath":"frontend.md","lastUpdated":1778136465000}'),r={name:"frontend.md"},c=e("h1",{id:"管理页",tabindex:"-1"},[n("管理页 "),e("a",{class:"header-anchor",href:"#管理页","aria-label":'Permalink to "管理页"'},"")],-1),d=e("p",null,"自 2.6.0 版本开始bili-sync 的配置文件已经完全迁移至数据库中,程序的所有操作都可以通过 WebUI 管理页进行。",-1),i=e("p",null,[e("img",{src:o,alt:"管理页"})],-1),_=[c,d,i];function l(p,m,f,h,u,b){return s(),a("div",null,_)}const B=t(r,[["render",l]]);export{k as __pageData,B as default};

View File

@@ -0,0 +1 @@
import{_ as t,c as e,o as i}from"./chunks/framework.Bsyxd66g.js";const p=JSON.parse('{"title":"bili-sync","titleTemplate":"由 Rust & Tokio 驱动的哔哩哔哩同步工具","description":"","frontmatter":{"layout":"home","title":"bili-sync","titleTemplate":"由 Rust & Tokio 驱动的哔哩哔哩同步工具","hero":{"name":"bili-sync","text":"由 Rust & Tokio 驱动的哔哩哔哩同步工具","actions":[{"theme":"brand","text":"什么是 bili-sync","link":"/introduction"},{"theme":"alt","text":"快速开始","link":"/quick-start"},{"theme":"alt","text":"GitHub","link":"https://github.com/amtoaer/bili-sync"}],"image":{"src":"/logo.webp","alt":"bili-sync"}},"features":[{"icon":"🤖","title":"无需干预","details":"自动选择最优的视频和音频配置"},{"icon":"💾","title":"专为 NAS 设计","details":"可被 Emby、Jellyfin 等媒体服务器一键识别"},{"icon":"🐳","title":"部署简单","details":"提供简单易用的 docker 镜像"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1778136465000}'),a={name:"index.md"};function n(o,l,s,c,r,d){return i(),e("div")}const u=t(a,[["render",n]]);export{p as __pageData,u as default};

View File

@@ -0,0 +1 @@
import{_ as t,c as e,o as i}from"./chunks/framework.Bsyxd66g.js";const p=JSON.parse('{"title":"bili-sync","titleTemplate":"由 Rust & Tokio 驱动的哔哩哔哩同步工具","description":"","frontmatter":{"layout":"home","title":"bili-sync","titleTemplate":"由 Rust & Tokio 驱动的哔哩哔哩同步工具","hero":{"name":"bili-sync","text":"由 Rust & Tokio 驱动的哔哩哔哩同步工具","actions":[{"theme":"brand","text":"什么是 bili-sync","link":"/introduction"},{"theme":"alt","text":"快速开始","link":"/quick-start"},{"theme":"alt","text":"GitHub","link":"https://github.com/amtoaer/bili-sync"}],"image":{"src":"/logo.webp","alt":"bili-sync"}},"features":[{"icon":"🤖","title":"无需干预","details":"自动选择最优的视频和音频配置"},{"icon":"💾","title":"专为 NAS 设计","details":"可被 Emby、Jellyfin 等媒体服务器一键识别"},{"icon":"🐳","title":"部署简单","details":"提供简单易用的 docker 镜像"}]},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1778136465000}'),a={name:"index.md"};function n(o,l,s,c,r,d){return i(),e("div")}const u=t(a,[["render",n]]);export{p as __pageData,u as default};

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
import{_ as t,c as s,o as e,a3 as i}from"./chunks/framework.Bsyxd66g.js";const a="/assets/overview.CV5ADeaw.webp",c="/assets/detail.ChUzrbas.webp",l="/assets/play.CCSTwqV_.webp",o="/assets/dir.CYojSJXr.webp",y=JSON.parse('{"title":"bili-sync 是什么?","description":"","frontmatter":{},"headers":[],"relativePath":"introduction.md","filePath":"introduction.md","lastUpdated":1778136465000}'),d={name:"introduction.md"},h=i("",17),k=[h];function n(b,r,p,m,u,x){return e(),s("div",null,k)}const f=t(d,[["render",n]]);export{y as __pageData,f as default};

Binary file not shown.

After

Width:  |  Height:  |  Size: 167 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 270 KiB

BIN
assets/play.CCSTwqV_.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 216 KiB

View File

@@ -0,0 +1 @@
import{_ as e,c as o,o as a,a3 as t}from"./chunks/framework.Bsyxd66g.js";const u=JSON.parse('{"title":"常见问题","description":"","frontmatter":{},"headers":[],"relativePath":"question.md","filePath":"question.md","lastUpdated":1778136465000}'),r={name:"question.md"},i=t('<h1 id="常见问题" tabindex="-1">常见问题 <a class="header-anchor" href="#常见问题" aria-label="Permalink to &quot;常见问题&quot;"></a></h1><h2 id="各种文件找不到问题-如运行后找不到初始-data-sqlite、提示成功下载但看不到视频文件等。" tabindex="-1">各种文件找不到问题,如运行后找不到初始 <code>data.sqlite</code>、提示成功下载但看不到视频文件等。 <a class="header-anchor" href="#各种文件找不到问题-如运行后找不到初始-data-sqlite、提示成功下载但看不到视频文件等。" aria-label="Permalink to &quot;各种文件找不到问题,如运行后找不到初始 `data.sqlite`、提示成功下载但看不到视频文件等。&quot;"></a></h2><p>请检查挂载位置与配置文件填写是否正确,需要理解的是:</p><ol><li>容器挂载是把宿主机的 <code>/A</code> 挂载到容器内的 <code>/B</code></li><li>程序运行在容器中,能够读取、写入的目录只能是 <code>/B</code>,因此配置文件内填写的路径只能与 <code>/B</code> 有关。</li></ol><h2 id="下载视频出现-permission-denied、operation-not-permitted-等错误。" tabindex="-1">下载视频出现 Permission denied、Operation not permitted 等错误。 <a class="header-anchor" href="#下载视频出现-permission-denied、operation-not-permitted-等错误。" aria-label="Permalink to &quot;下载视频出现 Permission denied、Operation not permitted 等错误。&quot;"></a></h2><p>有两种可能的原因:</p><ol><li>容器运行时指定了 <code>user</code>(非 root但配置文件并未正确填写挂载后的路径。此时目标路径只是一个普通的容器内路径非 root 用户无法修改,导致执行出错;</li><li>配置文件正确填写了挂载后的路径,此时出现权限错误说明你为容器指定的 <code>user</code> 无权写入宿主机上的原始路径。需检查宿主机原始路径的文件权限。</li></ol><h2 id="下载某个视频连续多次出现-error-decoding-response-body-错误" tabindex="-1">下载某个视频连续多次出现 <code>error decoding response body</code> 错误 <a class="header-anchor" href="#下载某个视频连续多次出现-error-decoding-response-body-错误" aria-label="Permalink to &quot;下载某个视频连续多次出现 `error decoding response body` 错误&quot;"></a></h2><p>这个问题我也出现过几次,目前还不清楚原因,但怀疑是 b 站服务器使用某种检测机制拒绝了响应。</p><p>bili-sync 在 2.4.0 版本引入了一个改动,不将此错误计入错误次数,允许其无限重试,我过去下载失败的某个视频使用这个策略在多次尝试后成功了。</p><p>尽管如此,该解决方案仍然比较玄学,需要将来能够查明具体原因再加以修复。</p><h2 id="有些视频已经达到了最大重试次数还没有成功-我可以手动重试吗" tabindex="-1">有些视频已经达到了最大重试次数还没有成功,我可以手动重试吗? <a class="header-anchor" href="#有些视频已经达到了最大重试次数还没有成功-我可以手动重试吗" aria-label="Permalink to &quot;有些视频已经达到了最大重试次数还没有成功,我可以手动重试吗?&quot;"></a></h2><p>可以在 WebUI 中查找对应的视频源并点击“重置”,这会将所有失败的子任务重置为未下载状态,下一次视频下载任务就会开始重试。</p><p>此外还可以进入视频详情点击“编辑状态”,这允许用户自行修改每个子任务的状态。</p>',14),d=[i];function n(s,c,l,p,h,_){return a(),o("div",null,d)}const q=e(r,[["render",n]]);export{u as __pageData,q as default};

View File

@@ -0,0 +1 @@
import{_ as e,c as o,o as a,a3 as t}from"./chunks/framework.Bsyxd66g.js";const u=JSON.parse('{"title":"常见问题","description":"","frontmatter":{},"headers":[],"relativePath":"question.md","filePath":"question.md","lastUpdated":1778136465000}'),r={name:"question.md"},i=t("",14),d=[i];function n(s,c,l,p,h,_){return a(),o("div",null,d)}const q=e(r,[["render",n]]);export{u as __pageData,q as default};

View File

@@ -0,0 +1,34 @@
import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.Bsyxd66g.js";const p="/assets/config._3EbYWXX.webp",y=JSON.parse('{"title":"快速开始","description":"","frontmatter":{},"headers":[],"relativePath":"quick-start.md","filePath":"quick-start.md","lastUpdated":1778136465000}'),e={name:"quick-start.md"},l=n(`<h1 id="快速开始" tabindex="-1">快速开始 <a class="header-anchor" href="#快速开始" aria-label="Permalink to &quot;快速开始&quot;"></a></h1><p>程序使用 Rust 编写,不需要 Runtime 且内嵌 WebUI并为各个平台提供了预编译的二进制文件因此部署较为简单。</p><h2 id="程序获取" tabindex="-1">程序获取 <a class="header-anchor" href="#程序获取" aria-label="Permalink to &quot;程序获取&quot;"></a></h2><p>程序为各个平台提供了预构建的二进制文件,并且打包了 <code>Linux/amd64</code> 与 <code>Linux/arm64</code> 两个平台的 Docker 镜像。用户可以自行选择使用哪种方式运行。</p><h3 id="其一-下载平台二进制文件运行" tabindex="-1">其一:下载平台二进制文件运行 <a class="header-anchor" href="#其一-下载平台二进制文件运行" aria-label="Permalink to &quot;其一:下载平台二进制文件运行&quot;"></a></h3><div class="caution custom-block github-alert"><p class="custom-block-title">CAUTION</p><p>如果你使用这种方式运行,请确保 FFmpeg 已被正确安装且位于 PATH 中,可直接通过 <code>ffmpeg</code> 命令访问。</p></div><p>在<a href="https://github.com/amtoaer/bili-sync/releases" target="_blank" rel="noreferrer">程序发布页</a>选择最新版本中对应机器架构的压缩包,解压后会获取一个名为 <code>bili-sync-rs</code> 的可执行文件,直接双击执行。</p><h3 id="其二-使用-docker-compose-运行" tabindex="-1">其二:使用 Docker Compose 运行 <a class="header-anchor" href="#其二-使用-docker-compose-运行" aria-label="Permalink to &quot;其二:使用 Docker Compose 运行&quot;"></a></h3><p>Linux/amd64 与 Linux/arm64 两个平台可直接使用 Docker 或 Docker Compose 运行,此处以 Compose 为例:</p><blockquote><p>请注意其中的注释,有不清楚的地方可以先继续往下看。</p></blockquote><div class="language-yaml vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang">yaml</span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;">services</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> bili-sync-rs</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> # 不推荐使用 latest 这种模糊的 tag最好直接指明版本号</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> image</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">amtoaer/bili-sync-rs:latest</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> restart</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">unless-stopped</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> network_mode</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">bridge</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> # 该选项请仅在日志终端支持彩色输出时启用,否则日志中可能会出现乱码</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> tty</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">true</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> # 非必需设置项,推荐设置为宿主机用户的 uid 及 gid (\`$uid:$gid\`)</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> # 可以执行 \`id \${user}\` 获取 \`user\` 用户的 uid 及 gid</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> # 程序下载的所有文件权限将与此处的用户保持一致,不设置默认为 Root</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> user</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">1000:1000</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> hostname</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">bili-sync-rs</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> container_name</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">bili-sync-rs</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> # 程序默认绑定 0.0.0.0:12345 运行 http 服务</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> # 可同时修改 compose 文件与 config.toml 变更服务运行的端口</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> ports</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> - </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">12345:12345</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> volumes</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> - </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">\${你希望存储程序配置的目录}:/app/.config/bili-sync</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> # metadata/people 正确挂载才能在 Emby 或 Jellyfin 中显示 UP 主头像</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> # 右边的目标目录不固定,只需要确保目标目录与 bili-sync 中填写的“UP 主头像保存路径”保持一致即可</span></span>
<span class="line"><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"> - </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">\${Emby 或 Jellyfin 配置下的 metadata/people 目录}:/app/.config/bili-sync/upper_face</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> # 接下来可以挂载一系列用于保存视频的目录,接着在 bili-sync 中配置将视频下载到这些目录即可</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> # 例如:</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> # - /home/amtoaer/HDDs/Videos/Bilibilis/:/home/amtoaer/HDDs/Videos/Bilibilis/</span></span>
<span class="line"><span style="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> # 如果你使用的是群晖系统,请移除最后的 logging 配置,否则会导致日志不显示</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> logging</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">:</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D;"> driver</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">: </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;local&quot;</span></span></code></pre></div><p>使用该 compose 文件,执行 <code>docker compose up -d</code> 即可运行。</p><h2 id="进行必要配置" tabindex="-1">进行必要配置 <a class="header-anchor" href="#进行必要配置" aria-label="Permalink to &quot;进行必要配置&quot;"></a></h2><p>运行程序,应该可以在日志中看到:</p><div class="language- vp-adaptive-theme"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki shiki-themes github-light github-dark vp-code" tabindex="0"><code><span class="line"><span>Jul 12 16:11:10 INFO 欢迎使用 Bili-Sync当前程序版本xxxxx</span></span>
<span class="line"><span>Jul 12 16:11:10 INFO 项目地址https://github.com/amtoaer/bili-sync</span></span>
<span class="line"><span>Jul 12 16:11:10 INFO 数据库初始化完成</span></span>
<span class="line"><span>Jul 12 17:17:50 WARN 生成 auth_tokenxxxxxxxx可使用该 token 登录 web UI该信息仅在首次运行时打印</span></span>
<span class="line"><span>Jul 12 16:11:10 INFO 配置初始化完成</span></span>
<span class="line"><span>Jul 12 16:11:10 INFO 开始运行管理页: http://0.0.0.0:12345</span></span></code></pre></div><p>中间应该会穿插一条 CONFIG 的报错,这是因为配置文件内容缺失导致视频下载任务未能运行,在初次启动时是正常现象。</p><p>自 2.6.0 版本开始,程序仅会创建一个数据库文件,配置同样在数据库表中进行维护。</p><p>数据库文件存储于 <code>\${config_dir}/bili-sync/data.sqlite</code>。</p><div class="caution custom-block github-alert"><p class="custom-block-title">CAUTION</p><p></p><p>请注意,<code>config_dir</code> 的实际位置与操作系统和用户名有关。</p><p>对于名为 Alice 的用户,<code>config_dir</code> 指向的位置是:</p><ul><li>Lin: <code>/home/Alice/.config</code></li><li>Win: <code>C:\\Users\\Alice\\AppData\\Roaming</code></li><li>Mac: <code>/Users/Alice/Library/Application Support</code></li></ul><p>特别的,在 Docker 环境中,<code>config_dir</code> 会被展开为 <code>/app/.config</code>。</p></div><p>接着打开 WebUI切换到设置页输入日志中打印的 <code>auth_token</code>,点击认证。</p><p><img src="`+p+'" alt="设置页"></p><p>认证后会看到一系列的配置,除绑定地址外的选项<strong>基本都会实时生效</strong>。为避免意料外的情况,建议将配置文件一次修改完毕后再点击保存。</p><p>如无特殊需求一般仅需修改“B 站认证”与“视频质量”两个标签下的配置。</p><p>其中“B 站认证”在一次填写后即可忽略,程序会在<strong>每日第一次运行视频下载任务</strong>时检查认证状态,并在有必要时自动刷新。</p><p>对于这些设置项的含义,请参考<a href="./configuration">配置说明</a>,可善用右侧导航在不同配置项间跳转。</p><h2 id="添加视频源订阅" tabindex="-1">添加视频源订阅 <a class="header-anchor" href="#添加视频源订阅" aria-label="Permalink to &quot;添加视频源订阅&quot;"></a></h2><p>配置完毕后,我们便可以随时添加视频源订阅。</p><p>用户在正确填写“B 站认证”后可以在“快捷订阅”部分查看自己创建的收藏夹、关注的合集与 UP 主一键订阅,也可以在“视频源”页手动添加并管理。</p><p>对于手动添加的视频源,可参考如下页面获取所需的参数:</p><ul><li><a href="./favorite">收藏夹</a></li><li><a href="./collection">合集 / 列表</a></li><li><a href="./submission">用户投稿</a></li></ul><p>添加完订阅就无需进行任何干预了,视频下载任务会在后台每隔特定时间(由配置中的“同步间隔”决定)自动运行一次,刷新并下载启用的视频源!</p>',31),t=[l];function h(k,o,c,r,d,g){return a(),i("div",null,t)}const u=s(e,[["render",h]]);export{y as __pageData,u as default};

View File

@@ -0,0 +1 @@
import{_ as s,c as i,o as a,a3 as n}from"./chunks/framework.Bsyxd66g.js";const p="/assets/config._3EbYWXX.webp",y=JSON.parse('{"title":"快速开始","description":"","frontmatter":{},"headers":[],"relativePath":"quick-start.md","filePath":"quick-start.md","lastUpdated":1778136465000}'),e={name:"quick-start.md"},l=n("",31),t=[l];function h(k,o,c,r,d,g){return a(),i("div",null,t)}const u=s(e,[["render",h]]);export{y as __pageData,u as default};

BIN
assets/season.DhuB2-D3.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 289 KiB

BIN
assets/series.BaQswuih.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 296 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 279 KiB

View File

@@ -0,0 +1 @@
import{_ as e,c as t,o as a,j as s,a as o}from"./chunks/framework.Bsyxd66g.js";const i="/assets/submission.MMNGpK24.webp",P=JSON.parse('{"title":"获取用户投稿信息","description":"","frontmatter":{},"headers":[],"relativePath":"submission.md","filePath":"submission.md","lastUpdated":1778136465000}'),n={name:"submission.md"},r=s("h1",{id:"获取用户投稿信息",tabindex:"-1"},[o("获取用户投稿信息 "),s("a",{class:"header-anchor",href:"#获取用户投稿信息","aria-label":'Permalink to "获取用户投稿信息"'},"")],-1),c=s("p",null,"UP 主 的 ID 获取也很简单,在网页端打开想要获取投稿的 UP 主首页,直接查看网址栏中的数字或页面中的个人信息即可。",-1),d=s("p",null,[s("img",{src:i,alt:"image"})],-1),_=[r,c,d];function l(m,p,h,u,f,b){return a(),t("div",null,_)}const N=e(n,[["render",l]]);export{P as __pageData,N as default};

View File

@@ -0,0 +1 @@
import{_ as e,c as t,o as a,j as s,a as o}from"./chunks/framework.Bsyxd66g.js";const i="/assets/submission.MMNGpK24.webp",P=JSON.parse('{"title":"获取用户投稿信息","description":"","frontmatter":{},"headers":[],"relativePath":"submission.md","filePath":"submission.md","lastUpdated":1778136465000}'),n={name:"submission.md"},r=s("h1",{id:"获取用户投稿信息",tabindex:"-1"},[o("获取用户投稿信息 "),s("a",{class:"header-anchor",href:"#获取用户投稿信息","aria-label":'Permalink to "获取用户投稿信息"'},"")],-1),c=s("p",null,"UP 主 的 ID 获取也很简单,在网页端打开想要获取投稿的 UP 主首页,直接查看网址栏中的数字或页面中的个人信息即可。",-1),d=s("p",null,[s("img",{src:i,alt:"image"})],-1),_=[r,c,d];function l(m,p,h,u,f,b){return a(),t("div",null,_)}const N=e(n,[["render",l]]);export{P as __pageData,N as default};

BIN
assets/webui.CZmBmDyk.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB