diff --git a/bfhelper/internal/bf1/player/player.go b/bfhelper/internal/bf1/player/player.go index c28a969..9da5a48 100644 --- a/bfhelper/internal/bf1/player/player.go +++ b/bfhelper/internal/bf1/player/player.go @@ -5,6 +5,7 @@ import ( "bytes" "encoding/json" "fmt" + "net/http" "sort" "strings" "sync" @@ -26,39 +27,54 @@ type Cheater struct { // GetStats 获取战绩信息 func GetStats(id string) (*Stat, error) { - data, err := netreq.Request{URL: "https://battlefieldtracker.com/api/appStats?platform=3&name=" + id}.GetRespBodyJSON() + transport := http.DefaultTransport.(*http.Transport).Clone() + transport.ForceAttemptHTTP2 = false + transport.TLSClientConfig.NextProtos = []string{"http/1.1"} + res, err := netreq.Request{ + URL: "https://api.tracker.gg/api/v2/bf1/standard/profile/origin/" + id, + Header: map[string]string{ + "Host": "api.tracker.gg", + "User-Agent": "Tracker Network App / 3.22.9", + "Accept": "application/json; charset=utf-8", + "x-app-version": "3.22.9", + }, + Transport: transport, + }.GetRespBodyJSON() + if res == nil { + return nil, errors.New("empty response") + } if err != nil { return nil, err } - if !data.IsObject() { + if res.Get("errors").Exists() { return nil, errors.New("invalid id") } + + data := res.Get("data.segments.0") stat := &Stat{ - SPM: data.Get("stats.2.value").Str, - TotalKD: data.Get("stats.4.value").Str, - WinPercent: data.Get("stats.5.value").Str, - KillsPerGame: data.Get("stats.6.value").Str, - Kills: data.Get("stats.7.value").Str, - Deaths: data.Get("stats.9.value").Str, - KPM: data.Get("stats.10.value").Str, - Losses: data.Get("stats.11.value").Str, - Wins: data.Get("stats.12.value").Str, - InfantryKills: data.Get("stats.13.value").Str, - InfantryKPM: data.Get("stats.14.value").Str, - InfantryKD: data.Get("stats.15.value").Str, - VehicleKills: data.Get("stats.16.value").Str, - VehicleKPM: data.Get("stats.17.value").Str, - Rank: data.Get("stats.18.value").Str, - Skill: data.Get("stats.19.value").Str, - TimePlayed: data.Get("stats.20.displayValue").Str, - MVP: data.Get("stats.26.value").Str, - Accuracy: data.Get("stats.27.value").Str, - DogtagsTaken: data.Get("stats.31.value").Str, - Headshots: data.Get("stats.32.value").Str, - HighestKillStreak: data.Get("stats.35.value").Str, - LongestHeadshot: data.Get("stats.37.value").Str, - Revives: data.Get("stats.41.value").Str, - CarriersKills: data.Get("stats.54.value").Str, + SPM: data.Get("stats.scorePerMinute.displayValue").Str, + TotalKD: data.Get("stats.kdRatio.displayValue").Str, + WinPercent: data.Get("stats.winPercentage.displayValue").Str, + KillsPerGame: data.Get("stats.killsPerRound.displayValue").Str, + Kills: data.Get("stats.kills.displayValue").Str, + Deaths: data.Get("stats.deaths.displayValue").Str, + KPM: data.Get("stats.killsPerMinute.displayValue").Str, + Losses: data.Get("stats.losses.displayValue").Str, + Wins: data.Get("stats.wins.displayValue").Str, + InfantryKills: data.Get("stats.infantryKills.displayValue").Str, + InfantryKPM: data.Get("stats.infantryKillsPerMinute.displayValue").Str, + InfantryKD: data.Get("stats.infantryKdRatio.displayValue").Str, + VehicleKills: data.Get("stats.vehicleKills.displayValue").Str, + VehicleKPM: data.Get("stats.vehicleKillsPerMinute.displayValue").Str, + Rank: data.Get("stats.rank.displayValue").Str, + TimePlayed: data.Get("stats.timePlayed.displayValue").Str, + MVP: data.Get("stats.mvp.displayValue").Str, + Accuracy: data.Get("stats.shotsAccuracy.displayValue").Str, + DogtagsTaken: data.Get("stats.dogtagsTaken.displayValue").Str, + Headshots: data.Get("stats.headshots.displayValue").Str, + HighestKillStreak: data.Get("stats.killStreak.displayValue").Str, + LongestHeadshot: data.Get("stats.longestHeadshot.displayValue").Str, + Revives: data.Get("stats.revive.displayValue").Str, } return stat, err } diff --git a/bfhelper/internal/bf1/player/structs.go b/bfhelper/internal/bf1/player/structs.go index 6f396e7..46bb2ce 100644 --- a/bfhelper/internal/bf1/player/structs.go +++ b/bfhelper/internal/bf1/player/structs.go @@ -59,7 +59,6 @@ type Stat struct { VehicleKills string VehicleKPM string Rank string - Skill string TimePlayed string MVP string Accuracy string @@ -68,7 +67,6 @@ type Stat struct { HighestKillStreak string LongestHeadshot string Revives string - CarriersKills string } // Weapons 武器 diff --git a/bfhelper/internal/service/player.go b/bfhelper/internal/service/player.go index aef1eeb..c8124fe 100644 --- a/bfhelper/internal/service/player.go +++ b/bfhelper/internal/service/player.go @@ -250,7 +250,6 @@ func (s *Service) GetPlayerStats(ctx context.Context) error { // TODO: 修改为卡片发送, 部分数据不准确,等待更改 txt := "id:" + id + "\n" + "等级:" + stat.Rank + "\n" + - "技巧值:" + stat.Skill + "\n" + "游玩时长:" + stat.TimePlayed + "\n" + "总kd:" + stat.TotalKD + "(" + stat.Kills + "/" + stat.Deaths + ")" + "\n" + "总kpm:" + stat.KPM + "\n" + @@ -267,8 +266,7 @@ func (s *Service) GetPlayerStats(ctx context.Context) error { "最高连杀:" + stat.HighestKillStreak + "\n" + "最远爆头:" + stat.LongestHeadshot + "\n" + "MVP数:" + stat.MVP + "\n" + - "作为神医拉起了 " + stat.Revives + " 人" + "\n" + - "开棺材车创死了 " + stat.CarriersKills + " 人" + "作为神医拉起了 " + stat.Revives + " 人" span.AddEvent("success") span.SetStatus(codes.Ok, "") diff --git a/bfhelper/pkg/netreq/netreq.go b/bfhelper/pkg/netreq/netreq.go index ff92c88..13190a2 100644 --- a/bfhelper/pkg/netreq/netreq.go +++ b/bfhelper/pkg/netreq/netreq.go @@ -12,15 +12,17 @@ import ( // Request 请求结构体 type Request struct { - Method string - URL string - Header map[string]string - Body io.Reader + Method string + URL string + Header map[string]string + Body io.Reader + Transport http.RoundTripper } func (r Request) client() *http.Client { return &http.Client{ - Timeout: time.Minute, + Timeout: time.Minute, + Transport: r.Transport, } }