用 Go 改写图书馆抢座位脚本,并部署到服务器

关于信图的抢座位大战

上半年的时候,我用 python 写了一个抢座位的脚本,尝试着部署服务器但失败了。

为什么呢?当时我以为是因为利昂做了 ip 限制,只有学校附近的 ip 才能抢。

后来我去无锡实习,发现照样能登录,事情就有点搞笑了。

哪来的 ip 限制呢?

十月份回来后,我直接用 mac 的定时任务完成了抢座位,不过很麻烦,每天 10:45 的时候都要打开电脑。

到了今天,我忍不了了,势必要把这个脚本部署到服务器。

莫名其妙的 python

一开始,我直接把 python 脚本放到服务器上执行,出现了一个 ssl error.

好吧,我把 https 全部改成 http,发现好像本地执行是没问题的。

一部署到服务器,又不行了…

可恶的 python, 我受不了了,直接用 golang 重写。

一写就是一天,还好 golang 编译出来的在服务器上运行得很完美。

终于不用在傻乎乎地每天守在电脑前了…

crontab 定时任务

crontab -l
crontab -e
# 我的脚本
# m h  dom mon dow   command
45 22 * * * /home/whulib >> /home/log
30 11 * * * /home/whulib >> /home/log

用 gomail 发送预约结果

用普通的 qq 邮箱好像不大行,需要使用企业邮箱

package util

import (
    "github.com/go-gomail/gomail"
    "strings"
)

type EmailParam struct {
    // ServerHost 邮箱服务器地址,如腾讯企业邮箱为smtp.exmail.qq.com
    ServerHost string
    // ServerPort 邮箱服务器端口,如腾讯企业邮箱为465
    ServerPort int
    // FromEmail 发件人邮箱地址
    FromEmail string
    // FromPass 发件人邮箱密码(注意,这里是明文形式)
    FromPass string
    // Toes 接收者邮件,如有多个,则以英文逗号(“,”)隔开,不能为空
    Toes string
    // CCers 抄送者邮件,如有多个,则以英文逗号(“,”)隔开,可以为空
    CCers string
    // 主题
    Subject string
    // 正文 text/html
    Body string
}

// SendEmail body支持html格式字符串
func SendEmail(ep *EmailParam) {
    if len(ep.Toes) == 0 {
        return
    }
    var tos []string
    for _, tmp := range strings.Split(ep.Toes, ",") {
        tos = append(tos, strings.TrimSpace(tmp))
    }
    msg := gomail.NewMessage()
    // 收件人可以有多个,故用此方式
    msg.SetHeader("To", tos...)

    //抄送列表
    if len(ep.CCers) != 0 {
        for _, tmp := range strings.Split(ep.CCers, ",") {
            tos = append(tos, strings.TrimSpace(tmp))
        }
        msg.SetHeader("Cc", tos...)
    }

    // 发件人
    // 第三个参数为发件人别名,如"李大锤",可以为空(此时则为邮箱名称)
    msg.SetAddressHeader("From", ep.FromEmail, "bellman")
    // 主题
    msg.SetHeader("Subject", ep.Subject)
    // 正文
    msg.SetBody("text/html", ep.Body)

    d := gomail.NewDialer(ep.ServerHost, ep.ServerPort, ep.FromEmail, ep.FromPass)
    // 发送
    err := d.DialAndSend(msg)
    if err != nil {
        panic(err)
    }
}

   转载规则


《用 Go 改写图书馆抢座位脚本,并部署到服务器》 Bellman 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录