/bilibili-toolman

配合 GH Actions 的哔哩哔哩创作中心 Python API / 搬运工具

Primary LanguagePythonGNU General Public License v2.0GPL-2.0

安装

pip install bilibili_toolman

使用

以 Github Actions 转载视频:

准备凭据

凭据需要在本地准备

  • pip 安装 bilibili_toolman

    • Windows 用户: 在 Releases 可下载已打包 .exe 版本
  • 使用 Web 端 API

      python -m bilibili_toolman --save --cookies "SESSDATA=8aafe8**********;bili_jct=4f39b**********"
    

    SESSDATA,bili_jct 可在XHR请求头中或document.cookies获得,这里不将阐述

  • 使用 上传助手 API

      python -m bilibili_toolman --save --sms
    

    跟随输出操作即可(注:需要完成 Geetest 校验)

  • 凭据即输出的 Base64 编码内容

Actions - 配置凭据

  • Fork 此项目

  • 在项目 Settings > Secret > New repository secret 创建:

    • Name : SESSION
    • Value : 此处为准备好的凭据
  • 可选 替换不同凭据上传、投稿

    指定上传凭据

    • Name : SESSION_UPLOAD
    • Value : 此处为准备好的凭据

    指定投稿凭据

    • Name : SESSION_SUBMIT
    • Value : 此处为准备好的凭据

    一般推荐使用 Web 凭据上传,上传助手凭据投稿(高速 (?) (~400Mbps) 上传,多P投稿)

Actions - 手动上传

该 Actions 适用于手动转载的用户

  • 在项目 Actions > 手动转载 > Run Workflow 填入值(详见参数说明
  • 运行即可

Actions - 定时上传

该 Actions 适用于需要自动转载Youtube频道的用户

API 使用示例

>>> from bilibili_toolman.bilisession.web import BiliSession
# bilisession.client 即上传助手 API。较 Web 版相比,可以用低等级帐号投稿多 P 视频
# 同时,可以免去大部分人机校验操作
# bilisession.web 即 Web 端创作中心 API。在上传速度上会有优势
# 注:投稿与上传*不需要*在同一个 Session 中完成
# 不论 import 的是什么版本,登录态恢复时都会重新实例化登录态对应的 Session
>>> session = BiliSession.from_base64_string("H4sIADKW+2EC/5VVWW/bRhB2EF216...") 
# 从凭据恢复登录态,详情见 准备凭据
>>> endpoint_1,cid_1 = session.UploadVideo("本地视频01.mp4")
('n220208141kq78....', ...)
>>> endpoint_2,cid_2 = session.UploadVideo("本地视频02.mp4")
('n220209892re88....', ...)
# 上传视频并拿 key
# 上传线路根据恢复的 Session 而定
# Web / Cookies 使用的是网宿CDN,国内外速度都很可观
# Client 使用的 CDN 在海外的速度则较慢
# 推荐分别准备 Web / Client 的 Session. 如此可用 Web 高速上传,Client 多 P 投稿
>>> from bilibili_toolman.bilisession.common.submission import Submission
# 准备稿件
>>> submission = Submission(
    title="【toolman】 转载测试",
    desc="...as per request"
)
# 新建稿件 (标题描述出现韩文字符等会导致稿件无效,具体参见 -h 输出)
>>> submission.videos.append(
    Submission(
        title="多 P (P1)",
        video_endpoint=endpoint_1
    )
)
>>> submission.videos.append(
    Submission(
        title="多 P (P2)",
        video_endpoint=endpoint_2
    )
)    
# 添加视频 (P),注意仅父节点(稿件)描述会被显示;分 P 视频和父稿件同类型
>>> cover = session.UploadCover('封面测试.png')
>>> submission.cover_url = cover['data']['url']
# 上传,设置封面
>>> submission.source = 'https://github.com/mos9527/bilibili-toolman'
# 设置转载来源
>>> submission.tags.append('转载')
# 添加标签
>>> submission.thread = 17
# 设置分区(详见 README 文末分区表)
>>> session.SubmitSubmission(submission,seperate_parts=False)
# 投稿视频 (尝试以多 P 模式上传)
# 若使用 Web API,如果条件不足(Lv3+ 及 1000+ 关注量) 则会报错
>>> session.SubmitSubmission(submission,seperate_parts=True)
# 投稿视频 (尝试以将多 P 分为单 P 后上传)
{'code:': 0,
    'results': [{'code': 0, 'message': '0','ttl': 1,
    'data': {'aid': 5939...., 'bvid': 'BV1oq....'}}]}

其它

例程 :

API 实现 :

示例

asciicast

感谢

PC 上传助手逆向 · FortuneDayssss/BilibiliUploader

分区数据,API 参考 · Passkou/bilibili_api

Youtube 解析 · yt-dlp/yt-dlp

参数说明

usage: bilibili-toolman [-h] [--cookies COOKIES] [--sms] [--load LOAD]
                        [--load_upload LOAD_UPLOAD]
                        [--load_submit LOAD_SUBMIT] [--save] [--http]
                        [--noenv] [--cdn {ws,qn,bda2,kodo,gcs,bos}]
                        [--opts OPTS] [--thread_id THREAD_ID] [--tags TAGS]
                        [--desc DESC] [--title TITLE] [--seperate_parts]
                        [--no_upload] [--no_submit] [--original]
                        [--no_reprint] [--localfile LOCALFILE-URL]
                        [--youtube YOUTUBE-URL]

使用帮助

optional arguments:
-h, --help            show this help message and exit

身份设置 (随方式优先级排序):
--cookies COOKIES     登陆: 使用 Cookies 登陆,即使用 Web API (不可多 P 上传) ( 需要 SESSDATA 及 bili_jct ) e.g.SESSDATA=cb0..; bili_jct=6750...
--sms                 登陆:使用短信验证码登陆,即使用 上传助手 API (可多 P 上传)(需手动交互)(有日获取限制,请配合 --save 使用)
--load LOAD           登陆:加载凭据,同时用于上传及投稿
--load_upload LOAD_UPLOAD
                        登陆:使用该凭据上传,而不用--load凭据上传
--load_submit LOAD_SUBMIT
                        登陆:使用该凭据投稿,而不用--load凭据投稿
--save                登陆:向stdout输出当前登陆凭据并退出(其他输出转移至stderr)
--http                强制使用 HTTP (不推荐)
--noenv               上传时,不采用环境变量(如代理)
--cdn {ws,qn,bda2,kodo,gcs,bos}
                        上传用 CDN (限 Web API) (对应 网宿(适合海外),七牛,百度(默认),七牛,谷歌,百度)
--retry_submit_delay RETRY_SUBMIT_DELAY
                        投稿限流时,重新投稿周期
--retry_submit_count RETRY_SUBMIT_COUNT
                        投稿限流时,尝试重新投稿次数

上传设置:
--opts OPTS           解析可选参数 ,详见 --opts 格式
--thread_id THREAD_ID
                        分区 ID
--tags TAGS           标签
--desc DESC           描述格式 e.g. "原描述:{desc}" (其他变量详见下文)(仅稿件有描述)
--title TITLE         标题格式 e.g. "[Youtube] {title} (其他变量详见下文)(使用于稿件及分P)"
--seperate_parts      不分P (e.g. --youtube [播放列表],--localfile [文件夹])独立投稿(不分P)(Web上传默认不分 P)
--no_upload           只下载资源
--no_submit           不提交稿件,适用于获取filename参数
--original            设置稿件为原创
--no_reprint          设置稿件不允许转载

解析可选参数 "opts" (格式 : [参数1]=[值1];[参数2]=[值2] (query-string)):
--localfile LOCALFILE-URL
                        本地文件
                        参数:
                            cover (str) - 封面图片路径
                        e.g. --localfile "le videos/" --opts cover="le cover.png" --tags ...
--youtube YOUTUBE-URL
                        Youtube / Twitch / etc 视频下载 (yt-dlp)
                        参数:yt-dlp 参数:
                            format (str) - 同 yt-dlp -f
                            quite (True,False) - 是否屏蔽 yt-dlp 日志 (默认 False)
                        特殊参数:
                            playlistend - 对于播放列表、频道,下载到(时间顺序,新者在前)第 n 个视频为止
                            playliststart - 对于播放列表、频道,从(时间顺序,新者在前)第 n 个视频开始下载
                        
                            daterange - 只下载在该参数指定时间窗口内的视频 (精确到毫秒)
                                格式可以为 YYmmdd,也可以用相对时间. 如:
                                
                                e.g. daterange=now; (下载今天上传的视频)
                                e.g. daterange=now-1day; (下载昨天到今天上传的视频)
                                e.g. daterange=220430~220501 (下载 2022年4月30日~2022年5月1日 的视频)        
                            
                            hardcode - 烧入硬字幕选项
                                e.g. 启用    ..;hardcode;...
                                e.g. 换用字体 ..;hardcode=style:FontName=Segoe UI       
                                e.g. NV硬解码   ..;hardcode=input:-hwaccel cuda/output:-c:v h264_nvenc -crf 17 -b:v 5M
                                多个选项用 / 隔开   
                        e.g. --youtube "..." --opts "format=best&quiet=True&hardcode" --tags ...
                            此外,针对视频对象,还提供其他变量:
                                {id}
                                {title}    
                                {descrption}
                                {upload_date}
                                {uploader}
                                {uploader_id}
                                {uploader_url}
                                {channel_id}
                                {channel_url}
                                {duration}
                                {view_count}
                                {avereage_rating}
                                ...
                            注:输入播放列表且多 P 时,稿件标题为播放列表标题,稿件描述仅为 `来自Youtube`
                        
                        默认配置:不烧入字幕,下载最高质量音视频,下载字幕但不操作

变量:
    {title},{desc} 等变量适用于:
        title, desc, tags

通用变量:
    {title}     -       原标题
    {desc}      -       原描述
    {safe_korean_title}
                -       【韩文】替换韩文为特殊字符的标题
    {roma_korean_title}
                -       【韩文】替换韩文为罗马音的标题 (需要安装 korean_romanizer)
                
本工具支持将给定视频源转载至哔哩哔哩

详见项目 README 以获取更多例程 : github.com/greats3an/bilibili-toolman

分区ID (tid) 表

动画

分区 TID
MAD·AMV 24
MMD·3D 25
综合 27
短片·手书·配音 47
特摄 86
手办·模玩 210

番剧

分区 TID
连载动画 33
资讯 51
官方延伸 152

国创

分区 TID
国产动画 153
国产原创相关 168
布袋戏 169
资讯 170
动态漫·广播剧 195

音乐

分区 TID
原创音乐 28
音乐现场 29
VOCALOID·UTAU 30
翻唱 31
演奏 59
音乐综合 130
MV 193
电音 194

舞蹈

分区 TID
宅舞 20
舞蹈综合 154
舞蹈教程 156
街舞 198
明星舞蹈 199
**舞 200

游戏

分区 TID
单机游戏 17
Mugen 19
网络游戏 65
GMV 121
音游 136
电子竞技 171
手机游戏 172
桌游棋牌 173

知识

分区 TID
野生技术协会 122
社科人文 124
科学科普 201
财经 207
校园学习 208
职业职场 209

数码

分区 TID
手机平板 95
电脑装机 189
摄影摄像 190
影音智能 191

生活

分区 TID
日常 21
动物圈 75
美食圈 76
搞笑 138
手工 161
绘画 162
运动 163
其他 174
汽车 176

鬼畜

分区 TID
鬼畜调教 22
音MAD 26
人力VOCALOID 126
教程演示 127

时尚

分区 TID
美妆 157
服饰 158
T台 159
健身 164
风尚标 192

资讯

分区 TID
热点 203
环球 204
社会 205
综合 206

娱乐

分区 TID
综艺 71
明星 137

影视

分区 TID
短片 85
影视杂谈 182
影视剪辑 183
预告·资讯 184

纪录片

分区 TID
人文·历史 37
科学·探索·自然 178
军事 179
社会·美食·旅行 180

电影

分区 TID
其他国家 83
欧美电影 145
日本电影 146
华语电影 147

电视剧

分区 TID
国产剧 185
海外剧 187