分类 PHP 下的文章

新版正方教务系统 期末成绩主动推送至微信

GitHub 项目地址

https://github.com/PrintNow/zhengfang-results-push


zhengfang-results-push

新版正方教务系统 期末成绩主动推送至微信等

配置方法

  1. 配置 functions.php 第10行、16行、21行,里面有详细的注释说明
  2. 配置 config.php 第14行,请看下方的 关于 WxPusher 的使用

关于 WxPusher 的使用

  1. 请前往 http://wxpusher.zjiecode.com/admin/app/list 新建一个应用

    没有注册账号先根据提示注册账号

    除了带有 * 标记的表单需要填写,其它都不需要填。傻瓜式填写,不多讲述

  2. 新建完应用你会获得一个 APP_TOKEN 复制它,将它填到 config.php 第14行
  3. 然后不出意外会弹出一个二维码的模态框(如果没有,点击对应 应用的 关注 即可出现)
    ./img/1.png
  4. 扫码关注公众号(这个二维码可以保存下来)
  5. 然后点击下方的 我的 -> 我的UID 获取UID,格式是 UID_xxxxxxxxx
    ./img/2.png

获取教务系统 JSESSIONID

  1. 打开教务系统
  2. 点击如图

    ./img/3.jpg

  3. 复制 SESSION
    ./img/5.png

使用方法

  1. 首次查询成绩并推送(第一次添加或更新 JSESSIONID 时用这种方法)

    1. 命令行方法,执行 php main.php -U "你的UID" -S "获取的 JSESSIONID"
    2. 网页方法,访问 http://你的域名/main.php?UID=你的UID&JSESSIONID=获取的SESSION
  2. 定时执行监听,因为已经缓存了 JSESSIONID,所以不需要传 JSESSIONID 参数

    我们学校教务系统大概每2分钟执行一次,JSESSIONID 就不会失效,你们的具体情况具体更改、
    1. 命令行方法,执行 php main.php -U "你的UID"
    2. 网页方法,访问 http://你的域名/main.php?UID=你的UID

PHP 使用匿名函数 实现 base64/32/16 加密解密(encode/decode)

base16/32 加密解密 是在网上找的拼凑的
<?php

$encode = [
    16 => function ($str) {
        $encode = '';
        $chars = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'];
        for ($i = 0; $i < strlen($str); $i++) {
            $encode .= $chars[(ord($str[$i]) & 0b11110000) >> 4] . $chars[ord($str[$i]) & 0b00001111];
        }
        return $encode;
    },
    32 => function ($str) {
        $BASE32_ALPHABET = 'abcdefghijklmnopqrstuvwxyz234567';
        $output = '';
        $v = 0;
        $vbits = 0;
        for ($i = 0, $j = strlen($str); $i < $j; $i++) {
            $v <<= 8;
            $v += ord($str[$i]);
            $vbits += 8;
            while ($vbits >= 5) {
                $vbits -= 5;
                $output .= $BASE32_ALPHABET[$v >> $vbits];
                $v &= ((1 << $vbits) - 1);
            }
        }
        if ($vbits > 0) {
            $v <<= (5-$vbits);
            $output .= $BASE32_ALPHABET[$v];
        }
        return $output;
    },
    64 => function ($str) {
        return base64_encode($str);
    },
];
$decode = [
    16 => function ($str) {
        $result = '';
        for ($i = 0; $i < strlen($str) / 2; $i++) {
            $result .= chr(intval(substr($str, $i * 2, 2), 16));
        }
        return $result;
    },
    32 => function ($str) {
        $output = '';
        $v = 0;
        $vbits = 0;
        for($i = 0, $j = strlen($str); $i < $j; $i++) {
            $v <<= 5;
            if ($str[$i] >= 'a' && $str[$i] <= 'z') {
                $v += (ord($str[$i]) - 97);
            }
            elseif ($str[$i] >= '2' && $str[$i] <= '7') {
                $v += (24 + $str[$i]);
            }
            else {
                exit(1);
            }
            $vbits += 5;
            while($vbits >= 8){
                $vbits -= 8;
                $output .= chr($v >> $vbits);
                $v &= ((1 << $vbits) - 1);
            }
        }
        return $output;
    },
    64 => function ($str) {
        return base64_decode($str);
    },
];

var_dump($encode[16]('chuwen'));
var_dump($encode[32]('chuwen'));
var_dump($encode[64]('chuwen'));

echo PHP_EOL;

var_dump($decode[16]($encode[16]('chuwen')));
var_dump($decode[32]($encode[32]('chuwen')));
var_dump($decode[64]($encode[64]('chuwen')));

Ubuntu 编译安装 PHP 8.0-Alpha 过程

apt install libsqlite3-dev

configure: error: Please reinstall the BZip2 distribution

那就去安装

sudo apt-get install libbz2-dev

No package 'libcurl' found

 apt-get install libcurl4-openssl-dev

configure: error: GNU MP Library version 4.2 or greater required.

apt install libgmp-dev

No package 'oniguruma' found

apt install libonig-dev

configure: error: Please reinstall readline - I cannot find readline.h

sudo apt-get install libreadline6-dev 

apt install libsqlite3-dev
apt-get install libbz2-dev
apt-get install libcurl4-openssl-dev
apt install libgmp-dev
apt install libonig-dev
apt-get install libreadline6-dev 

+--------------------------------------------------------------------+
| License:                                                           |
| This software is subject to the PHP License, available in this     |
| distribution in the file LICENSE. By continuing this installation  |
| process, you are bound by the terms of this license agreement.     |
| If you do not agree with the terms of this license, you must abort |
| the installation process at this point.                            |
+--------------------------------------------------------------------+

Thank you for using PHP.

configure: WARNING: unrecognized options: --enable-inline-optimization, --with-libxml-dir, --with-xmlrpc, --with-pcre-regex, --with-pcre-dir, --with-gd, --with-jpeg-dir, --with-png-dir, --with-freetype-dir, --with-onig, --enable-zip, --enable-wddx

PHP 版超星学习通自动签到,支持多用户签到、手势、二维码、位置签到、HTTP API 调用,二次开发便捷!

⭐ ChaoxingSign | 超星学习通签到

PHP 版超星学习用自动签到,支持多用户签到,二次开发便捷!

PHP 7.3 测试通过,理应 PHP 5.4 及以上都能够使用

  • 登录方式:

支持手机号码登录,暂时不支持学号登陆!!!

  • 签到功能:

支持普通签到,手势签到,二维码签到,位置签到,拍照签到

🎨 更新日志


2020/06/13

  • 修复 #2 的问题,配置了 Server酱但不推送的问题
  • 更改 判断时间区间的方法
  • 添加 获取课程列表失败,重试2次以判断是API错误


2020/05/27

  • 修复 #1
  • 更改 获取课程、签到 API
  • 添加 手势、位置、二维码一键签到
  • 添加 Server酱 微信推送,需要配置 config.php 文件


2020/05/25

  • 更改 登录接口,原接口已经失效

🎁 TODO

  • [] 接入钉钉机器人 API

🧀 使用方法

  1. 下载源码:

    直接下载:https://github.com/PrintNow/ChaoxingSign/archive/master.zip

    克隆源码:git clone https://github.com/PrintNow/ChaoxingSign

  2. 🚀 运行

    1. 上传到网站根目录运行

      然后访问 http://你的域名/main.php?account=你的超星账号&password=你的超星密码

    2. 或者使用命令行运行

      php main.php -A "你的超星账号" -P "你的超星密码"
  3. ⚙ 实现自动签到

    推荐大于等于 10 分钟 执行一次,避免出现异常

    我已经硬编仅能在每天的 08:00 ~ 22:00 之间运行,
    如果要取消或修改这一限制,请删除或注释
    main.php 第 7~9 行

    1. 如果以网页方式运行,定时监控 http://你的域名/main.php?account=你的超星账号&password=你的超星密码 即可
    2. 如果使用命令行方式运行,添加 crontab 任务即可,具体添加 crontab 任务 方法可以网上搜。
每天 早上8点到晚上22点之间,每10分钟签到一次 crontab 表达式:`0 */10 8-22 * * * *`

√ 运行输出

签到成功:

正在签到:陈半仙@测试班级
[2020-06-13 11:44:14]签到成功

Server酱 消息推送成功

没有签到任务:

没有待签到的任务

❗ 注意

超星可能屏蔽了如 阿里云、腾讯云、百度云... 等 IDC IP 地址,故有可能出现未知的错误(我没测试,我仅在家庭宽带中测试成功)

🙇‍ 感谢

本项目的实现参考了以下文章
本项目中使用到的 Selector.php 来自 PHPSpider

License

遵循 MIT License 协议

其它版本签到脚本推荐

排名不分先后
项目地址开发语言备注
https://github.com/mkdir700/chaoxing_auto_signPython超星学习通自动签到脚本&多用户多任务&API
https://github.com/Wzb3422/auto-sign-chaoxingTypeScript超星学习通自动签到,梦中刷网课
https://github.com/aihuahua-522/chaoxing-testforAndroidJava学习通(超星)自动签到
https://github.com/yuban10703/chaoxingsignPython超星学习通自动签到
https://github.com/Huangyan0804/AutoCheckinPython学习通自动签到,支持手势,二维码,位置,拍照等

搜题库(so.NowTool.cn), 大学生的好助手 支持超星、智慧树、学习强国 答案搜索

搜题库 #支持超星、智慧树、*学习强国 答案搜索

网址:https://so.nowtool.cn/

主要面向的是大学生、学习强国用户,建议用使用空格分割关键字,查询内容尽量简短(虽然模糊查找准确率很高)。目前题库量在 94855 题,今天更新了学习强国 挑战题库

*学习强国:题库仅包含挑战答题

欢迎反馈不能查找的题目,或提交题库,感谢你的使用!

搜题库 so.NowTool.cn #支持超星、智慧树、*学习强国 答案搜索

蝶恋花 搜索结果 —— 搜题库 so.NowTool.cn

用到的技术 & 优缺点

  • ThinkPHP 框架
  • Bootstrap V3
  • PHP
  • MySQL
  • 专门为搜索进行优化,基本保证模糊搜索准确率高、查找速度快(从九万多条数据中匹配,传统搜索需要耗费一两秒,现在优化后只需要几毫秒至十几毫秒)