/
today.go
123 lines (111 loc) · 3.48 KB
/
today.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
package today
import (
"errors"
"fmt"
"os"
"github.com/lzzzzl/basketball-go/modules/constant"
"github.com/lzzzzl/basketball-go/modules/log"
"github.com/lzzzzl/basketball-go/modules/print"
"github.com/lzzzzl/basketball-go/modules/request"
"github.com/lzzzzl/basketball-go/modules/time"
"github.com/lzzzzl/basketball-go/handlers/nba/game"
"github.com/jedib0t/go-pretty/v6/table"
"github.com/jedib0t/go-pretty/v6/text"
"github.com/tidwall/gjson"
)
// Today today
type Today struct {
}
// TodayBoardPrinter today borad printer
func (today *Today) TodayBoardPrinter() ([]*game.GameBoard, error) {
url := constant.TODAY_SCORE_BOARD_URL
log.Println("Today Score Board URL: ", url)
request := &request.HTTPRequest{
URL: url,
Headers: constant.LIVE_HEADER,
TimeOut: 30,
}
result, err := request.HTTPGet()
if err != nil {
return nil, err
}
boards, err := today.ResultParser(result)
if err != nil {
return boards, err
}
err = PrintTime()
if err != nil {
return boards, err
}
today.PrintTable(boards)
return boards, nil
}
// ResultParser parse http json data
func (today *Today) ResultParser(result string) ([]*game.GameBoard, error) {
var boards []*game.GameBoard
if gjson.Get(result, "meta.code").Int() != 200 {
return boards, errors.New("error response")
}
games := gjson.Get(result, "scoreboard.games")
games.ForEach(func(key, value gjson.Result) bool {
utcTime, err := time.UtcToLocal(value.Get("gameTimeUTC").String(),
"2006-01-02T15:04:05Z",
constant.EST_ZONE)
if err != nil {
log.Error(err)
return false
}
boards = append(boards, &game.GameBoard{
GameStartTime: utcTime,
GameID: value.Get("gameId").String(),
GameStatus: value.Get("gameStatusText").String(),
SeriesText: value.Get("seriesText").String(),
HomeTeamName: value.Get("homeTeam.teamName").String(),
HomeTeamCity: value.Get("homeTeam.teamCity").String(),
HomeTeamCode: value.Get("homeTeam.teamTricode").String(),
HomeTeamScore: value.Get("homeTeam.score").String(),
AwayTeamName: value.Get("awayTeam.teamName").String(),
AwayTeamCity: value.Get("awayTeam.teamCity").String(),
AwayTeamCode: value.Get("awayTeam.teamTricode").String(),
AwayTeamScore: value.Get("awayTeam.score").String(),
})
return true
})
return boards, nil
}
// PrintTime print time
func PrintTime() error {
t := time.GetCurrentDate("20060102")
print.FigurePrint(t, "starwars", "green")
fmt.Println("")
return nil
}
// PrintTable print table
func (today *Today) PrintTable(boards []*game.GameBoard) error {
t := table.NewWriter()
t.SetOutputMirror(os.Stdout)
t.SetColumnConfigs([]table.ColumnConfig{
{Name: game.ColTitleTeams, AlignHeader: text.AlignCenter},
{Name: game.ColTitleScores, AlignHeader: text.AlignCenter},
{Name: game.ColTitleStatus, Align: text.AlignCenter, AlignHeader: text.AlignCenter},
{Name: game.ColTitleSeries, Align: text.AlignCenter, AlignHeader: text.AlignCenter},
})
t.AppendHeader(table.Row{game.ColTitleIndex, game.ColTitleTeams, game.ColTitleScores,
game.ColTitleStatus, game.ColTitleSeries})
for i, v := range boards {
homeTeamScore, awayTeamScore, err := print.MaxScoreColor(v.HomeTeamScore, v.AwayTeamScore)
if err != nil {
return err
}
t.AppendRow([]interface{}{
i + 1,
fmt.Sprintf("%12s 🆚 %-12s", v.HomeTeamName, v.AwayTeamName),
fmt.Sprintf("%s : %s", homeTeamScore, awayTeamScore),
v.GameStatus,
v.SeriesText})
}
t.SetStyle(table.StyleBold)
t.Style().Options.SeparateRows = true
t.Render()
return nil
}