Browse Source

自动化抢购支持,无需设置抢购时间

main
pppscn 3 years ago
parent
commit
b783ba8524
  1. 4
      README.md
  2. 34
      cmd/seckill.go
  3. 6
      common/lib.go
  4. 9
      common/var.go
  5. 4
      conf.ini

4
README.md

@ -26,8 +26,6 @@ go get github.com/ztino/jd_seckill
## 待办
- 日志目前还未输出到本地日志文件保存
- 自动化抢购支持,无需设置抢购时间
- 跨平台桌面端支持,打算使用:https://github.com/therecipe/qt
## 使用
@ -114,7 +112,7 @@ $ zbarimg qr_code.png > qrcode.txt && qrencode -r qrcode.txt -o - -t UTF8 # 解
## 抢购流程/抢购结果
- 程序开始抢购总时间为两分钟,不管有无抢购成功,都会停止,抢购详情请查阅日志和自己配置的第三方推送服务
- 程序开始抢购总时间为两分钟,不管有无抢购成功,都会停止,抢购详情请查阅日志和自己配置的第三方推送服务(目前支持:钉钉机器人、SMTP邮件、Server酱)
- 第二天抢购需要修改抢购时间和重新开始抢购任务。

34
cmd/seckill.go

@ -35,21 +35,31 @@ func startSeckill(cmd *cobra.Command, args []string) {
user:=jd_seckill.NewUser(common.Client,common.Config)
go KeepSession(user)
//计算抢购时间
nowLocalTime:=time.Now().UnixNano()/1e6
jdTime,_:=GetJdTime()
buyDate:=common.Config.MustValue("config","buy_time","")
loc, _ := time.LoadLocation("Local")
t,_:=time.ParseInLocation("2006-01-02 15:04:05",buyDate,loc)
buyTime:=t.UnixNano()/1e6
diffTime:=nowLocalTime-jdTime
log.Println(fmt.Sprintf("正在等待到达设定时间:%s,检测本地时间与京东服务器时间误差为【%d】毫秒",buyDate,diffTime))
timerTime:=(buyTime+diffTime)-jdTime
if timerTime<=0 {
log.Println("请设置抢购时间")
startTime, err := common.Hour2Unix(common.Config.MustValue("config", "buy_time", "09:59:59"))
if err != nil {
log.Fatal("抢购开始时间初始化失败,请检查时间格式", err)
}
if startTime.Unix() < time.Now().Unix() {
startTime = startTime.AddDate(0, 0, 1)
}
log.Println("抢购开始时间:", startTime)
localTime := time.Now().UnixNano() / 1e6
log.Println("本地系统时间:", localTime)
jdTime, _ := GetJdTime()
log.Println("京东云端时间:", jdTime)
diffTime := localTime - jdTime
log.Println(fmt.Sprintf("本地时间与京东服务器时间误差为【%d】毫秒", diffTime))
buyTime := startTime.UnixNano() / 1e6
timerTime := (buyTime + diffTime) - jdTime
if timerTime <= 0 {
log.Println("请设置抢购开始时间,或直接清空")
os.Exit(0)
}
//等待抢购
time.Sleep(time.Duration(timerTime)*time.Millisecond)
log.Println("等待抢购中……")
time.Sleep(time.Duration(timerTime) * time.Millisecond)
//开始抢购
log.Println("时间到达,开始执行……")
seckill:=jd_seckill.NewSeckill(common.Client,common.Config)

6
common/lib.go

@ -108,4 +108,8 @@ func OpenImage(file string) {
_=cmd.Start()
}
}
}
}
func Hour2Unix(hour string) (time.Time, error) {
return time.ParseInLocation(DateTimeFormatStr, time.Now().Format(DateFormatStr) + " " + hour, time.Local)
}

9
common/var.go

@ -5,9 +5,12 @@ import (
"github.com/unknwon/goconfig"
)
const SoftName = "jd_seckill"
const Version = "0.1.7"
const (
SoftName = "jd_seckill"
Version = "0.1.7"
DateTimeFormatStr = "2006-01-02 15:04:05"
DateFormatStr = "2006-01-02"
)
var Client *httpc.HttpClient

4
conf.ini

@ -12,8 +12,8 @@ test_sku_id = 100016034372
sku_id = 100012043978
# 抢购数量
seckill_num = 2
# 抢购开始时间设定 2021-01-01 09:59:59
buy_time = 2021-01-01 09:59:59
# 抢购开始时间设定,格式:09:59:59,如果小于当前时间,则表示明天这个时间点开始;大于当前时间,则为今天。
buy_time = 09:59:59
# 抢购总时间,单位:分钟,默认两分钟
seckill_time =
# 抢购任务数量,默认5个

Loading…
Cancel
Save