效果如下

代码如下:
package main
import (
"encoding/json"
"flag"
"fmt"
"io"
"net/http"
"os"
"strings"
"github.com/olekukonko/tablewriter"
"github.com/tidwall/gjson"
)
var words = flag.String("words", "", "搜索词汇, 多个使用英文逗号隔开, 如 实验室,NB实验室,化学实验")
var limit = flag.Int("limit", 8, "每个关键词搜索结果打印行数")
func main() {
flag.Parse()
if *words == "" {
fmt.Println("请指定words, 格式如下 -words 实验室,NB实验室,化学实验")
return
}
wordArr := strings.Split(*words, ",")
var summary [][]string
for _, word := range wordArr {
url := fmt.Sprintf("https://itunes.apple.com/search?term=%s&country=cn&media=software&entity=software&genreId=&limit=100&offset=0&sort=aaa", word)
resp, err := http.Get(url)
if err != nil {
panic(err)
}
body, err := io.ReadAll(resp.Body)
if err != nil {
panic(err)
}
resp.Body.Close()
namesRaw := gjson.GetBytes(body, "results.#.trackName")
rateCntRaw := gjson.GetBytes(body, "results.#.userRatingCount")
var names []string
err = json.Unmarshal([]byte(namesRaw.String()), &names)
if err != nil {
panic(err)
}
var rateRates []int32
err = json.Unmarshal([]byte(rateCntRaw.String()), &rateRates)
if err != nil {
panic(err)
}
var data [][]string
index := 0
nbRank := 0
for i, name := range names {
index++
if index <= *limit || name == "NB实验室" {
data = append(data, []string{
fmt.Sprintf("%d", index),
name,
fmt.Sprintf("%d", rateRates[i]),
})
if name == "NB实验室" {
nbRank = index
}
}
}
table := tablewriter.NewWriter(os.Stdout)
table.SetHeader([]string{"排名", word, "评分人数"})
if nbRank == 0 {
table.SetFooter([]string{"", "NB实验室", "未上榜"})
summary = append(summary, []string{
word,
"未上榜",
})
} else {
table.SetFooter([]string{"", "NB实验室", fmt.Sprintf("%d", nbRank)})
summary = append(summary, []string{
word,
fmt.Sprintf("%d", nbRank),
})
}
for _, v := range data {
table.Append(v)
}
table.SetHeaderColor(tablewriter.Colors{tablewriter.Bold, tablewriter.FgHiGreenColor},
tablewriter.Colors{tablewriter.Bold, tablewriter.FgHiGreenColor},
tablewriter.Colors{tablewriter.Bold, tablewriter.FgHiGreenColor})
table.Render()
fmt.Println()
}
fmt.Println("===============结果汇总===============\n")
summaryTable := tablewriter.NewWriter(os.Stdout)
summaryTable.SetHeader([]string{"关键词", "名次"})
for _, v := range summary {
summaryTable.Append(v)
}
summaryTable.Render()
}