背景

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

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

项目链接

https://github.com/yinghualuowu/GenshinDailyHelper

签到逻辑

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

  1. 绑定角色(获取角色信息)
  2. 查询是否签到
  3. 执行签到

获取角色接口

binding/api/getUserGameRolesByCookie?

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

查询签到情况

event/bbs_sign_reward/info?

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

执行签到

event/bbs_sign_reward/sign?

注意:执行签到需要带上x-rpc-device_id,不然会提示请到APP进行签到

接口返回码参考

/// <summary>
/// 判断返回码并延迟
/// </summary>
/// <returns></returns>
public virtual string CheckOutCodeAndSleep()
{
Random ran = new Random();
int randKey = ran.Next(500, 2000);
Thread.Sleep(randKey);
// -1还是-100表示登录失败
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抓取

  1. 通过浏览器登录米哈游论坛 https://bbs.mihoyo.com/ys/
  2. F12,打开开发者工具 -> Network 点击进入
  3. 刷新网页,找到以下的位置,复制Cookie后放在记事本或其它可以保存的地方

代码实现

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

/// <summary>
/// 对外做出请求
/// </summary>
/// <param name="uri">请求接口</param>
/// <param name="method">请求方式</param>
/// <param name="content">请求数据实体</param>
/// <returns>返回实体对象<see cref="T"/></returns>
private async Task<T> ExecuteRequest<T>(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<T>(rawResult); return result;
}

利用.NET 5和Github Action 自动执行米游社原神每日签到福利的更多相关文章

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

    GenshinDailyHelper 原神的签到福利是需要单独下载APP进行才可以领取,并且每天需要打卡,虽然奖励并不是很可观,但有一些摩拉,食材和可观的经验书累计起来还是挺有吸引力的.可能本身不怎么 ...

  2. 利用腾讯云函数部署.Net 5米游社原神每日签到功能

    自从GitHub批量禁止滥用Action功能后,项目不得不考虑另外方案执行应用.其中腾讯云函数被大家作为不错的选择(虽然马上也要收费了). 但对于.Net的部署目前资源很少,而且我也没学过bash.在 ...

  3. 使用Github Action自动填写疫情通

    使用Github Action自动填写疫情通 西电晨午晚检一天三次,通过企业号功能进行填写.实际上,西电企业号大部分功能是以网页模式工作的,通过构造connection发送合适的request,设置计 ...

  4. hexo配合github action 自动构建(多种形式)

    已经使用HEXO正常构建GitHub页面 根据github action 给hexo配置自动部署github page 前往墨抒颖的个人网站查看纯净版 1. 为仓库设置访问密钥 第一步先生成密钥,打开 ...

  5. 利用spring实现服务启动就自动执行某些操作的2种方式

    第一种方式,用bean的init-method属性 <bean class="com.emax.paycenter.log.LogBridge" init-method=&q ...

  6. 5 分钟教你快速掌握 GitHub Actions 自动部署博客

    自从 GitHub 宣布 GitHub Actions 在平台上对所有开发人员和存储库可用以来,GitHub Actions 越来越受欢迎.很多第三方平台在生态系统中有速度等限制,将进一步推动开发人员 ...

  7. github action 实现CI/CD

    两种github action 打包.Net Core 项目docker镜像推送到阿里云镜像仓库 1.GitHub Actions 是什么? 大家知道,持续集成由很多操作组成,比如抓取代码.运行测试. ...

  8. 利用Github Action实现Tornadofx/JavaFx打包

    原文地址: 利用Github Action实现Tornadofx/JavaFx打包 - Stars-One的杂货小窝 最近开了个新项目,主要是个工具软件,也算个人的自娱自乐吧,也算开源的一部分,想着都 ...

  9. 利用 Github Actions 自动更新 docfx 文档

    利用 Github Actions 自动更新 docfx 文档 Intro docfx 是微软出品一个 .NET API 文档框架,有一个理念是代码即文档,会根据项目代码自动生成 API 文档,即使没 ...

随机推荐

  1. 以太坊PoW

    ethash ethash(eth+hash)是以太坊设计的挖矿算法,为了实现ASIC-resistance,ethash依赖于对内存资源的访问,是一种memory-hard函数.同时为了支持轻节点对 ...

  2. PHP之Trait详解 转

    php从以前到现在一直都是单继承的语言,无法同时从两个基类中继承属性和方法,为了解决这个问题,php出了Trait这个特性 用法:通过在类中使用use 关键字,声明要组合的Trait名称,具体的Tra ...

  3. spring boot:使接口返回统一的RESTful格式数据(spring boot 2.3.1)

    一,为什么要使用REST? 1,什么是REST? REST是软件架构的规范体系,它把资源的状态用URL进行资源定位, 以HTTP动作(GET/POST/DELETE/PUT)描述操作 2,REST的优 ...

  4. virtualbox 网络地址转换(NAT)

    网络地址转换 虚拟机可以访问主机 通过主机请求外网 但是主机不能请求虚拟机 所以要配置端口转发才行 host-only模式下 不同网段的不同虚拟机也可以互相ping通  比如 192.168.33.1 ...

  5. 手撸ORM浅谈ORM框架之Add篇

    快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...

  6. Java安全之Commons Collections2分析

    Java安全之Commons Collections2分析 首发:Java安全之Commons Collections2分析 0x00 前言 前面分析了CC1的利用链,但是发现在CC1的利用链中是有版 ...

  7. JAVA递归实现线索化二叉树

    JAVA递归实现线索化二叉树 基础理论 首先,二叉树递归遍历分为先序遍历.中序遍历和后序遍历. 先序遍历为:根节点+左子树+右子树 中序遍历为:左子树+根节点+右子树 后序遍历为:左子树+右子树+根节 ...

  8. .gdbinit文件配置

    .gdbinit文件配置 #打印数组的索引下标 set print array-indexes on #每行打印一个结构体成员 set print pretty on #除了断点有关的线程会被停下来, ...

  9. Redis 入门与 ASP.NET Core 缓存

    目录 基础 Redis 库 连接 Redis 能用 redis 干啥 Redis 数据库存储 字符串 订阅发布 RedisValue ASP.NET Core 缓存与分布式缓存 内存中的缓存 ASP. ...

  10. docker是个啥?

    docker 第一问:什么是容器 容器就是在一个隔离的环境中运行的一个进程.注意关键词,隔离和进程.如果进程停止,那么容器就销毁.因为具有隔离的特点,所以每个容器都拥有自己的文件系统:包括IP地址.主 ...