GLaDOS自动签到脚本及微信提醒服务

一、GLaDOS自动签到脚本

为什么要GLaDOS自动签到脚本?
GLaDOS作为一个老牌出国学习网站,每天签到可以延长一天的使用时长(现仅限付费套餐参加),理论上只要保持每天签到就可以无限白嫖,所以本文介绍一种GLaDOS签到的脚本以及微信自动推送签到信息的解决方案。

GLaDOS注册地址:https://glados.rocks/
如果上面的网址失效,可以在 https://github.com/glados-network/GLaDOS 看到实时更新的网址
填写邀请码: J9QSA-PWB02-N35F4-E97VF 可以免费获得3天试用时长
如果你有教育邮箱,可以拉到页面底部点击’Education Plan’申请教育计划免费获得360天时长

下面是用于GLaDOS签到的python脚本,可以放在宝塔的计划任务中每天执行一遍。

# -*- coding: utf8 -*-
import json
import requests
import time
# 填入glados账号对应cookie,可添加多个按{'账号名1':'cookie1','账号名2':'cookie2'}
#cookie可以在'我的账号'界面按F12并刷新,在account里可以看到
cookies = {'账号名':'cookie'}
useragent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.74 Safari/537.36"
origin = "https://glados.rocks"
url = "https://glados.rocks/api/user/checkin"
url2 = "https://glados.rocks/api/user/status"
referer = "https://glados.rocks/console/checkin"
message_end = time.strftime('---%Y-%m-%d---%%0D%%0A',time.localtime(int(round(time.time()*1000))/1000))

def start(account, cookie):
    payload = {'token': 'glados.network'}
    headers = {'cookie': cookie, 'referer': referer, 'origin': origin, 'user-agent': useragent}
    checkin = requests.post(url, headers={**headers, 'content-type': 'application/json;charset=UTF-8'}, data=json.dumps(payload))
    state = requests.get(url2, headers=headers)
    try:
        if 'message' in checkin.text:
            mess = checkin.json()['message']
            time = state.json()['data']['leftDays'].split('.')[0]
            message_c = u'账号:' + account + u'%0D%0A签到情况:' + mess + ',you have ' + time + ' days left%0D%0A'
            return message_c
        else:
            message_c = u'账号:' + account + u'%0D%0A签到情况:cookie过期%0D%0A'
            return message_c
    except:
        message_c = u'账号:' + account + u'%0D%0A签到情况:cookie错误%0D%0A'
        return message_c

if __name__ == '__main__':
    for account_name in cookies:
        message_end += start(account_name, cookies[account_name])
    requests.get('https://微信推送服务器地址/?text=' + message_end + '&touser=用户名')

二、企业微信推送服务

1.代码

下面是一个基于PHP的企业微信推送服务脚本,源码改自github的easychen/wecomchan项目,在源码的基础上删除了用于校验的sendkey并添加了发送给指定用户和一些错误提示的功能。

<?php
// config
// ======================================

//只需填写企业微信ID、应用Secret、应用AgentId,redis服务主要用来存储access_token,如果是个人低频率使用可以不开启(企业微信token一天的请求次数为2000次)
define('WECOM_CID', '企业微信ID');
define('WECOM_SECRET', '应用Secret');
define('WECOM_AID', '应用AgentId');

// 以下配置需要有 redis 服务和 phpredis 扩展
define('REDIS_ON', false);
define('REDIS_HOST', '127.0.0.1');
define('REDIS_PORT', '6379');
define('REDIS_EXPIRED', '7000');
define('REDIS_KEY', 'wecom_access_token');

// code
// ======================================
header("Content-Type: application/json; charset=UTF-8");

if (strlen(@$_REQUEST['text']) < 1 || strlen(@$_REQUEST['touser']) < 1)
{
    die('发送失败,请检查是否有以下错误:' . PHP_EOL . '1.格式错误' . PHP_EOL . '2.内容不能为空' . PHP_EOL . '3.没有填写发送用户' );
}

echo send_to_wecom(@$_REQUEST['text'], WECOM_CID, WECOM_SECRET, WECOM_AID, @$_REQUEST['touser']);

function redis()
{
    if (!isset($GLOBALS['REDIS_INSTANCE']) || !$GLOBALS['REDIS_INSTANCE']) {
        $GLOBALS['REDIS_INSTANCE'] = new Redis();
        $GLOBALS['REDIS_INSTANCE']->connect(REDIS_HOST, REDIS_PORT);
    }

    return $GLOBALS['REDIS_INSTANCE'];
}

function send_to_wecom($text, $wecom_cid, $wecom_secret, $wecom_aid, $wecom_touid)
{
    $access_token = false;
    // 如果启用redis作为缓存
    if (REDIS_ON) {
        $access_token = redis()->get(REDIS_KEY);
    }
    if (!$access_token) {
        $info = @json_decode(file_get_contents("https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=" . urlencode($wecom_cid) . "&corpsecret=" . urlencode($wecom_secret)), true);

        if ($info && isset($info['access_token']) && strlen($info['access_token']) > 0) {
            $access_token = $info['access_token'];
        }
    }

    if ($access_token) {
        $url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' . urlencode($access_token);
        $data = new \stdClass();
        $data->touser = $wecom_touid;
        $data->agentid = $wecom_aid;
        $data->msgtype = "text";
        $data->text = ["content" => $text];
        $data->duplicate_check_interval = 600;

        $data_json = json_encode($data);
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        @curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_TIMEOUT, 5);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data_json);

        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

        $response = curl_exec($ch);
        if ($response !== false && REDIS_ON) {
            redis()->set(REDIS_KEY, $access_token, ['nx', 'ex' => REDIS_EXPIRED]);
        }

        $end = @json_decode($response, true);
        if ($end['errcode'] !== 0) {
            if ($end['errcode'] == '81013') {
                die('用户不存在请联系管理员');
            }
            die('错误代码:' . $end['errcode'] . PHP_EOL . '错误信息:' . explode(',', $end['errmsg'])[0] . PHP_EOL . '更多信息请访问:https://open.work.weixin.qq.com/devtool/query');
        }

        return '发送成功';
    }

    return false;
}

2.部署方式

由于的基于PHP的项目,所以部署方法非常简单只需将上面的代码复制到一个新建立的网站主页文件中,然后按照“https://微信推送服务网站地址/?text=你要发送的消息内容&touser=企业微信接受者的用户名”,在任意脚本中请求这个链接就可以

几点发送技巧:
(1)非POST请求中:发送的消息中需要换行用%0D%0A
(2)消息中的超链接用<a href=”网址”>网页名</a>的格式表示
(3)多个接收者用“|”间隔,全体发送用@all
(4)更多细节了解官方文档:企业微信api调用说明

更新日志

【2022.5.11】GLaDOS checkin 接口 request payload 中的 token 由 “glados_network” 更改为 “glados.network”
【2022.9.24】GLaDOS 关闭免费套餐签到获得天数的资格,付费套餐(Basic/Pro plan)仍可以签到获取天数奖励

上一篇
下一篇