817 lines
30 KiB
Go
817 lines
30 KiB
Go
package models
|
||
|
||
import (
|
||
"encoding/json"
|
||
"fmt"
|
||
"net/url"
|
||
"regexp"
|
||
"strconv"
|
||
"strings"
|
||
"time"
|
||
|
||
"github.com/beego/beego/v2/client/httplib"
|
||
"github.com/buger/jsonparser"
|
||
)
|
||
|
||
type Asset struct {
|
||
Nickname string
|
||
Bean struct {
|
||
Total int
|
||
TodayIn int
|
||
TodayOut int
|
||
YestodayIn int
|
||
YestodayOut int
|
||
ToExpire []int
|
||
}
|
||
RedPacket struct {
|
||
Total float64
|
||
ToExpire float64
|
||
ToExpireJd float64
|
||
ToExpireJx float64
|
||
ToExpireJs float64
|
||
ToExpireJk float64
|
||
Jd float64
|
||
Jx float64
|
||
Js float64
|
||
Jk float64
|
||
}
|
||
Other struct {
|
||
JsCoin float64
|
||
NcStatus float64
|
||
McStatus float64
|
||
}
|
||
}
|
||
|
||
var Int = func(s string) int {
|
||
i, _ := strconv.Atoi(s)
|
||
return i
|
||
}
|
||
|
||
var Float64 = func(s string) float64 {
|
||
i, _ := strconv.ParseFloat(s, 64)
|
||
return i
|
||
}
|
||
|
||
func DailyAssetsPush() {
|
||
for _, ck := range GetJdCookies() {
|
||
if (ck.QQ != 0 && Config.QQID != 0 && SendQQ != nil) || ck.PushPlus != "" {
|
||
msg := ck.Query()
|
||
if ck.QQ != 0 && Config.QQID != 0 && SendQQ != nil {
|
||
SendQQ(int64(ck.QQ), msg)
|
||
}
|
||
if ck.PushPlus != "" {
|
||
pushPlus(ck.PushPlus, msg)
|
||
}
|
||
}
|
||
}
|
||
}
|
||
func (ck *JdCookie) Query1() string {
|
||
name:="jd_bean_change_new.js"
|
||
envs:=[]Env{{Name:"pins",Value:"&"+ck.PtPin}}
|
||
msg:=runTask(&Task{Path:name,Envs:envs},&Sender{})
|
||
//log.Info(msg)
|
||
if !strings.Contains(msg,"cookies"){
|
||
msg=regexp.MustCompile(`^(.+\s+){3}|\s*.+\s*$|.*东东工厂.*\s*`).ReplaceAllString(msg,"")
|
||
msg=fmt.Sprintf("账号昵称:%s\n绑定QQ: %v\n用户等级:%v\n等级名称:%v\n更新时间: %s\n%s",ck.Nickname,ck.QQ,ck.UserLevel,ck.LevelName,ck.CreateAt,msg)
|
||
}else if CookieOK(ck){
|
||
msg=fmt.Sprintf("查询失败\n账号: %s\n备注: %s\n%s",ck.PtPin,ck.Note,msg)
|
||
}else{
|
||
msg=fmt.Sprintf("失效账号\n账号: %s\n备注: %s",ck.PtPin,ck.Note)
|
||
}
|
||
return msg
|
||
}
|
||
|
||
func (ck *JdCookie) Query() string {
|
||
msgs := []string{
|
||
fmt.Sprintf("账号昵称:%s", ck.Nickname),
|
||
}
|
||
if ck.Note != "" {
|
||
msgs = append(msgs, fmt.Sprintf("账号备注:%s", ck.Note))
|
||
}
|
||
asset := Asset{}
|
||
if CookieOK(ck) {
|
||
msgs = append(msgs, fmt.Sprintf("绑定QQ:%v", ck.QQ))
|
||
msgs = append(msgs, fmt.Sprintf("用户等级:%v", ck.UserLevel))
|
||
msgs = append(msgs, fmt.Sprintf("等级名称:%v", ck.LevelName))
|
||
cookie := fmt.Sprintf("pt_key=%s;pt_pin=%s;", ck.PtKey, ck.PtPin)
|
||
var rpc = make(chan []RedList)
|
||
var fruit = make(chan string)
|
||
var pet = make(chan string)
|
||
var gold = make(chan int64)
|
||
var egg = make(chan int64)
|
||
var tyt = make(chan string)
|
||
var mmc = make(chan int64)
|
||
var zjb = make(chan int64)
|
||
go redPacket(cookie, rpc)
|
||
go initFarm(cookie, fruit)
|
||
go initPetTown(cookie, pet)
|
||
go jsGold(cookie, gold)
|
||
go jxncEgg(cookie, egg)
|
||
go tytCoupon(cookie, tyt)
|
||
go mmCoin(cookie, mmc)
|
||
go jdzz(cookie, zjb)
|
||
today := time.Now().Local().Format("2006-01-02")
|
||
yestoday := time.Now().Local().Add(-time.Hour * 24).Format("2006-01-02")
|
||
page := 1
|
||
end := false
|
||
for {
|
||
if end {
|
||
msgs = append(msgs, []string{
|
||
fmt.Sprintf("昨日收入:%d京豆", asset.Bean.YestodayIn),
|
||
fmt.Sprintf("昨日支出:%d京豆", asset.Bean.YestodayOut),
|
||
fmt.Sprintf("今日收入:%d京豆", asset.Bean.TodayIn),
|
||
fmt.Sprintf("今日支出:%d京豆", asset.Bean.TodayOut),
|
||
}...)
|
||
break
|
||
}
|
||
bds := getJingBeanBalanceDetail(page, cookie)
|
||
if bds == nil {
|
||
end = true
|
||
msgs = append(msgs, "京豆数据异常")
|
||
break
|
||
}
|
||
for _, bd := range bds {
|
||
amount := Int(bd.Amount)
|
||
if strings.Contains(bd.Date, today) {
|
||
if amount > 0 {
|
||
asset.Bean.TodayIn += amount
|
||
} else {
|
||
asset.Bean.TodayOut += -amount
|
||
}
|
||
} else if strings.Contains(bd.Date, yestoday) {
|
||
if amount > 0 {
|
||
asset.Bean.YestodayIn += amount
|
||
} else {
|
||
asset.Bean.YestodayOut += -amount
|
||
}
|
||
} else {
|
||
end = true
|
||
break
|
||
}
|
||
}
|
||
page++
|
||
}
|
||
msgs = append(msgs, fmt.Sprintf("当前京豆:%v京豆", ck.BeanNum))
|
||
ysd := int(time.Now().Add(24 * time.Hour).Unix())
|
||
if rps := <-rpc; len(rps) != 0 {
|
||
for _, rp := range rps {
|
||
b := Float64(rp.Balance)
|
||
asset.RedPacket.Total += b
|
||
if strings.Contains(rp.ActivityName, "京喜") || strings.Contains(rp.OrgLimitStr, "京喜") {
|
||
asset.RedPacket.Jx += b
|
||
if ysd >= rp.EndTime {
|
||
asset.RedPacket.ToExpireJx += b
|
||
asset.RedPacket.ToExpire += b
|
||
}
|
||
} else if strings.Contains(rp.ActivityName, "极速版") {
|
||
asset.RedPacket.Js += b
|
||
if ysd >= rp.EndTime {
|
||
asset.RedPacket.ToExpireJs += b
|
||
asset.RedPacket.ToExpire += b
|
||
}
|
||
|
||
} else if strings.Contains(rp.ActivityName, "京东健康") {
|
||
asset.RedPacket.Jk += b
|
||
if ysd >= rp.EndTime {
|
||
asset.RedPacket.ToExpireJk += b
|
||
asset.RedPacket.ToExpire += b
|
||
}
|
||
} else {
|
||
asset.RedPacket.Jd += b
|
||
if ysd >= rp.EndTime {
|
||
asset.RedPacket.ToExpireJd += b
|
||
asset.RedPacket.ToExpire += b
|
||
}
|
||
}
|
||
}
|
||
e := func(m float64) string {
|
||
if m > 0 {
|
||
return fmt.Sprintf(`(今日过期%.2f)`, m)
|
||
}
|
||
return ""
|
||
}
|
||
msgs = append(msgs, []string{
|
||
fmt.Sprintf("所有红包:%.2f%s元🧧", asset.RedPacket.Total, e(asset.RedPacket.ToExpire)),
|
||
fmt.Sprintf("京喜红包:%.2f%s元", asset.RedPacket.Jx, e(asset.RedPacket.ToExpireJx)),
|
||
fmt.Sprintf("极速红包:%.2f%s元", asset.RedPacket.Js, e(asset.RedPacket.ToExpireJs)),
|
||
fmt.Sprintf("健康红包:%.2f%s元", asset.RedPacket.Jk, e(asset.RedPacket.ToExpireJk)),
|
||
fmt.Sprintf("京东红包:%.2f%s元", asset.RedPacket.Jd, e(asset.RedPacket.ToExpireJd)),
|
||
}...)
|
||
} else {
|
||
msgs = append(msgs, "暂无红包数据🧧")
|
||
}
|
||
msgs = append(msgs, fmt.Sprintf("东东农场:%s", <-fruit))
|
||
msgs = append(msgs, fmt.Sprintf("东东萌宠:%s", <-pet))
|
||
gn := <-gold
|
||
msgs = append(msgs, fmt.Sprintf("极速金币:%d(≈%.2f元)💰", gn, float64(gn)/10000))
|
||
zjbn := <-zjb
|
||
if zjbn != 0 {
|
||
msgs = append(msgs, fmt.Sprintf("京东赚赚:%d金币(≈%.2f元)💰", zjbn, float64(zjbn)/10000))
|
||
} else {
|
||
msgs = append(msgs, fmt.Sprintf("京东赚赚:暂无数据"))
|
||
}
|
||
mmcCoin := <-mmc
|
||
if mmcCoin != 0 {
|
||
msgs = append(msgs, fmt.Sprintf("京东秒杀:%d秒秒币(≈%.2f元)💰", mmcCoin, float64(mmcCoin)/1000))
|
||
} else {
|
||
msgs = append(msgs, fmt.Sprintf("京东秒杀:暂无数据"))
|
||
}
|
||
msgs = append(msgs, fmt.Sprintf("推一推券:%s", <-tyt))
|
||
msgs = append(msgs, fmt.Sprintf("惊喜牧场:%d枚鸡蛋🥚", <-egg))
|
||
|
||
} else {
|
||
msgs = append(msgs, []string{
|
||
"提醒:该账号已过期,请重新登录",
|
||
}...)
|
||
}
|
||
ck.PtPin, _ = url.QueryUnescape(ck.PtPin)
|
||
return strings.Join(msgs, "\n")
|
||
}
|
||
|
||
type BeanDetail struct {
|
||
Date string `json:"date"`
|
||
Amount string `json:"amount"`
|
||
EventMassage string `json:"eventMassage"`
|
||
}
|
||
|
||
func getJingBeanBalanceDetail(page int, cookie string) []BeanDetail {
|
||
type AutoGenerated struct {
|
||
Code string `json:"code"`
|
||
DetailList []BeanDetail `json:"detailList"`
|
||
}
|
||
a := AutoGenerated{}
|
||
req := httplib.Post(`https://api.m.jd.com/client.action?functionId=getJingBeanBalanceDetail`)
|
||
req.Header("User-Agent", ua)
|
||
req.Header("Host", "api.m.jd.com")
|
||
req.Header("Content-Type", "application/x-www-form-urlencoded")
|
||
req.Header("Cookie", cookie)
|
||
req.Body(fmt.Sprintf(`body={"pageSize": "20", "page": "%d"}&appid=ld`, page))
|
||
data, err := req.Bytes()
|
||
if err != nil {
|
||
return nil
|
||
}
|
||
json.Unmarshal(data, &a)
|
||
return a.DetailList
|
||
}
|
||
|
||
type RedList struct {
|
||
ActivityName string `json:"activityName"`
|
||
Balance string `json:"balance"`
|
||
BeginTime int `json:"beginTime"`
|
||
DelayRemark string `json:"delayRemark"`
|
||
Discount string `json:"discount"`
|
||
EndTime int `json:"endTime"`
|
||
HbID string `json:"hbId"`
|
||
HbState int `json:"hbState"`
|
||
IsDelay bool `json:"isDelay"`
|
||
OrgLimitStr string `json:"orgLimitStr"`
|
||
}
|
||
|
||
func redPacket(cookie string, rpc chan []RedList) {
|
||
type UseRedInfo struct {
|
||
Count int `json:"count"`
|
||
RedList []RedList `json:"redList"`
|
||
}
|
||
type Data struct {
|
||
AvaiCount int `json:"avaiCount"`
|
||
Balance string `json:"balance"`
|
||
CountdownTime string `json:"countdownTime"`
|
||
ExpiredBalance string `json:"expiredBalance"`
|
||
ServerCurrTime int `json:"serverCurrTime"`
|
||
UseRedInfo UseRedInfo `json:"useRedInfo"`
|
||
}
|
||
type AutoGenerated struct {
|
||
Data Data `json:"data"`
|
||
Errcode int `json:"errcode"`
|
||
Msg string `json:"msg"`
|
||
}
|
||
a := AutoGenerated{}
|
||
req := httplib.Get(`https://m.jingxi.com/user/info/QueryUserRedEnvelopesV2?type=1&orgFlag=JD_PinGou_New&page=1&cashRedType=1&redBalanceFlag=1&channel=1&_=` + fmt.Sprint(time.Now().Unix()) + `&sceneval=2&g_login_type=1&g_ty=ls`)
|
||
req.Header("User-Agent", ua)
|
||
req.Header("Host", "m.jingxi.com")
|
||
req.Header("Accept", "*/*")
|
||
req.Header("Connection", "keep-alive")
|
||
req.Header("Accept-Language", "zh-cn")
|
||
req.Header("Accept-Encoding", "gzip, deflate, br")
|
||
req.Header("Referer", "https://st.jingxi.com/my/redpacket.shtml?newPg=App")
|
||
req.Header("Cookie", cookie)
|
||
data, _ := req.Bytes()
|
||
json.Unmarshal(data, &a)
|
||
rpc <- a.Data.UseRedInfo.RedList
|
||
}
|
||
|
||
func initFarm(cookie string, state chan string) {
|
||
type RightUpResouces struct {
|
||
AdvertID string `json:"advertId"`
|
||
Name string `json:"name"`
|
||
AppImage string `json:"appImage"`
|
||
AppLink string `json:"appLink"`
|
||
CxyImage string `json:"cxyImage"`
|
||
CxyLink string `json:"cxyLink"`
|
||
Type string `json:"type"`
|
||
OpenLink bool `json:"openLink"`
|
||
}
|
||
type TurntableInit struct {
|
||
TimeState int `json:"timeState"`
|
||
}
|
||
type MengchongResouce struct {
|
||
AdvertID string `json:"advertId"`
|
||
Name string `json:"name"`
|
||
AppImage string `json:"appImage"`
|
||
AppLink string `json:"appLink"`
|
||
CxyImage string `json:"cxyImage"`
|
||
CxyLink string `json:"cxyLink"`
|
||
Type string `json:"type"`
|
||
OpenLink bool `json:"openLink"`
|
||
}
|
||
type GUIDPopupTask struct {
|
||
GUIDPopupTask string `json:"guidPopupTask"`
|
||
}
|
||
type IosConfigResouces struct {
|
||
AdvertID string `json:"advertId"`
|
||
Name string `json:"name"`
|
||
AppImage string `json:"appImage"`
|
||
AppLink string `json:"appLink"`
|
||
CxyImage string `json:"cxyImage"`
|
||
CxyLink string `json:"cxyLink"`
|
||
Type string `json:"type"`
|
||
OpenLink bool `json:"openLink"`
|
||
}
|
||
type TodayGotWaterGoalTask struct {
|
||
CanPop bool `json:"canPop"`
|
||
}
|
||
type LeftUpResouces struct {
|
||
AdvertID string `json:"advertId"`
|
||
Name string `json:"name"`
|
||
AppImage string `json:"appImage"`
|
||
AppLink string `json:"appLink"`
|
||
CxyImage string `json:"cxyImage"`
|
||
CxyLink string `json:"cxyLink"`
|
||
Type string `json:"type"`
|
||
OpenLink bool `json:"openLink"`
|
||
}
|
||
type RightDownResouces struct {
|
||
AdvertID string `json:"advertId"`
|
||
Name string `json:"name"`
|
||
AppImage string `json:"appImage"`
|
||
AppLink string `json:"appLink"`
|
||
CxyImage string `json:"cxyImage"`
|
||
CxyLink string `json:"cxyLink"`
|
||
Type string `json:"type"`
|
||
OpenLink bool `json:"openLink"`
|
||
}
|
||
type FarmUserPro struct {
|
||
TotalEnergy int `json:"totalEnergy"`
|
||
TreeState int `json:"treeState"`
|
||
CreateTime int64 `json:"createTime"`
|
||
TreeEnergy int `json:"treeEnergy"`
|
||
TreeTotalEnergy int `json:"treeTotalEnergy"`
|
||
ShareCode string `json:"shareCode"`
|
||
WinTimes int `json:"winTimes"`
|
||
NickName string `json:"nickName"`
|
||
CouponKey string `json:"couponKey"`
|
||
CouponID string `json:"couponId"`
|
||
CouponEndTime int64 `json:"couponEndTime"`
|
||
Type string `json:"type"`
|
||
SimpleName string `json:"simpleName"`
|
||
Name string `json:"name"`
|
||
GoodsImage string `json:"goodsImage"`
|
||
SkuID string `json:"skuId"`
|
||
LastLoginDate int64 `json:"lastLoginDate"`
|
||
NewOldState int `json:"newOldState"`
|
||
OldMarkComplete int `json:"oldMarkComplete"`
|
||
CommonState int `json:"commonState"`
|
||
PrizeLevel int `json:"prizeLevel"`
|
||
}
|
||
type LeftDownResouces struct {
|
||
AdvertID string `json:"advertId"`
|
||
Name string `json:"name"`
|
||
AppImage string `json:"appImage"`
|
||
AppLink string `json:"appLink"`
|
||
CxyImage string `json:"cxyImage"`
|
||
CxyLink string `json:"cxyLink"`
|
||
Type string `json:"type"`
|
||
OpenLink bool `json:"openLink"`
|
||
}
|
||
type LoadFriend struct {
|
||
Code string `json:"code"`
|
||
StatisticsTimes interface{} `json:"statisticsTimes"`
|
||
SysTime int64 `json:"sysTime"`
|
||
Message interface{} `json:"message"`
|
||
FirstAddUser bool `json:"firstAddUser"`
|
||
}
|
||
type AutoGenerated struct {
|
||
Code string `json:"code"`
|
||
RightUpResouces RightUpResouces `json:"rightUpResouces"`
|
||
TurntableInit TurntableInit `json:"turntableInit"`
|
||
IosShieldConfig interface{} `json:"iosShieldConfig"`
|
||
MengchongResouce MengchongResouce `json:"mengchongResouce"`
|
||
ClockInGotWater bool `json:"clockInGotWater"`
|
||
GUIDPopupTask GUIDPopupTask `json:"guidPopupTask"`
|
||
ToFruitEnergy int `json:"toFruitEnergy"`
|
||
StatisticsTimes interface{} `json:"statisticsTimes"`
|
||
SysTime int64 `json:"sysTime"`
|
||
CanHongbaoContineUse bool `json:"canHongbaoContineUse"`
|
||
ToFlowTimes int `json:"toFlowTimes"`
|
||
IosConfigResouces IosConfigResouces `json:"iosConfigResouces"`
|
||
TodayGotWaterGoalTask TodayGotWaterGoalTask `json:"todayGotWaterGoalTask"`
|
||
LeftUpResouces LeftUpResouces `json:"leftUpResouces"`
|
||
MinSupportAPPVersion string `json:"minSupportAPPVersion"`
|
||
LowFreqStatus int `json:"lowFreqStatus"`
|
||
FunCollectionHasLimit bool `json:"funCollectionHasLimit"`
|
||
Message interface{} `json:"message"`
|
||
TreeState int `json:"treeState"`
|
||
RightDownResouces RightDownResouces `json:"rightDownResouces"`
|
||
IconFirstPurchaseInit bool `json:"iconFirstPurchaseInit"`
|
||
ToFlowEnergy int `json:"toFlowEnergy"`
|
||
FarmUserPro FarmUserPro `json:"farmUserPro"`
|
||
RetainPopupLimit int `json:"retainPopupLimit"`
|
||
ToBeginEnergy int `json:"toBeginEnergy"`
|
||
LeftDownResouces LeftDownResouces `json:"leftDownResouces"`
|
||
EnableSign bool `json:"enableSign"`
|
||
LoadFriend LoadFriend `json:"loadFriend"`
|
||
HadCompleteXgTask bool `json:"hadCompleteXgTask"`
|
||
OldUserIntervalTimes []int `json:"oldUserIntervalTimes"`
|
||
ToFruitTimes int `json:"toFruitTimes"`
|
||
OldUserSendWater []string `json:"oldUserSendWater"`
|
||
}
|
||
a := AutoGenerated{}
|
||
req := httplib.Post(`https://api.m.jd.com/client.action?functionId=initForFarm`)
|
||
req.Header("accept", "*/*")
|
||
req.Header("accept-encoding", "gzip, deflate, br")
|
||
req.Header("accept-language", "zh-CN,zh;q=0.9")
|
||
req.Header("cache-control", "no-cache")
|
||
req.Header("cookie", cookie)
|
||
req.Header("origin", "https://home.m.jd.com")
|
||
req.Header("pragma", "no-cache")
|
||
req.Header("referer", "https://home.m.jd.com/myJd/newhome.action")
|
||
req.Header("sec-fetch-dest", "empty")
|
||
req.Header("sec-fetch-mode", "cors")
|
||
req.Header("sec-fetch-site", "same-site")
|
||
req.Header("User-Agent", ua)
|
||
req.Header("Content-Type", "application/x-www-form-urlencoded")
|
||
req.Body(`body={"version":4}&appid=wh5&clientVersion=9.1.0`)
|
||
data, _ := req.Bytes()
|
||
json.Unmarshal(data, &a)
|
||
|
||
rt := a.FarmUserPro.Name
|
||
if rt == "" {
|
||
rt = "数据异常"
|
||
} else {
|
||
if a.TreeState == 2 || a.TreeState == 3 {
|
||
rt += "已可领取⏰"
|
||
} else if a.TreeState == 1 {
|
||
rt += fmt.Sprintf("种植中,进度%.2f%%🍒", 100*float64(a.FarmUserPro.TreeEnergy)/float64(a.FarmUserPro.TreeTotalEnergy))
|
||
} else if a.TreeState == 0 {
|
||
rt = "您忘了种植新的水果⏰"
|
||
}
|
||
}
|
||
state <- rt
|
||
}
|
||
|
||
func initPetTown(cookie string, state chan string) {
|
||
type ResourceList struct {
|
||
AdvertID string `json:"advertId"`
|
||
ImageURL string `json:"imageUrl"`
|
||
Link string `json:"link"`
|
||
ShopID string `json:"shopId"`
|
||
}
|
||
type PetPlaceInfoList struct {
|
||
Place int `json:"place"`
|
||
Energy int `json:"energy"`
|
||
}
|
||
type PetInfo struct {
|
||
AdvertID string `json:"advertId"`
|
||
NickName string `json:"nickName"`
|
||
IconURL string `json:"iconUrl"`
|
||
ClickIconURL string `json:"clickIconUrl"`
|
||
FeedGifURL string `json:"feedGifUrl"`
|
||
HomePetImage string `json:"homePetImage"`
|
||
CrossBallURL string `json:"crossBallUrl"`
|
||
RunURL string `json:"runUrl"`
|
||
TickleURL string `json:"tickleUrl"`
|
||
}
|
||
type GoodsInfo struct {
|
||
GoodsName string `json:"goodsName"`
|
||
GoodsURL string `json:"goodsUrl"`
|
||
GoodsID string `json:"goodsId"`
|
||
ExchangeMedalNum int `json:"exchangeMedalNum"`
|
||
ActivityID string `json:"activityId"`
|
||
ActivityIds string `json:"activityIds"`
|
||
}
|
||
type Result struct {
|
||
ShareCode string `json:"shareCode"`
|
||
HisHbFlag bool `json:"hisHbFlag"`
|
||
MasterHelpPeoples []interface{} `json:"masterHelpPeoples"`
|
||
HelpSwitchOn bool `json:"helpSwitchOn"`
|
||
UserStatus int `json:"userStatus"`
|
||
TotalEnergy int `json:"totalEnergy"`
|
||
MasterInvitePeoples []interface{} `json:"masterInvitePeoples"`
|
||
ShareTo string `json:"shareTo"`
|
||
PetSportStatus int `json:"petSportStatus"`
|
||
UserImage string `json:"userImage"`
|
||
MasterHelpReward int `json:"masterHelpReward"`
|
||
ShowHongBaoExchangePop bool `json:"showHongBaoExchangePop"`
|
||
ShowNeedCollectPop bool `json:"showNeedCollectPop"`
|
||
PetSportReward string `json:"petSportReward"`
|
||
NewhandBubble bool `json:"newhandBubble"`
|
||
ResourceList []ResourceList `json:"resourceList"`
|
||
ProjectBubble bool `json:"projectBubble"`
|
||
MasterInvitePop bool `json:"masterInvitePop"`
|
||
MasterInviteReward int `json:"masterInviteReward"`
|
||
MedalNum int `json:"medalNum"`
|
||
MasterHelpPop bool `json:"masterHelpPop"`
|
||
MeetDays int `json:"meetDays"`
|
||
PetPlaceInfoList []PetPlaceInfoList `json:"petPlaceInfoList"`
|
||
MedalPercent float64 `json:"medalPercent"`
|
||
CharitableSwitchOn bool `json:"charitableSwitchOn"`
|
||
PetInfo PetInfo `json:"petInfo"`
|
||
NeedCollectEnergy int `json:"needCollectEnergy"`
|
||
FoodAmount int `json:"foodAmount"`
|
||
InviteCode string `json:"inviteCode"`
|
||
RulesURL string `json:"rulesUrl"`
|
||
PetStatus int `json:"petStatus"`
|
||
GoodsInfo GoodsInfo `json:"goodsInfo"`
|
||
}
|
||
type AutoGenerated struct {
|
||
Code string `json:"code"`
|
||
ResultCode string `json:"resultCode"`
|
||
Message string `json:"message"`
|
||
Result Result `json:"result"`
|
||
}
|
||
a := AutoGenerated{}
|
||
req := httplib.Post(`https://api.m.jd.com/client.action?functionId=initPetTown`)
|
||
req.Header("Host", "api.m.jd.com")
|
||
req.Header("User-Agent", ua)
|
||
req.Header("cookie", cookie)
|
||
req.Header("Content-Type", "application/x-www-form-urlencoded")
|
||
req.Body(`body={}&appid=wh5&loginWQBiz=pet-town&clientVersion=9.0.4`)
|
||
data, _ := req.Bytes()
|
||
json.Unmarshal(data, &a)
|
||
rt := ""
|
||
if a.Code == "0" && a.ResultCode == "0" && a.Message == "success" {
|
||
if a.Result.UserStatus == 0 {
|
||
rt = "请手动开启活动⏰"
|
||
} else if a.Result.GoodsInfo.GoodsName == "" {
|
||
rt = "你忘了选购新的商品⏰"
|
||
} else if a.Result.PetStatus == 5 {
|
||
rt = a.Result.GoodsInfo.GoodsName + "已可领取⏰"
|
||
} else if a.Result.PetStatus == 6 {
|
||
rt = a.Result.GoodsInfo.GoodsName + "未继续领养新的物品⏰"
|
||
} else {
|
||
rt = a.Result.GoodsInfo.GoodsName + fmt.Sprintf("领养中,进度%.2f%%,勋章%d/%d🐶", a.Result.MedalPercent, a.Result.MedalNum, a.Result.GoodsInfo.ExchangeMedalNum)
|
||
}
|
||
} else {
|
||
rt = "数据异常"
|
||
}
|
||
state <- rt
|
||
}
|
||
|
||
func jsGold(cookie string, state chan int64) { //
|
||
|
||
type BalanceVO struct {
|
||
CashBalance string `json:"cashBalance"`
|
||
EstimatedAmount string `json:"estimatedAmount"`
|
||
ExchangeGold string `json:"exchangeGold"`
|
||
FormatGoldBalance string `json:"formatGoldBalance"`
|
||
GoldBalance int `json:"goldBalance"`
|
||
}
|
||
type Gears struct {
|
||
Amount string `json:"amount"`
|
||
ExchangeAmount string `json:"exchangeAmount"`
|
||
Order int `json:"order"`
|
||
Status int `json:"status"`
|
||
Type int `json:"type"`
|
||
}
|
||
type Data struct {
|
||
Advertise string `json:"advertise"`
|
||
BalanceVO BalanceVO `json:"balanceVO"`
|
||
Gears []Gears `json:"gears"`
|
||
IsGetCoupon bool `json:"isGetCoupon"`
|
||
IsGetCouponEid bool `json:"isGetCouponEid"`
|
||
IsLogin bool `json:"isLogin"`
|
||
NewPeople bool `json:"newPeople"`
|
||
}
|
||
type AutoGenerated struct {
|
||
Code int `json:"code"`
|
||
Data Data `json:"data"`
|
||
IsSuccess bool `json:"isSuccess"`
|
||
Message string `json:"message"`
|
||
RequestID string `json:"requestId"`
|
||
}
|
||
a := AutoGenerated{}
|
||
req := httplib.Post(`https://api.m.jd.com?functionId=MyAssetsService.execute&appid=market-task-h5`)
|
||
req.Header("Accept", "application/json, text/plain, */*")
|
||
req.Header("Accept-Encoding", "gzip, deflate, br")
|
||
req.Header("Cookie", cookie)
|
||
req.Header("Content-Type", "application/x-www-form-urlencoded")
|
||
req.Header("Origin", "https://gold.jd.com")
|
||
req.Header("Host", "api.m.jd.com")
|
||
req.Header("Connection", "keep-alive")
|
||
req.Header("User-Agent", ua)
|
||
req.Header("Referer", "https://gold.jd.com/")
|
||
req.Body(`functionId=MyAssetsService.execute&body={"method":"goldShopPage","data":{"channel":1}}&_t=` + fmt.Sprint(time.Now().Unix()) + `&appid=market-task-h5;`)
|
||
data, _ := req.Bytes()
|
||
json.Unmarshal(data, &a)
|
||
state <- int64(a.Data.BalanceVO.GoldBalance)
|
||
}
|
||
|
||
func jxncEgg(cookie string, state chan int64) {
|
||
req := httplib.Get("https://m.jingxi.com/jxmc/queryservice/GetHomePageInfo?channel=7&sceneid=1001&activeid=null&activekey=null&isgift=1&isquerypicksite=1&_stk=activeid%2Cactivekey%2Cchannel%2Cisgift%2Cisquerypicksite%2Csceneid&_ste=1&h5st=20210818211830955%3B4408816258824161%3B10028%3Btk01w8db21b2130ny2eg0siAPpNQgBqjGzYfuG6IP7Z%2BAOB40BiqLQ%2Blglfi540AB%2FaQrTduHbnk61ngEeKn813gFeRD%3Bd9a0b833bf99a29ed726cbffa07ba955cc27d1ff7d2d55552878fc18fc667929&_=1629292710957&sceneval=2&g_login_type=1&g_ty=ls")
|
||
req.Header("User-Agent", ua)
|
||
req.Header("Host", "m.jingxi.com")
|
||
req.Header("Accept", "*/*")
|
||
req.Header("Connection", "keep-alive")
|
||
req.Header("Accept-Language", "zh-cn")
|
||
req.Header("Accept-Encoding", "gzip, deflate, br")
|
||
req.Header("Referer", "https://st.jingxi.com/pingou/jxmc/index.html?nativeConfig=%7B%22immersion%22%3A1%2C%22toColor%22%3A%22%23e62e0f%22%7D&;__mcwvt=sjcp&ptag=7155.9.95")
|
||
req.Header("Cookie", cookie)
|
||
data, _ := req.Bytes()
|
||
|
||
egg, _ := jsonparser.GetInt(data, "data", "eggcnt")
|
||
state <- egg
|
||
}
|
||
|
||
func tytCoupon(cookie string, state chan string) {
|
||
|
||
type DiscountInfo struct {
|
||
High string `json:"high"`
|
||
Info []interface{} `json:"info"`
|
||
}
|
||
type ExtInfo struct {
|
||
Num5 string `json:"5"`
|
||
Num12 string `json:"12"`
|
||
Num16 string `json:"16"`
|
||
Num21 string `json:"21"`
|
||
Num52 string `json:"52"`
|
||
Num54 string `json:"54"`
|
||
Num74 string `json:"74"`
|
||
BusinessLabel string `json:"business_label"`
|
||
LimitOrganization string `json:"limit_organization"`
|
||
UserLabel string `json:"user_label"`
|
||
}
|
||
type Useable struct {
|
||
AreaDesc string `json:"areaDesc"`
|
||
AreaType int `json:"areaType"`
|
||
Batchid string `json:"batchid"`
|
||
BeanNumForPerson int `json:"beanNumForPerson"`
|
||
BeanNumForPlat int `json:"beanNumForPlat"`
|
||
BeginTime string `json:"beginTime"`
|
||
CanBeSell bool `json:"canBeSell"`
|
||
CanBeShare bool `json:"canBeShare"`
|
||
CompleteTime string `json:"completeTime"`
|
||
CouponKind int `json:"couponKind"`
|
||
CouponStyle int `json:"couponStyle"`
|
||
CouponTitle string `json:"couponTitle"`
|
||
Couponid string `json:"couponid"`
|
||
Coupontype int `json:"coupontype"`
|
||
CreateTime string `json:"createTime"`
|
||
Discount string `json:"discount"`
|
||
DiscountInfo DiscountInfo `json:"discountInfo"`
|
||
EndTime string `json:"endTime"`
|
||
ExpireType int `json:"expireType"`
|
||
ExtInfo ExtInfo `json:"extInfo"`
|
||
HourCoupon int `json:"hourCoupon"`
|
||
IsOverlay int `json:"isOverlay"`
|
||
LimitStr string `json:"limitStr"`
|
||
LinkStr string `json:"linkStr"`
|
||
OperateTime string `json:"operateTime"`
|
||
OrderID string `json:"orderId"`
|
||
OverlayDesc string `json:"overlayDesc"`
|
||
PassKey string `json:"passKey"`
|
||
Pin string `json:"pin"`
|
||
PlatFormInfo string `json:"platFormInfo"`
|
||
Platform int `json:"platform"`
|
||
PlatformDetails []interface{} `json:"platformDetails"`
|
||
PwdKey string `json:"pwdKey"`
|
||
Quota string `json:"quota"`
|
||
SellID string `json:"sellId"`
|
||
ShareID string `json:"shareId"`
|
||
ShopID string `json:"shopId"`
|
||
ShopName string `json:"shopName"`
|
||
State int `json:"state"`
|
||
UseTime string `json:"useTime"`
|
||
VenderID string `json:"venderId"`
|
||
}
|
||
type Coupon struct {
|
||
Curtimestamp int `json:"curtimestamp"`
|
||
ExpiredCount int `json:"expired_count"`
|
||
IsHideBaiTiaoInJxWxapp int `json:"isHideBaiTiaoInJxWxapp"`
|
||
IsHideMailInWxapp int `json:"isHideMailInWxapp"`
|
||
Useable []Useable `json:"useable"`
|
||
UseableCount int `json:"useable_count"`
|
||
UsedCount int `json:"used_count"`
|
||
}
|
||
type AutoGenerated struct {
|
||
Coupon Coupon `json:"coupon"`
|
||
ErrMsg string `json:"errMsg"`
|
||
ErrorCode int `json:"errorCode"`
|
||
HasNext int `json:"hasNext"`
|
||
Jdpin string `json:"jdpin"`
|
||
State int `json:"state"`
|
||
Uin string `json:"uin"`
|
||
}
|
||
a := AutoGenerated{}
|
||
req := httplib.Get(`https://m.jingxi.com/activeapi/queryjdcouponlistwithfinance?state=1&wxadd=1&filterswitch=1&_=1629296270692&sceneval=2&g_login_type=1&callback=jsonpCBKB&g_ty=ls`)
|
||
req.Header("Accept", "*/*")
|
||
req.Header("Connection", "keep-alive")
|
||
req.Header("Accept-Encoding", "gzip, deflate, br")
|
||
req.Header("Cookie", cookie)
|
||
req.Header("Content-Type", "application/x-www-form-urlencoded")
|
||
req.Header("Host", "m.jingxi.com")
|
||
|
||
req.Header("User-Agent", ua)
|
||
req.Header("Referer", "https://st.jingxi.com/my/coupon/jx.shtml?sceneval=2&ptag=7155.1.18")
|
||
data, _ := req.Bytes()
|
||
res := regexp.MustCompile(`jsonpCBKB[(](.*)\s+[)];}catch`).FindSubmatch(data)
|
||
rt := "暂无数据"
|
||
if len(res) > 0 {
|
||
json.Unmarshal(res[1], &a)
|
||
num := 0
|
||
toexp := 0
|
||
tm := int(time.Now().Unix() * 1000)
|
||
for _, cp := range a.Coupon.Useable {
|
||
if strings.Contains(cp.CouponTitle, "推推5.01") {
|
||
num++
|
||
if Int(cp.EndTime) < tm {
|
||
toexp++
|
||
}
|
||
}
|
||
}
|
||
if num == 0 {
|
||
rt = "无优惠券"
|
||
} else {
|
||
rt = fmt.Sprintf("%d张5元优惠券", num)
|
||
if toexp > 0 {
|
||
rt += fmt.Sprintf("(今天将过期%d张)⏰", toexp)
|
||
} else {
|
||
rt += "🎰"
|
||
}
|
||
}
|
||
}
|
||
state <- rt
|
||
}
|
||
|
||
func mmCoin(cookie string, state chan int64) {
|
||
req := httplib.Post(`https://api.m.jd.com/client.action`)
|
||
req.Header("Host", "api.m.jd.com")
|
||
req.Header("Accept", "application/json, text/plain, */*")
|
||
req.Header("Origin", "https://h5.m.jd.com")
|
||
|
||
req.Header("User-Agent", ua)
|
||
req.Header("cookie", cookie)
|
||
req.Header("Content-Type", "application/x-www-form-urlencoded")
|
||
req.Body(`uuid=3245ad3d16ab2153c69f9ca91cd2e931b06a3bb8&clientVersion=10.1.0&client=wh5&osVersion=&area=&networkType=wifi&functionId=homePageV2&body=%7B%7D&appid=SecKill2020`)
|
||
data, _ := req.Bytes()
|
||
mmc, _ := jsonparser.GetInt(data, "result", "assignment", "assignmentPoints")
|
||
state <- mmc
|
||
}
|
||
|
||
func jdzz(cookie string, state chan int64) { //
|
||
req := httplib.Get(`https://api.m.jd.com/client.action?functionId=interactTaskIndex&body={}&client=wh5&clientVersion=9.1.0`)
|
||
req.Header("Host", "api.m.jd.com")
|
||
req.Header("Accept-Language", "zh-cn")
|
||
req.Header("Accept-Encoding", "gzip, deflate, br")
|
||
req.Header("Referer", "http://wq.jd.com/wxapp/pages/hd-interaction/index/index")
|
||
req.Header("User-Agent", ua)
|
||
req.Header("cookie", cookie)
|
||
req.Header("Content-Type", "application/json")
|
||
data, _ := req.Bytes()
|
||
mmc, _ := jsonparser.GetString(data, "data", "totalNum")
|
||
state <- int64(Int(mmc))
|
||
}
|
||
|
||
// func jxgc() {
|
||
// req := httplib.Get(fmt.Sprintf(`https://m.jingxi.com/dreamfactory/userinfo/GetUserInfo?zone=dream_factory&pin=&sharePin=&shareType=&materialTuanPin=&materialTuanId=&source=&sceneval=2&g_login_type=1&_time=${Date.now()}&_=${Date.now() + 2}&_ste=1`))
|
||
// req.Header("Host", "api.m.jd.com")
|
||
// req.Header("Accept-Language", "zh-cn")
|
||
// req.Header("Accept-Encoding", "gzip, deflate, br")
|
||
// req.Header("Referer", "http://wq.jd.com/wxapp/pages/hd-interaction/index/index")
|
||
// req.Header("User-Agent", ua)
|
||
// req.Header("cookie", cookie)
|
||
// req.Header("Content-Type", "application/json")
|
||
// data, _ := req.Bytes()
|
||
// }
|
||
|
||
// // 惊喜的Taskurl
|
||
// function jxTaskurl(functionId, body = '', stk) {
|
||
// let url = `https://m.jingxi.com/dreamfactory/${functionId}?zone=dream_factory&${body}&sceneval=2&g_login_type=1&_time=${Date.now()}&_=${Date.now() + 2}&_ste=1`
|
||
// url += `&h5st=${decrypt(Date.now(), stk, '', url)}`
|
||
// if (stk) {
|
||
// url += `&_stk=${encodeURIComponent(stk)}`;
|
||
// }
|
||
// return {
|
||
// url,
|
||
// headers: {
|
||
// 'Cookie': cookie,
|
||
// 'Host': 'm.jingxi.com',
|
||
// 'Accept': '*/*',
|
||
// 'Connection': 'keep-alive',
|
||
// 'User-Agent': functionId === 'AssistFriend' ? "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36" : 'jdpingou',
|
||
// 'Accept-Language': 'zh-cn',
|
||
// 'Referer': 'https://wqsd.jd.com/pingou/dream_factory/index.html',
|
||
// 'Accept-Encoding': 'gzip, deflate, br',
|
||
// }
|
||
// }
|
||
// }
|