42

Github GitHub - happy888888/BiliExp: B站(bilibili 哔哩哔哩)助手:1.每日投币,签到(...

 3 years ago
source link: https://github.com/happy888888/BiliExp
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

README.md

本项目为bilibili(哔哩哔哩,以下简称B站)自动操作脚本,致力于简化大家对B站使用过程中的重复操作,并提供多样化的部署 方式和运行环境,易于使用。本项目起源于我对Fiddler抓包工具的学习,由于大家不断支持和提建议才完成了这么多功能。请 提出您宝贵的建议以帮助本项目更好的前进。

转至目录快速使用

一、B站自动操作脚本BiliExp.py

  • 每日获取经验(投币(支持自定义up主)、点赞、分享视频)
  • 自动转发互动抽奖并评论点赞(自己关注的up主,支持指定关键字如"#互动抽奖#",支持跟踪转发模式)
  • 获取主站@和私聊消息提醒(便于多账号抽奖时获取中奖信息)
  • 参与官方转盘抽奖活动(目前没有自动搜集活动的功能,需要在配置文件config/activities.json里面手动指定,本项目discussions下会更新比较新的转盘抽奖活动)
  • 每日直播签到
  • 直播挂机(获取小心心,点亮粉丝牌)
  • 直播自动送出快过期礼物
  • 直播天选时刻抽奖 (支持过滤付费抽奖)
  • 直播应援团每日签到
  • 直播开启宝箱领取银瓜子(本活动已结束,不知道B站以后会不会再启动)
  • 每日兑换银瓜子为硬币
  • 自动领取大会员每月权益(每月1号领取B币劵,优惠券)
  • 自动花费大会员剩余B币劵(每月28号执行,支持给自己充电或者兑换成金瓜子)
  • 漫画APP每日签到
  • 自动花费即将过期漫读劵
  • 自动积分兑换漫画福利券(需中午12点启动)
  • 自动领取大会员漫画每月福利劵
  • 自动参加每月"站友日"活动(本活动已结束,不知道B站以后会不会再启动)
  • 定时清理无效动态(转发的过期抽奖,失效动态,支持自定义关键字,非官方渠道抽奖无法判断是否过期)
  • 风纪委员投票(可自定义投票参数,或依赖百度NLP情感分析)
    转至目录快速使用

二、脚本up主系列

命令行视频投稿工具

三、B站漫画下载mangaDownloader.py支持合并为单个pdf文件,允许使用账号cookie下载已解锁部分

  • 支持使用账号cookie下载已解锁部分
  • 合并为单个pdf文件
    快速使用

四、B站视频下载videoDownloader.py

  • 支持使用账号cookie下载大会员视频
  • 支持下载港澳台番剧(内置一个反向代理接口,接口源码见"player_proxy"文件夹,支持阿里/腾讯云函数部署此接口)
  • 支持下载弹幕(转成ass字幕文件,需要用支持ass字幕的播放器打开,目前只支持滚动弹幕和顶部/底部弹幕,不支持高级弹幕)
    快速使用

使用方式(仅自动操作脚本部分)

注意:方式一需要转到BiliExp-Actions分支,方式二和三一定要正确配置相应的secrets再执行Actions,方式五和方式六需要去release下载压缩包再部署。请尽量按照使用步骤进行!! 如果需要设置配置文件config.json,建议先观看配置文件详解

方式一(推荐)、只使用github Actions

  • 请转至本项目的"BiliExp-Actions"分支,请区分此分支的Actions与本主分支的不同,不要使用本主分支的Actions。(deploy for xxxyun为本主分支的Actions,run BiliExp是BiliExp-Actions分支的Actions,注意切换分支!!)
  • 为避免我收到大量无用的Actions消息,故不将此Actions添加到master主分支内。
  • fork后切换分支的方法如下

方式二、使用腾讯云函数

  • 1.1开通云函数 SCF 的腾讯云账号,在访问秘钥页面获取账号的 TENCENT_SECRET_ID,TENCENT_SECRET_KEY

注意!为了确保权限足够,获取这两个参数时不要使用子账户!此外,腾讯云账户需要实名认证

  • 2.1 在fork后的github仓库的 “Settings” --》“Secrets” 中添加"Secrets",name和value分别为:
    • 2.1.1 name为"TENCENT_SECRET_ID" value为腾讯云用户SecretID(需要主账户,子账户可能没权限)
    • 2.1.2 name为"TENCENT_SECRET_KEY" value为腾讯云账户SecretKey
    • 2.1.3 name为"biliconfig" value为B站账号登录信息,格式如下
      SESSDATA
      bili_jct
      uid
      
      例如下面这样
      e1272654%vfdawi241825%2C8dc06*a1
      0a9081cc53856314783d195f5ddbadf3
      203953353
      
  • 2.2 添加完上面 3 个"Secrets"后,进入"Actions"(上面那个不是Secrets下面那个) --》"deploy for tencentyun",点击右边的"Run workflow"即可部署至腾讯云函数(如果出错请在红叉右边点击"deploy for tencentyun"查看部署任务的输出信息找出错误原因)
    • 2.2.1 首次fork可能要去actions里面同意使用actions条款,如果"Actions"里面没有"deploy for tencentyun",点一下右上角的"star","deploy for tencentyun"就会出现在"Actions"里面
    注: 默认并没有开启所有功能,部署到云函数后可以去/config/config.json文件进行更加详细的配置
	1. 自定义功能开启与关闭
	2. 投币功能自定义投币数量
	3. 抽奖动态转发自定义评论内容,默认评论为(从未中奖,从未放弃[doge])
	4. 漫画辅助功能的启用与详细配置,默认不启用此功能
	5. 风纪委员投票功能的启用与详细配置,默认不启用此功能
	6. 多账户的支持(支持50个以上的B站账号),默认只能单账号

方式三(不推荐)、使用阿里云函数

目前有发现在Actions内无法ping通阿里云函数的域名,部署可能出现超时现象

    • 1.1开通云函数计算的阿里云账号,以及账号的ACCOUNT_ID,ACCESS_KEY_ID,ACCESS_KEY_SECRET(注意!!获取后面两个参数时要使用子账户!!会没有权限创建新的函数,请提前开启云函数服务)
    • 1.2一个或多个B站账号,以及登录后获取的SESSDATA,bili_jct,DedeUserID (获得B站账户cookies方法),可选:SCKEY,email用于微信或邮箱的消息推送
    • 1.3fork本项目
    • 2.1在fork后的github仓库的 “Settings” --》“Secrets” 中添加"Secrets",name和value分别为:

      • 2.1.1 name为"ACCOUNT_ID" value为阿里云用户的账号ID
      • 2.1.2 name为"ACCESS_KEY_ID" value为阿里云账户AccessKeyID(需要主账户,子账户可能没权限)
      • 2.1.3 name为"ACCESS_KEY_SECRET" value为阿里云账户accessKeySecret
      • 2.1.4 name为"biliconfig" value为B站账号登录信息,同上面腾讯云函数的部署步骤2.1.3
    • 2.2添加完上面4个"Secrets"后,进入"Actions" --》"deploy for aliyun",点击右边的"Run workflow"即可部署至阿里云函数(如果出错请在红叉右边点击"deploy for aliyun"查看部署任务的输出信息找出错误原因)

      • 2.2.1 首次fork可能要去actions里面同意使用actions条款,如果"Actions"里面没有"deploy for aliyun",点一下右上角的"star","deploy for aliyun"就会出现在"Actions"里面

方式四、windows本地部署

    • 1.1一个或多个B站账号,以及登录后获取的SESSDATA,bili_jct,DedeUserID (获取方式见最下方示意图),可选:SCKEY,email用于微信或邮箱的消息推送
    • 1.2进入右边的release,下载BiliExp-win32_64开头的压缩包
    • 2.1解压步骤1.2下载的压缩包,并放置到合适位置(比如E:\Program Files)
    • 2.2进入解压后产生的config文件夹,配置config.json文件(包含功能的启用和账号cookie的配置)
    • 2.3退出config文件夹返回上层,运行setup_for_windows.bat文件(需要管理员权限),按照提示即可完成安装。脚本将会在每天12:00启动(依赖于计划任务)。

方式五、linux本地部署

    • 1.1一个或多个B站账号,以及登录后获取的SESSDATA,bili_jct,DedeUserID (获取方式见最下方示意图),可选:SCKEY,email用于微信或邮箱的消息推送
    • 2.1执行如下命令,并按照提示安装
      wget https://glare.now.sh/happy888888/BiliExp/BiliExp-Linux-64 && mv BiliExp-Linux-64* BiliExp.tar && tar xvf BiliExp.tar && cd BiliExp && sudo chmod 755 setup_for_linux.sh && sudo ./setup_for_linux.sh
      
    • 2.2安装成功后,可去/etc/BiliExp/config.json文件中进行详细配置,脚本将会在每天12:00启动(依赖于crontab)。

方式六、docker安装

docker hub地址

    • 1.1一个或多个B站账号,以及登录后获取的SESSDATA,bili_jct,DedeUserID (获取方式见最下方示意图),可选:SCKEY,email用于微信或邮箱的消息推送
    • 1.2安装docker(以安装可忽略) curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
    • 2.1填写本项目下config/config.json文件,放到本地任意文件夹下(以路径 '/home/user/Biliexp' 为例)

    • 2.2执行如下命令,运行BiliExp

      docker run \
      -v /home/user/Biliexp:/BiliExp \
      happy888888/biliexp:runner-latest 
      
    • 2.3其他参数

      docker run \
      -v /home/user/Biliexp:/BiliExp \
      happy888888/biliexp:runner-latest \
      -t <tag> \
      -d \
      -c <cron>
      

      <tag>表示版本号,可以使用latest(不指定时默认,表示最新版),newest(表示拉取最新主分支代码执行),指定版本号例如1.1.0,当指定版本号时代码会缓存到挂载的路径(上面的例子是主机的/home/user/Biliexp/code-cache目录),不指定版本号为每次拉取github代码
      -d指定本参数时容器不会退出,而是在每天中午12:00执行代码
      <cron>表示cron表达式,指定后会按照指定表达式的时间执行,默认为0 12 * * *即每天中午12点执行,此项参数在不指定-d时无效

      例子,每天8点执行BiliExp 1.1.0版本

      docker run -d -v /home/user/Biliexp:/BiliExp happy888888/biliexp:runner-latest -t 1.1.0 -d -c "0 8 * * *"
      
  • 3.支持平台

    平台 tag标签 windows/linux(x64) runner-latest linux(arm32) runner-arm-latest linux(arm64) runner-arm64-latest
  • 4.注意事项

    • 4.1docker镜像中不包含本项目代码,docker启动时会自动下载
    • 4.2下载代码的版本号由参数-t指定,只有指定-t 版本号时才会缓存代码下次使用,-t latest-t newest均为每次下载代码
    • 4.3缓存代码后每次只会执行缓存的代码,要更新版本必须删除缓存才会重新下载新代码(指定了-t latest(默认)和-t newest除外)
    • 4.4日志也存放在挂载目录中,且增量保存,可以定时清理
  • 5.其他docker版本 除了不带代码的runner版本,也有携带代码的happy888888/biliexp:latest,happy888888/biliexp:arm64-latest版本docker镜像可以使用,这些版本执行后会立即退出不能指定参数常驻后台

方式七、openwrt等路由器部署

此方式难度较大,如果能用其他方式请尽量使用其他方式

    • 1.1一个或多个B站账号,以及登录后获取的SESSDATA,bili_jct,DedeUserID (获取方式见最下方示意图),可选:SCKEY,email用于微信或邮箱的消息推送
    • 1.2使用xshell等工具,登录openwrt(padavan等)路由器,使用命令安装python3
      opkg update
      opkg install python3-light
      
    • 1.3安装python aiohttpaiohttp库在openwrt(padavan)等路由器的opkg软件源上并没有直接的安装包,需要自己下载项目源码在openwrt平台上构建
      如果你的路由器架构是mipsel,可以下载我编译好的依赖库(与本项目代码一起打包),BiliExp_with_aiohttp-mipsel.zip
    • 2.1下载本项目代码(步骤1.3压缩包包含代码),解压,填写config/config.json文件
    • 2.2通过xftp(WinScp)等软件把解压的文件夹上传到路由器内(比如路径为/root/BiliExp)
    • 2.3设置crontab使代码定时启动 使用xshell等工具,登录openwrt(padavan等)路由器,输入命令
      echo "0 12 * * * /usr/bin/python3 /root/BiliExp/BiliExp.py -c /root/BiliExp/config/config.json" >> "/etc/crontabs/root"
      
      也可以在路由器网页上寻找类似计划任务的功能,在默认添加一行0 12 * * * /usr/bin/python3 /root/BiliExp/BiliExp.py -c /root/BiliExp/config/config.json并保存
  • 3.注意事项

    • 3.1在步骤1.3中我提供的依赖库只有"mipse"架构的路由器能使用,其他架构的路由器只能自行编译"aiohttp"库并安装
    • 3.2本项目依赖的库较大,不能外接U盘的路由器最好不要使用

使用方式(下载器部分)

  • 1.转至release ,下载BiliDownloader,解压。
  • 2.从浏览器获取SESSDATA,bili_jct,DedeUserID这三个参数 (获得B站账户cookies方法)
  • 3.将上述获取的三个参数填入config文件夹中的config.json文件(linux可将文件放入/etc/BiliExp/config.json)
  • 4.使用videoDownloader
    命令行参数
    videoDownloader -a -p <下载文件夹> -v <视频1> -e <分集数> -q <质量序号> -v <视频2> -e <分集数> -q <质量序号> ...
    -a --ass       下载视频时附带ass文件,配合支持ass字幕的播放器可以显示弹幕
    -p --path      下载保存的路径,提供一个文件夹路径,没有会自动创建文件夹,默认为当前文件夹
    -v --video     下载的视频地址,支持链接,av号(avxxxxx),BV号(BVxxxxxx),ep,ss
    -e --episode   分p数,只对多P视频和多集的番剧有效,不提供默认为1,多个用逗号分隔,连续用减号分隔  -e 2,3,5-7,10 表示2,3,5,6,7,10集
    -q --quality   视频质量序号,0为能获取的最高质量(默认),1为次高质量,数字越大质量越低
    -x --proxy     是否使用接口代理(可下载仅港澳台),0为不使用(默认),1为使用代理
    注意,一个 -v 参数对应一个 -e(-q, -x) 参数,如果出现两个 -v 参数但只有一个 -e(-q, -x) 参数则只应用于第一个,可以有多个 -v 参数以一次性下载多个视频
    -V --version   显示版本信息
    -h --help      显示帮助信息
    
    使用例子
    windows上(假如文件在D:\bilidownloader\videoDownloader.exe),下载BV1qt411x7yQ的1,2,3,6集到D:\download目录
    打开cmd执行如下命令
    cd /d D:\bilidownloader
    videoDownloader -v BV1qt411x7yQ -e 1-3,6 -p D:\download
    
    linux上(提前将videoDownloader移动到/usr/local/bin),下载BV1qt411x7yQ的1,2,3,6集到用户的download目录
    shell中执行
    videoDownloader -v BV1qt411x7yQ -e 1-3,6 -p ~/download
    
  • 5.使用mangaDownloader
    命令行参数
    mangaDownloader -p <下载文件夹> -m <漫画> -e <章节数> -f
    -p --path      下载保存的路径,提供一个文件夹路径,没有会自动创建文件夹,默认为当前文件夹
    -m --manga     下载的漫画mc号,整数
    -e --episode   章节数,不提供默认下载所有章节,多个用逗号分隔,连续用减号分隔  -e 2,3,5-7,10 表示2,3,5,6,7,10章节,注意番外也算一个章节
    -f --pdf       下载后合并为一个pdf
    -V --version   显示版本信息
    -h --help      显示帮助信息
    
    使用例子
    windows上(假如文件在D:\bilidownloader\mangaDownloader.exe),下载漫画mc28565的3,9,12,13,14章到D:\download目录
    打开cmd执行如下命令
    cd /d D:\bilidownloader
    mangaDownloader -m 28565 -e 3,9,12-14 -p D:\download
    
    linux上(提前将mangaDownloader移动到/usr/local/bin),下载漫画mc28565的3,9,12,13,14章到用户的download目录
    shell中执行
    mangaDownloader -m 28565 -e 3,9,12-14 -p ~/download
    

使用说明(视频投稿部分)

  • 1.转至release ,下载videoUploader,解压。
  • 2.从浏览器获取SESSDATA,bili_jct,DedeUserID这三个参数 (获得B站账户cookies方法)
  • 3.将上述获取的三个参数填入config文件夹中的config.json文件(linux可将文件放入/etc/BiliExp/config.json)
  • 4.使用videoUploader
    命令行参数
    VideoUploader -v <视频文件路径> -t <视频标题> -d <视频简介> -c <视频封面图片路径> -t <视频标签> -n -s <非原创时视频来源 网址>
    -v --videopath     视频文件路径
    -t --title         视频标题,不指定默认为视频文件名
    -d --desc          视频简介,不指定默认为空
    -c --cover         视频封面图片路径,不提供默认用官方提供的第一张图片
    -i --tid           分区id,默认为174,即生活,其他分区
    -T --tags          视频标签,多个标签用半角逗号隔开,带空格必须打引号,不提供默认用官方推荐的前两个标签
    -n --nonOriginal   勾选转载,不指定本项默认为原创
    -s --source        -n参数存在时指定转载源视频网址
    -D --DelayTime     发布时间戳,10位整数,官方的延迟发布,时间戳距离现在必须大于4小时
    -S --singleThread  单线程上传,如果出现上传失败时使用,不指定本项为3线程上传
    -V --version       显示版本信息
    -h --help          显示帮助信息
    以上参数中只有-v --videopath为必选参数,其他均为可选参数
    
    使用例子
    windows上(假如程序在D:\VideoUploader\VideoUploader.exe,视频在D:\VideoUploader\测试视频.mp4)
    打开cmd执行如下命令
    cd /d D:\VideoUploader
    VideoUploader -v "D:\VideoUploader\测试视频.mp4"
    
    linux上(提前将VideoUploader移动到/usr/local/bin,视频文件在/root/upload/测试视频.mp4)
    shell中执行
    VideoUploader -v "/root/upload/测试视频.mp4"
    

2021/01/05更新

  • 1.优化配置文件加载
  • 2.解决漫画下载器文件名非法的问题
  • 3.导入Actions分支的所有修改

2020/12/09更新

  • 1.完善音频稿件发布和下载部分
  • 2.完善助手脚本docker部署方法

2020/12/01更新

  • 1.视频下载器支持下载弹幕转ass字幕文件
  • 2.修复部分bug

2020/11/30更新

  • 1.支持命令行上传B站视频稿件

2020/11/19更新

  • 1.漫画视频下载器支持命令行参数
  • 2.更新说明

2020/11/18更新

  • 1.增加docker部署方式

2020/11/06更新

  • 1.修复若干bug
  • 2.增加一个Downloader.py类用于视频下载,移除对aria2的依赖

2020/10/20更新

  • 1.发布release版

2020/10/16更新

  • 1.将云函数部分与BiliExp-Actions分支合并,重构这部分所有代码,并调整文件结构

2020/10/1更新

  • 1.B站漫画增加自动领取每月大会员赠送的漫读劵。
  • 2.B站漫画增加自动参与站友日活动(默认关闭)。
  • 3.增加每月28号自动将没有使用的B币劵充电给自己的账户。

2020/09/27更新

  • 1.互动抽奖方式改为转发并评论(听说能提高中奖率money_mouth_facestar_struck)。

2020/09/26更新

  • 1.增加email推送。

2020/09/24更新

  • 1.移除云函数脚本中的doActivity.py和其配置文件。

2020/09/23更新

  • 1.更新Actions,部署前执行账号检查,应对有的人账号配置错误部署后脚本执行失败且找不出原因的情况。
  • 2.新增分支BiliExp-Actions,使依赖于云函数的功能只需要github Actions就能使用,不需要使用云函数。

2020/09/22更新

  • 1.更新BiliExp.py直接自动获取每月大会员权益(B币劵,优惠券)功能
  • 2.增加mangaTask.py自动用即将过期的漫读劵兑换漫画(自动购买追漫列表(默认)或者手动指定购买列表),自动用积分兑换福利券(默认关闭),合并以前的mangaClockIn.py文件到此文件
  • 3.彻底将直播开启宝箱领取银瓜子的功能从云函数中移除。

2020/09/17更新

  • 1.更新BiliLottery.py转发抽奖的逻辑,避免动态太多导致抽奖动态转发的遗漏
  • 2.增加videoDownloader.py下载B站视频
  • 3.增加models/aria2py.py用于B站视频的下载
  • 4.增加/player_proxy/player_proxy.js用于代理B站视频解析接口(需要部署到阿里云函数港澳台服务器)

2020/09/02更新

  • 1.增加topicRepost.py转发话题列表(抽奖话题)(不包含在云函数内)
  • 2.增加cancelAttention.py一键取关所有up主(不包含在云函数内)
  • 3.增加mangaDownloader.py下载B站漫画,支持合并转pdf
  • 3.删除四个已经失效的活动,现在几乎没有可以白嫖B站的官方抽奖活动了,参加(官方抽奖)活动的功能可能会取消

2020/08/28更新

  • 1.截至今天,B站直播开时间宝箱领取银瓜子的活动已经结束
  • 2.B站官方活动里面的 "夏日不宅宣言" 活动和 "新星计划-暑假赛" 活动已经结束,新增加"最强安利王"活动

2020/08/25更新

  • 1.增加送出即将过期的直播礼物的功能
  • 2.增加直播心跳维持在线状态的功能(非大老爷用户在线时长并不能加经验)

2020/08/22更新

  • 1.使用Actions实现脚本自动部署到阿里云,代替本文最下方的手动部署方式(已删除)

2020/08/21更新

  • 1.增加doActivity.py用于参加B站官方活动(抽奖类) 活动列表 https://www.bilibili.com/blackboard/x/act_list/
    • 活动列表(抽奖类)存放在config/activity.json中
      • 每个活动都有过期时间(目前的大部分活动都将在8.30日前过期),活动中抽奖也有参与次数限制
      • 有的活动每天固定赠送抽奖次数,有的活动需要转发,还有的活动需要关注投币点赞甚至投稿才能获得抽奖次数,本脚本只能做每天固定赠送抽奖次数,和转发获得抽奖次数的活动
      • 活动过期或添加新活动均需手动更新activity.json,有新活动或者活动是否过期都可以在上面活动列表网址查看
    • 本人首次在"舞见大合集"活动中抽中一个"小电视抱枕",第一次在B站中抽中实物,记录一下relaxed
  • 2.增加cleanDynamic.py用于清理转发的动态
    • 清理的转发动态包括:①互动抽奖过期的动态;②两个月前带#互动抽奖#标签的动态;③被原up主删除的动态
  • 3.用户配置文件仅需要cookies,不需要再获取客户端的access_key,access_key从用户配置文件移除,用户配置文件由userData/userData.py改为config/config.json,账户检查脚本由userData/check.py移动到check.py

2020/08/07更新

  • 1.增加B站视频上传api
  • 2.增加一个自动转载视频并发布的例子(youtube一键转B站)

2020/08/06更新

  • 1.发现B站app的access_key与漫画app通用,调整了app相关api的结构
  • 2.新增加Article类实现专栏的自动发表,Article.Content类实现B站专栏内容的排版(支持插入B站所有标签)
  • 3.增加两个自动发表B站专栏的例子(1.收集自己动态里的抽奖内容并发表到专栏;2.自动收集P站图片并转载到专栏(此脚本发表的图片通不过B站审核))
  • 4.利用B站专栏的图片上传接口可能能实现把B站当做免费图床?(大雾)?

如果觉得本项目好用,对你有所帮助,欢迎打赏支持一下本项目发展!!!

获得cookies方法

B站操作需要的cookie数据可以按照以下方式获取 浏览器打开B站主页--》按F12打开开发者工具--》application--》cookies

68747470733a2f2f73312e617831782e636f6d2f323032302f30392f32332f776a4d3039652e706e67

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK