zoukankan      html  css  js  c++  java
  • 【开源】使用.Net Core和GitHub Actions实现哔哩哔哩每日自动签到、投币、领取奖励

    2233

    GitHub Stars

    GitHub Forks

    GitHub Issues

    GitHub Contributors

    GitHub All Releases

    GitHub Release (latest SemVer)

    GitHub License

    BiliBiliTool是一个B站自动执行任务的工具,使用.NET Core编写,通过它可以实现B站帐号的每日自动观看、分享、投币视频,获取经验,每月自动领取会员权益、自动为自己充电等功能,帮助我们轻松升级会员到Lv6并赚取电池

    详细功能目录如下:

    • 每天自动登录,获取经验
    • 每天自动观看、分享、投币视频 (支持指定想要支持的up主,优先选择配置的up主的视频,不配置则随机选取视频)
    • 每天漫画自动签到
    • 每天自动直播签到,领取奖励 (直播可以不看,但是奖励不领白不领~)
    • 每天自动使用直播中心银瓜子兑换B币,避免浪费
    • 每月自动使用快过期的B币券为自己充电 (你懂的~)
    • 每个月自动领取5张B币券和大会员权益 (既然买了会员就要领取该有的奖励啊~)

    运行图示

    Github仓库地址:RayWangQvQ/BiliBiliTool

    本应用仅用于学习和测试,自觉爱护小破站,请勿滥用!

    1.源码

    应用是一个.Net Core的Console程序,在启动时构建了配置、日志和容器。
    配置有三个源,appsettings.json文件、环境变量和命令行参数,命令行参数自己定义了一个mapper用来映射,环境变量主要用于托管在 GitHub Actions 上使用 GitHub Secrets 传入配置。
    日志使用了Serilog,输出端有3个:Console端、Debug端和文件。
    容器用的.Net Core的原生容器,需要扫描注册的地方用了Scrutor做扩展。
    我将程序核心业务放到了领域层:
    Agent用来放BiliBili的Api,使用了Refit将Api映射为强类型的Interface。
    Config用来放配置,大部分存放在了Options里。
    DomainService内聚了我需要的领域服务,比如视频服务、直播中心服务。将这些业务放到领域服务里,其实是故意写成了贫血模型,因为想尽量直接使用Agent里的Dto,而不是自己再去抽象领域对象然后再自己做Map,这里将领域服务抽象出来我觉得就足够了。
    AOP:
    HttpClient添加了一个DelegatingHandler,用来做B站Api的请求切面,记录请求内容和返回内容,过滤异常;
    在AppService层使用Fody做切面,用来记录子任务的日志,需要的时候吞掉异常,以让程序不会因为子任务失败而阻塞。

    代码

    2.如何使用

    BiliBiliTool实现自动任务的原理,是通过调用一系列B站开放的接口实现的。

    举例来说,要实现观看视频的任务,只需要通过调用B站的上传视频观看进度Api即可,
    接口Api:"https://api.bilibili.com/x/click-interface/web/heartbeat",
    入参:视频Id、当前观看时间、用于身份认证的Cookie。

    BiliBiliTool就是收集了一系列这样的接口,通过每日自动运行程序,来实现自动领取奖励、完成每日任务等功能的。

    要使用BiliBiliTool,我们只需要做两步,首先是获取自己的Cookie作为配置信息,然后将配置输入BiliBiliTool程序并运行即可。

    2.1.第一步:获取自己的Cookie

    • 浏览器打开并登录bilibili网站
    • 按 F12 打开“开发者工具”,依次点击 应用程序/Application -> 存储-> Cookies
    • 找到DEDEUSERIDSESSDATAbili_jct三项,复制保存它们到记事本,待会儿会用到。

    获取Cookie图示

    CookieName Value
    DEDEUSERID 从Cookie中获取
    SESSDATA 从Cookie中获取
    BILI_JCT 从Cookie中获取

    2.2.第二步:运行BiliBiliTool

    运行BiliBiliTool有两种方式,一种是通过Github的Actions实现线上的每天自动运行,一种是本地运行或调试。

    对于熟悉Github Actions的朋友,推荐使用方式一 Github Actions,可以实现线上的每天自动运行,不需自己动手,一劳永逸。

    对于没有Github账号的、或者想先尝个鲜快速运行一下看看、或者是开发者想要本地调试的朋友,可以跳转到方式二,操作简单快速。

    2.2.1.运行方式一(推荐):Github Actions每天定时线上自动运行

    Github Actions 是微软巨硬收购G站之后新增的内置CI/CD方案,其核心就是一个可以运行脚本的小型服务器(2核CPU + 7G RAM + 14 G SSD)。

    有了它,我们就可以实现每天定时线上自动运行我们的应用程序。

    设置步骤如下:

    a. 首先fork本项目(RayWangQvQ/BiliBiliTool)到自己的仓库

    b. 进入自己fork的仓库,点击 Settings-> Secrets-> New Secrets 添加以下3个Secrets(DEDEUSERIDSESSDATABILIJCT)。它们将作为应用启动时的命令行参数被传入程序。

    Secrets图示

    c. 开启Actions并触发每日自动执行

    Github Actions默认处于关闭状态,前面都配置好后,请手动开启Actions,执行一次工作流,验证是否可以正常工作。

    Actions图示

    运行结束后,可查看运行日志:

    Actions日志图示
    Actions日志图示

    如果执行出现异常,会收到了GitHub Action的错误邮件通知,请检查Cookies是不是失效了,或者是否有bug。用户主动清除浏览器缓存,会导致BILI_JCTDEDEUSERID失效。

    2.2.2.运行方式二:本地运行

    这里就不多说了,直接clone源码然后vs打开解决方案,配置Cookie后直接运行调试即可。
    只想运行而不需要调试的,去下载Release包也行。

    3.结束

    项目是一个.NetCore的练手项目,所有代码都完全开源在了GitHub上,需要的朋友可以放心使用,不要用来干坏事就行。
    或者如果有什么好的想法,也欢迎到GitHub来为我PR贡献代码。
    相信不久后我们就都是B站Level 6的大佬了,哔哩哔哩乾杯~~

  • 相关阅读:
    MySQL存储过程中的3种循环【转载】
    单元样选择按钮
    JavaScript(jQuery)实现打印英文格式日期
    哈希算法
    Hello,Expression Blend 4 (含Demo教程和源码)
    Cocos2Dx for XNA类解析(2): CCDirector(上)
    github for Windows使用介绍
    Hello,Behavior
    Vue component+vuedraggable拖拽动态表单
    Vue Component
  • 原文地址:https://www.cnblogs.com/RayWang/p/13909784.html
Copyright © 2011-2022 走看看