xdd-plus/models/asset.go
2021-09-07 10:50:05 +08:00

817 lines
30 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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',
// }
// }
// }