command
module
Version:
v0.0.0-...-a2fbdec
Opens a new window with list of versions in this module.
Published: Jun 4, 2019
License: MIT
Opens a new window with license information.
Imports: 6
Opens a new window with list of imports.
Imported by: 0
Opens a new window with list of known importers.
README
¶
新版微助教自动签到
开发环境:
- 语言:Golang:1.12
- 借助展现平台:微信公众号
功能
注:
使用指南
关注公众号:阿楠技术
下图操作手速要快,不然链接出不来的!
坐标拾取:https://lbs.amap.com/console/show/picker
常用经纬度
**注意!**以下经纬度为标准经纬度,但是手机的GPS不是最准的,经过测试,在东十二用手机取得的GPS坐标实际位置为东九那边的驾校。
- 东十二:114.440465,30.517877
- 东九
- A区:114.433653,30.519743
- B区:114.433165,30.519453
- C区:114.432995,30.519014
- D区:114.433286,30.518387
- 西十二
- 北门:114.413702,30.514882
- 南门:114.413811,30.514386
- 东门:114.414505,30.514723
- 西门:114.413069,30.514554
效果如下:
下图需要手动刷新一下页面才能看到效果(实际已签到,但页面没有更新)
原理
签到原理
- 首先自己注册一个微助教教师账号,开启签到
- 打开微助教签到页面,我们能发现签到API如下
- 对整个网页文件搜索 course-id 或者 sign-id,发现如下页面
- 开发签到自动化接口流程如下
Header
注:sign-id 为签到id,下图为微助教教师签到页面
微信后台开发
介绍:微信公众号提供开发者模式,使得用户在微信公众号发送的消息都会被转发到开发者的服务器,开发者可立即回复用户,同时开发者可在48小时内调用客服接口给用户发送其他消息。更多详情请查看微信公众号开发文档。
项目开发技术:
- 使用 MongoDB 持久化存储用户信息
- 使用 Redis 存储临时监控队列,临时状态信息等
- 开发语言:Golang
自动签到原理:
-
定时器
- 每 5s 对监控队列对象进行一次检测
- 检测是否有签到开启,有则进行签到
- 检测是否有讨论开启,有则进行提醒
-
监控队列实现
- 用户输入 openid 时,在 Redis 设置 key/value,存储openid,并设置为两小时过期
- key格式:user:task:$openid, value: openid
- 注:第一个openid为开发者公众号给用户的一个 openid,第二个 openid 为用户输入的微助教的 openid
- 每次检测时,取出 Redis 命名空间 user:task 中的 key,进行相应检测
-
签到数据处理
坐标来源:用户在公众号设置坐标标签时,后台会将坐标存储到 Redis 中,用户签到时从 Redis 中取出。
坐标处理:签到时对坐标进行随机化处理和截断处理,防止坐标惊人的一致,同时与微助教签到数据格式
代码如下:
// 随机化处理,防止一致
coordinate.Lon += float64(rand.Intn(40)-20) * 0.000001
coordinate.Lat += float64(rand.Intn(40)-20) * 0.000001
data.Set("lon", strconv.FormatFloat(coordinate.Lon, 'f', 5, 64)) // 5 表示截断为5位小数
data.Set("lat", strconv.FormatFloat(coordinate.Lat, 'f', 5, 64))
注:图中 5 表示截断为 5 位小树
更多细节请阅读项目源码
注意
Documentation
¶
Package main package is the entry file
Source Files
¶
Directories
¶
Package config default config
|
Package config default config |
|
|
|
|
|
|
|
|
|
|
Click to show internal directories.
Click to hide internal directories.