利用.NET 5和Github Action 自动执行米游社原神每日签到福利 您所在的位置:网站首页 github每日执行 利用.NET 5和Github Action 自动执行米游社原神每日签到福利

利用.NET 5和Github Action 自动执行米游社原神每日签到福利

2023-08-22 17:00| 来源: 网络整理| 查看: 265

背景

众所周知,原神的签到福利是需要下载app才可以领取的。但像我这种一般不怎么刷论坛的人,每天点开app签到很麻烦。

很多大佬利用Github的Action自动执行的模式,实现了很多好东西。加上.net 5平台刚刚发布,因此才有这个项目

项目链接

https://github.com/yinghualuowu/GenshinDailyToolshttps://github.com/yinghualuowu/GenshinDailyHelper.Docs

签到逻辑

根据米游社的抓包记录,签到逻辑如下

绑定角色(获取角色信息) 查询是否签到 执行签到 获取角色接口 binding/api/getUserGameRolesByCookie?

这个接口将返回账户角色信息,重要的有角色区域,角色 uid,角色昵称,角色等级

查询签到情况 event/bbs_sign_reward/info?

如果已经签到则不执行签到,虽然允许重复签到。

执行签到 event/bbs_sign_reward/sign?

注意:执行签到需要带上额外的请求头部,这里不做介绍,可以在上面或者最下面的链接有源码

接口返回码参考 /// /// 判断返回码 /// /// public virtual string CheckOutCode() { Task.Delay(3 * 1000).Wait(); switch (Retcode) { case 0:return "执行成功"; case -5003:return "已经签到"; default:throw new GenShinException($"请求异常{Message}"); } } Action执行逻辑

在.github/workflows中,主要配置了有

name: genshenDailyChekin on: push: branches: [ master ] pull_request: branches: [ master ] workflow_dispatch: # 手动触发 schedule: # 计划任务触发 - cron: '10 16 * * *' # cron表达式,Actions时区是UTC时间,所以要往前推8个小时,如上表示每天0点10分 jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 # 设置服务器时区为东八区 - name: Set time zone run: sudo timedatectl set-timezone 'Asia/Shanghai' - name: Setup .NET Core uses: actions/setup-dotnet@v1 with: dotnet-version: 5.0.100 - name: Install dependencies run: dotnet restore - name: Build run: dotnet build --configuration Release --no-restore - name: Run env: Cookie: ${{secrets.Cookie}} run: dotnet run -p ./GenshinDailyHelper ${Cookie} Cookie抓取 通过浏览器登录米哈游论坛 https://bbs.mihoyo.com/ys/ 按F12,打开开发者工具 -> Network 点击进入 刷新网页,找到以下的位置,复制Cookie后放在记事本或其它可以保存的地方 Cookie所在位置 代码实现

代码主要由HttpClient进行请求,实现较为简单。并没有有意处理异常。

/// /// 对外做出请求 /// /// 请求接口 /// 请求方式 /// 请求数据实体 /// 返回实体对象 private async Task ExecuteRequest(Uri uri, HttpMethod method, HttpContent content = null) { using var requestMessage = BuildHttpRequestMessage(uri, method, content); var response = await Client.SendAsync(requestMessage); var rawResult = await response.Content.ReadAsStringAsync(); var result = JsonConvert.DeserializeObject(rawResult); return result; }  执行结果

由于功能简单,输出的日志结果也尽量的直观,为了确保Cookie失效能第一时间通知到我,因此任何异常都会被抛出并构建失败。

 

  相关参考

https://github.com/y1ndan/genshin-impact-helper 

该项目支持多号签到,但各位旅行者爱惜羊角包,不要滥用>3


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有