zoukankan      html  css  js  c++  java
  • 利用.NET 5和Github Action 自动执行米游社原神每日签到福利

    背景

    众所周知,原神的签到福利是需要下载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?

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

    接口返回码参考

    /// <summary>
    /// 判断返回码
    /// </summary>
    /// <returns></returns>
    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抓取

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

     执行结果

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

     

    相关参考

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

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

  • 相关阅读:
    2017.1.10学习笔记
    v-model双向绑定
    指令之v-bind
    v-for列表渲染
    事件修饰符
    v-on
    指令v-text v-html
    vue起步
    Swoole HTTPServer
    SwooleTCP
  • 原文地址:https://www.cnblogs.com/yinghualuowu/p/13996133.html
Copyright © 2011-2022 走看看