@@ -3,54 +3,48 @@ package main
33import (
44 "log"
55 "net/http"
6- "regexp"
76 "strings"
87
98 "github.com/PuerkitoBio/goquery"
109 "github.com/gin-gonic/gin"
1110)
1211
13- var (
14- KillStatisticInformationRegex = regexp .MustCompile (`<td>(.*)<\/td><td.*>([0-9]+).*<\/td><td.*>([0-9]+).*<\/td><td.*>([0-9]+).*<\/td><td.*>([0-9]+).*<\/td>` )
15- )
12+ // Child of KillStatistics
13+ type Entry struct {
14+ Race string `json:"race"`
15+ LastDayKilledPlayers int `json:"last_day_players_killed"`
16+ LastDayKilledByPlayers int `json:"last_day_killed"`
17+ LastWeekKilledPlayers int `json:"last_week_players_killed"`
18+ LastWeekKilledByPlayers int `json:"last_week_killed"`
19+ }
20+
21+ // Child of KillStatistics
22+ type Total struct {
23+ LastDayKilledPlayers int `json:"last_day_players_killed"`
24+ LastDayKilledByPlayers int `json:"last_day_killed"`
25+ LastWeekKilledPlayers int `json:"last_week_players_killed"`
26+ LastWeekKilledByPlayers int `json:"last_week_killed"`
27+ }
28+
29+ // Child of JSONData
30+ type KillStatistics struct {
31+ World string `json:"world"`
32+ Entries []Entry `json:"entries"`
33+ Total Total `json:"total"`
34+ }
35+
36+ //
37+ // The base includes two levels: KillStatistics and Information
38+ type KillStatisticsResponse struct {
39+ KillStatistics KillStatistics `json:"killstatistics"`
40+ Information Information `json:"information"`
41+ }
1642
1743// TibiaKillstatisticsV3 func
1844func TibiaKillstatisticsV3 (c * gin.Context ) {
19-
2045 // getting params from URL
2146 world := c .Param ("world" )
2247
23- // Child of KillStatistics
24- type Entry struct {
25- Race string `json:"race"`
26- LastDayKilledPlayers int `json:"last_day_players_killed"`
27- LastDayKilledByPlayers int `json:"last_day_killed"`
28- LastWeekKilledPlayers int `json:"last_week_players_killed"`
29- LastWeekKilledByPlayers int `json:"last_week_killed"`
30- }
31-
32- // Child of KillStatistics
33- type Total struct {
34- LastDayKilledPlayers int `json:"last_day_players_killed"`
35- LastDayKilledByPlayers int `json:"last_day_killed"`
36- LastWeekKilledPlayers int `json:"last_week_players_killed"`
37- LastWeekKilledByPlayers int `json:"last_week_killed"`
38- }
39-
40- // Child of JSONData
41- type KillStatistics struct {
42- World string `json:"world"`
43- Entries []Entry `json:"entries"`
44- Total Total `json:"total"`
45- }
46-
47- //
48- // The base includes two levels: KillStatistics and Information
49- type JSONData struct {
50- KillStatistics KillStatistics `json:"killstatistics"`
51- Information Information `json:"information"`
52- }
53-
5448 // Adding fix for First letter to be upper and rest lower
5549 world = TibiadataStringWorldFormatToTitleV3 (world )
5650
@@ -64,6 +58,13 @@ func TibiaKillstatisticsV3(c *gin.Context) {
6458 return
6559 }
6660
61+ jsonData := TibiaKillstatisticsV3Impl (world , BoxContentHTML )
62+
63+ // return jsonData
64+ TibiaDataAPIHandleSuccessResponse (c , "TibiaKillstatisticsV3" , jsonData )
65+ }
66+
67+ func TibiaKillstatisticsV3Impl (world string , BoxContentHTML string ) KillStatisticsResponse {
6768 // Loading HTML data into ReaderHTML for goquery with NewReader
6869 ReaderHTML , err := goquery .NewDocumentFromReader (strings .NewReader (BoxContentHTML ))
6970 if err != nil {
@@ -77,47 +78,31 @@ func TibiaKillstatisticsV3(c *gin.Context) {
7778 )
7879
7980 // Running query over each div
80- ReaderHTML .Find ("#KillStatisticsTable .TableContent tr" ).Each (func (index int , s * goquery.Selection ) {
81-
82- // Storing HTML into CreatureDivHTML
83- KillStatisticsDivHTML , err := s .Html ()
84- if err != nil {
85- log .Fatal (err )
86- }
87-
88- subma1 := KillStatisticInformationRegex .FindAllStringSubmatch (KillStatisticsDivHTML , - 1 )
89-
90- if len (subma1 ) > 0 {
91-
92- if strings .TrimSpace (subma1 [0 ][1 ]) == "Total" {
93- // we don't want to include the Total row
94- } else {
95-
96- // Store the values..
97- KillStatisticsLastDayKilledPlayers := TibiadataStringToIntegerV3 (subma1 [0 ][2 ])
98- TotalLastDayKilledPlayers += KillStatisticsLastDayKilledPlayers
99- KillStatisticsLastDayKilledByPlayers := TibiadataStringToIntegerV3 (subma1 [0 ][3 ])
100- TotalLastDayKilledByPlayers += KillStatisticsLastDayKilledByPlayers
101- KillStatisticsLastWeekKilledPlayers := TibiadataStringToIntegerV3 (subma1 [0 ][4 ])
102- TotalLastWeekKilledPlayers += KillStatisticsLastWeekKilledPlayers
103- KillStatisticsLastWeekKilledByPlayers := TibiadataStringToIntegerV3 (subma1 [0 ][5 ])
104- TotalLastWeekKilledByPlayers += KillStatisticsLastWeekKilledByPlayers
105-
106- // Append new Entry item to KillStatisticsData
107- KillStatisticsData = append (KillStatisticsData , Entry {
108- Race : TibiaDataSanitizeEscapedString (subma1 [0 ][1 ]),
109- LastDayKilledPlayers : KillStatisticsLastDayKilledPlayers ,
110- LastDayKilledByPlayers : KillStatisticsLastDayKilledByPlayers ,
111- LastWeekKilledPlayers : KillStatisticsLastWeekKilledPlayers ,
112- LastWeekKilledByPlayers : KillStatisticsLastWeekKilledByPlayers ,
113- })
114- }
115- }
81+ ReaderHTML .Find ("#KillStatisticsTable .TableContent tr.Odd,tr.Even" ).Each (func (index int , s * goquery.Selection ) {
82+ DataColumns := s .Find ("td" ).Nodes
83+
84+ KillStatisticsLastDayKilledPlayers := TibiadataStringToIntegerV3 (DataColumns [1 ].FirstChild .Data )
85+ TotalLastDayKilledPlayers += KillStatisticsLastDayKilledPlayers
86+ KillStatisticsLastDayKilledByPlayers := TibiadataStringToIntegerV3 (DataColumns [2 ].FirstChild .Data )
87+ TotalLastDayKilledByPlayers += KillStatisticsLastDayKilledByPlayers
88+ KillStatisticsLastWeekKilledPlayers := TibiadataStringToIntegerV3 (DataColumns [3 ].FirstChild .Data )
89+ TotalLastWeekKilledPlayers += KillStatisticsLastWeekKilledPlayers
90+ KillStatisticsLastWeekKilledByPlayers := TibiadataStringToIntegerV3 (DataColumns [4 ].FirstChild .Data )
91+ TotalLastWeekKilledByPlayers += KillStatisticsLastWeekKilledByPlayers
92+
93+ // Append new Entry item to KillStatisticsData
94+ KillStatisticsData = append (KillStatisticsData , Entry {
95+ Race : TibiaDataSanitizeEscapedString (DataColumns [0 ].FirstChild .Data ),
96+ LastDayKilledPlayers : KillStatisticsLastDayKilledPlayers ,
97+ LastDayKilledByPlayers : KillStatisticsLastDayKilledByPlayers ,
98+ LastWeekKilledPlayers : KillStatisticsLastWeekKilledPlayers ,
99+ LastWeekKilledByPlayers : KillStatisticsLastWeekKilledByPlayers ,
100+ })
116101 })
117102
118103 //
119104 // Build the data-blob
120- jsonData := JSONData {
105+ return KillStatisticsResponse {
121106 KillStatistics {
122107 World : world ,
123108 Entries : KillStatisticsData ,
@@ -133,8 +118,4 @@ func TibiaKillstatisticsV3(c *gin.Context) {
133118 Timestamp : TibiadataDatetimeV3 ("" ),
134119 },
135120 }
136-
137- // return jsonData
138- TibiaDataAPIHandleSuccessResponse (c , "TibiaKillstatisticsV3" , jsonData )
139-
140121}
0 commit comments