init
This commit is contained in:
4
Makefile
Normal file
4
Makefile
Normal file
@@ -0,0 +1,4 @@
|
||||
build:
|
||||
@echo Building windows binary...
|
||||
go build -trimpath -ldflags="-s -w" .
|
||||
@echo Done!
|
||||
35
api/as.go
Normal file
35
api/as.go
Normal file
@@ -0,0 +1,35 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"hakushi-crawl/utils"
|
||||
"log"
|
||||
)
|
||||
|
||||
func GetASEventInfoApi(eventId string, locale string) (*any, error) {
|
||||
url := fmt.Sprintf(
|
||||
"https://api.hakush.in/hsr/data/%s/boss/%s.json",
|
||||
locale,
|
||||
eventId,
|
||||
)
|
||||
|
||||
data, err := utils.GetĐataJSON[any](url)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
return data, nil
|
||||
}
|
||||
|
||||
func GetListASEventApi() (map[string]*any, error) {
|
||||
url := "https://api.hakush.in/hsr/data/maze_boss.json"
|
||||
|
||||
data, err := utils.GetĐataJSON[map[string]*any](url)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
return *data, nil
|
||||
}
|
||||
35
api/character.go
Normal file
35
api/character.go
Normal file
@@ -0,0 +1,35 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"hakushi-crawl/utils"
|
||||
"log"
|
||||
)
|
||||
|
||||
func GetCharacterInfoApi(avatarId string, locale string) (*any, error) {
|
||||
url := fmt.Sprintf(
|
||||
"https://api.hakush.in/hsr/data/%s/character/%s.json",
|
||||
locale,
|
||||
avatarId,
|
||||
)
|
||||
|
||||
data, err := utils.GetĐataJSON[any](url)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
return data, nil
|
||||
}
|
||||
|
||||
func GetListCharacterApi() (map[string]*any, error) {
|
||||
url := "https://api.hakush.in/hsr/data/character.json"
|
||||
|
||||
data, err := utils.GetĐataJSON[map[string]*any](url)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
return *data, nil
|
||||
}
|
||||
35
api/lightcone.go
Normal file
35
api/lightcone.go
Normal file
@@ -0,0 +1,35 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"hakushi-crawl/utils"
|
||||
"log"
|
||||
)
|
||||
|
||||
func GetLightconeInfoApi(lightconeId string, locale string) (*any, error) {
|
||||
url := fmt.Sprintf(
|
||||
"https://api.hakush.in/hsr/data/%s/lightcone/%s.json",
|
||||
locale,
|
||||
lightconeId,
|
||||
)
|
||||
|
||||
data, err := utils.GetĐataJSON[any](url)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
return data, nil
|
||||
}
|
||||
|
||||
func GetListLightconeApi() (map[string]*any, error) {
|
||||
url := "https://api.hakush.in/hsr/data/lightcone.json"
|
||||
|
||||
data, err := utils.GetĐataJSON[map[string]*any](url)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
return *data, nil
|
||||
}
|
||||
35
api/moc.go
Normal file
35
api/moc.go
Normal file
@@ -0,0 +1,35 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"hakushi-crawl/utils"
|
||||
"log"
|
||||
)
|
||||
|
||||
func GetMOCEventInfoApi(eventId string, locale string) (*any, error) {
|
||||
url := fmt.Sprintf(
|
||||
"https://api.hakush.in/hsr/data/%s/maze/%s.json",
|
||||
locale,
|
||||
eventId,
|
||||
)
|
||||
|
||||
data, err := utils.GetĐataJSON[any](url)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
return data, nil
|
||||
}
|
||||
|
||||
func GetListMOCEventApi() (map[string]*any, error) {
|
||||
url := "https://api.hakush.in/hsr/data/maze.json"
|
||||
|
||||
data, err := utils.GetĐataJSON[map[string]*any](url)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
return *data, nil
|
||||
}
|
||||
35
api/monster.go
Normal file
35
api/monster.go
Normal file
@@ -0,0 +1,35 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"hakushi-crawl/utils"
|
||||
"log"
|
||||
)
|
||||
|
||||
func GetMonsterInfoApi(monsterId string, locale string) (*any, error) {
|
||||
url := fmt.Sprintf(
|
||||
"https://api.hakush.in/hsr/data/%s/monster/%s.json",
|
||||
locale,
|
||||
monsterId,
|
||||
)
|
||||
|
||||
data, err := utils.GetĐataJSON[any](url)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
return data, nil
|
||||
}
|
||||
|
||||
func GetListMonsterApi() (map[string]*any, error) {
|
||||
url := "https://api.hakush.in/hsr/data/monster.json"
|
||||
|
||||
data, err := utils.GetĐataJSON[map[string]*any](url)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
return *data, nil
|
||||
}
|
||||
35
api/peak.go
Normal file
35
api/peak.go
Normal file
@@ -0,0 +1,35 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"hakushi-crawl/utils"
|
||||
"log"
|
||||
)
|
||||
|
||||
func GetPeakEventInfoApi(eventId string, locale string) (*any, error) {
|
||||
url := fmt.Sprintf(
|
||||
"https://api.hakush.in/hsr/data/%s/peak/%s.json",
|
||||
locale,
|
||||
eventId,
|
||||
)
|
||||
|
||||
data, err := utils.GetĐataJSON[any](url)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
return data, nil
|
||||
}
|
||||
|
||||
func GetListPeakEventApi() (map[string]*any, error) {
|
||||
url := "https://api.hakush.in/hsr/data/maze_peak.json"
|
||||
|
||||
data, err := utils.GetĐataJSON[map[string]*any](url)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
return *data, nil
|
||||
}
|
||||
35
api/pf.go
Normal file
35
api/pf.go
Normal file
@@ -0,0 +1,35 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"hakushi-crawl/utils"
|
||||
"log"
|
||||
)
|
||||
|
||||
func GetPFEventInfoApi(eventId string, locale string) (*any, error) {
|
||||
url := fmt.Sprintf(
|
||||
"https://api.hakush.in/hsr/data/%s/story/%s.json",
|
||||
locale,
|
||||
eventId,
|
||||
)
|
||||
|
||||
data, err := utils.GetĐataJSON[any](url)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
return data, nil
|
||||
}
|
||||
|
||||
func GetListPFEventApi() (map[string]*any, error) {
|
||||
url := "https://api.hakush.in/hsr/data/maze_extra.json"
|
||||
|
||||
data, err := utils.GetĐataJSON[map[string]*any](url)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
return *data, nil
|
||||
}
|
||||
35
api/relic.go
Normal file
35
api/relic.go
Normal file
@@ -0,0 +1,35 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"hakushi-crawl/utils"
|
||||
"log"
|
||||
)
|
||||
|
||||
func GetRelicInfoApi(relicId string, locale string) (*any, error) {
|
||||
url := fmt.Sprintf(
|
||||
"https://api.hakush.in/hsr/data/%s/relicset/%s.json",
|
||||
locale,
|
||||
relicId,
|
||||
)
|
||||
|
||||
data, err := utils.GetĐataJSON[any](url)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
return data, nil
|
||||
}
|
||||
|
||||
func GetListRelicsetApi() (map[string]*any, error) {
|
||||
url := "https://api.hakush.in/hsr/data/relicset.json"
|
||||
|
||||
data, err := utils.GetĐataJSON[map[string]*any](url)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
return *data, nil
|
||||
}
|
||||
BIN
hakushi-crawl.exe
Normal file
BIN
hakushi-crawl.exe
Normal file
Binary file not shown.
54
internal/as.go
Normal file
54
internal/as.go
Normal file
@@ -0,0 +1,54 @@
|
||||
package internal
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"hakushi-crawl/api"
|
||||
"os"
|
||||
"sync"
|
||||
)
|
||||
|
||||
func SaveDataASEvent(locale string) error {
|
||||
listItem, err := api.GetListASEventApi()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
mapItemDetail := make(map[string]*any)
|
||||
|
||||
var mu sync.Mutex
|
||||
|
||||
jobs := make(chan string)
|
||||
wg := sync.WaitGroup{}
|
||||
|
||||
workerCount := 12
|
||||
|
||||
for range workerCount {
|
||||
wg.Go(func() {
|
||||
for itemId := range jobs {
|
||||
itemDetail, err := api.GetASEventInfoApi(itemId, locale)
|
||||
if err != nil || itemDetail == nil {
|
||||
continue
|
||||
}
|
||||
mu.Lock()
|
||||
mapItemDetail[itemId] = itemDetail
|
||||
mu.Unlock()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
for itemId := range listItem {
|
||||
jobs <- itemId
|
||||
}
|
||||
close(jobs)
|
||||
|
||||
wg.Wait()
|
||||
fileName := fmt.Sprintf("as.%s.json", locale)
|
||||
|
||||
data, err := json.Marshal(mapItemDetail)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return os.WriteFile(fileName, data, 0644)
|
||||
}
|
||||
54
internal/character.go
Normal file
54
internal/character.go
Normal file
@@ -0,0 +1,54 @@
|
||||
package internal
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"hakushi-crawl/api"
|
||||
"os"
|
||||
"sync"
|
||||
)
|
||||
|
||||
func SaveDataCharacter(locale string) error {
|
||||
listItem, err := api.GetListCharacterApi()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
mapItemDetail := make(map[string]*any)
|
||||
var mu sync.Mutex
|
||||
|
||||
jobs := make(chan string)
|
||||
wg := sync.WaitGroup{}
|
||||
|
||||
workerCount := 12
|
||||
|
||||
for range workerCount {
|
||||
wg.Go(func() {
|
||||
for itemId := range jobs {
|
||||
itemDetail, err := api.GetCharacterInfoApi(itemId, locale)
|
||||
if err != nil || itemDetail == nil {
|
||||
continue
|
||||
}
|
||||
mu.Lock()
|
||||
mapItemDetail[itemId] = itemDetail
|
||||
mu.Unlock()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
for itemId := range listItem {
|
||||
jobs <- itemId
|
||||
}
|
||||
close(jobs)
|
||||
|
||||
wg.Wait()
|
||||
|
||||
fileName := fmt.Sprintf("characters.%s.json", locale)
|
||||
|
||||
data, err := json.Marshal(mapItemDetail)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return os.WriteFile(fileName, data, 0644)
|
||||
}
|
||||
55
internal/lightcone.go
Normal file
55
internal/lightcone.go
Normal file
@@ -0,0 +1,55 @@
|
||||
package internal
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"hakushi-crawl/api"
|
||||
"os"
|
||||
"sync"
|
||||
)
|
||||
|
||||
func SaveDataLightcone(locale string) error {
|
||||
listItem, err := api.GetListLightconeApi()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
mapItemDetail := make(map[string]*any)
|
||||
|
||||
var mu sync.Mutex
|
||||
|
||||
jobs := make(chan string)
|
||||
wg := sync.WaitGroup{}
|
||||
|
||||
workerCount := 12
|
||||
|
||||
for range workerCount {
|
||||
wg.Go(func() {
|
||||
for itemId := range jobs {
|
||||
itemDetail, err := api.GetLightconeInfoApi(itemId, locale)
|
||||
if err != nil || itemDetail == nil {
|
||||
continue
|
||||
}
|
||||
mu.Lock()
|
||||
mapItemDetail[itemId] = itemDetail
|
||||
mu.Unlock()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
for itemId := range listItem {
|
||||
jobs <- itemId
|
||||
}
|
||||
close(jobs)
|
||||
|
||||
wg.Wait()
|
||||
|
||||
fileName := fmt.Sprintf("lightcones.%s.json", locale)
|
||||
|
||||
data, err := json.Marshal(mapItemDetail)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return os.WriteFile(fileName, data, 0644)
|
||||
}
|
||||
55
internal/moc.go
Normal file
55
internal/moc.go
Normal file
@@ -0,0 +1,55 @@
|
||||
package internal
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"hakushi-crawl/api"
|
||||
"os"
|
||||
"sync"
|
||||
)
|
||||
|
||||
func SaveDataMOCEvent(locale string) error {
|
||||
listItem, err := api.GetListMOCEventApi()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
mapItemDetail := make(map[string]*any)
|
||||
|
||||
var mu sync.Mutex
|
||||
|
||||
jobs := make(chan string)
|
||||
wg := sync.WaitGroup{}
|
||||
|
||||
workerCount := 12
|
||||
|
||||
for range workerCount {
|
||||
wg.Go(func() {
|
||||
for itemId := range jobs {
|
||||
itemDetail, err := api.GetMOCEventInfoApi(itemId, locale)
|
||||
if err != nil || itemDetail == nil {
|
||||
continue
|
||||
}
|
||||
mu.Lock()
|
||||
mapItemDetail[itemId] = itemDetail
|
||||
mu.Unlock()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
for itemId := range listItem {
|
||||
jobs <- itemId
|
||||
}
|
||||
close(jobs)
|
||||
|
||||
wg.Wait()
|
||||
|
||||
fileName := fmt.Sprintf("moc.%s.json", locale)
|
||||
|
||||
data, err := json.Marshal(mapItemDetail)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return os.WriteFile(fileName, data, 0644)
|
||||
}
|
||||
55
internal/monster.go
Normal file
55
internal/monster.go
Normal file
@@ -0,0 +1,55 @@
|
||||
package internal
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"hakushi-crawl/api"
|
||||
"os"
|
||||
"sync"
|
||||
)
|
||||
|
||||
func SaveDataMonster(locale string) error {
|
||||
listItem, err := api.GetListMonsterApi()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
mapItemDetail := make(map[string]*any)
|
||||
|
||||
var mu sync.Mutex
|
||||
|
||||
jobs := make(chan string)
|
||||
wg := sync.WaitGroup{}
|
||||
|
||||
workerCount := 12
|
||||
|
||||
for range workerCount {
|
||||
wg.Go(func() {
|
||||
for itemId := range jobs {
|
||||
itemDetail, err := api.GetMonsterInfoApi(itemId, locale)
|
||||
if err != nil || itemDetail == nil {
|
||||
continue
|
||||
}
|
||||
mu.Lock()
|
||||
mapItemDetail[itemId] = itemDetail
|
||||
mu.Unlock()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
for itemId := range listItem {
|
||||
jobs <- itemId
|
||||
}
|
||||
close(jobs)
|
||||
|
||||
wg.Wait()
|
||||
|
||||
fileName := fmt.Sprintf("monsters.%s.json", locale)
|
||||
|
||||
data, err := json.Marshal(mapItemDetail)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return os.WriteFile(fileName, data, 0644)
|
||||
}
|
||||
55
internal/peak.go
Normal file
55
internal/peak.go
Normal file
@@ -0,0 +1,55 @@
|
||||
package internal
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"hakushi-crawl/api"
|
||||
"os"
|
||||
"sync"
|
||||
)
|
||||
|
||||
func SaveDataPeakEvent(locale string) error {
|
||||
listItem, err := api.GetListPeakEventApi()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
mapItemDetail := make(map[string]*any)
|
||||
|
||||
var mu sync.Mutex
|
||||
|
||||
jobs := make(chan string)
|
||||
wg := sync.WaitGroup{}
|
||||
|
||||
workerCount := 12
|
||||
|
||||
for range workerCount {
|
||||
wg.Go(func() {
|
||||
for itemId := range jobs {
|
||||
itemDetail, err := api.GetPeakEventInfoApi(itemId, locale)
|
||||
if err != nil || itemDetail == nil {
|
||||
continue
|
||||
}
|
||||
mu.Lock()
|
||||
mapItemDetail[itemId] = itemDetail
|
||||
mu.Unlock()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
for itemId := range listItem {
|
||||
jobs <- itemId
|
||||
}
|
||||
close(jobs)
|
||||
|
||||
wg.Wait()
|
||||
|
||||
fileName := fmt.Sprintf("peak.%s.json", locale)
|
||||
|
||||
data, err := json.Marshal(mapItemDetail)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return os.WriteFile(fileName, data, 0644)
|
||||
}
|
||||
55
internal/pf.go
Normal file
55
internal/pf.go
Normal file
@@ -0,0 +1,55 @@
|
||||
package internal
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"hakushi-crawl/api"
|
||||
"os"
|
||||
"sync"
|
||||
)
|
||||
|
||||
func SaveDataPFEvent(locale string) error {
|
||||
listItem, err := api.GetListPFEventApi()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
mapItemDetail := make(map[string]*any)
|
||||
|
||||
var mu sync.Mutex
|
||||
|
||||
jobs := make(chan string)
|
||||
wg := sync.WaitGroup{}
|
||||
|
||||
workerCount := 12
|
||||
|
||||
for range workerCount {
|
||||
wg.Go(func() {
|
||||
for itemId := range jobs {
|
||||
itemDetail, err := api.GetPFEventInfoApi(itemId, locale)
|
||||
if err != nil || itemDetail == nil {
|
||||
continue
|
||||
}
|
||||
mu.Lock()
|
||||
mapItemDetail[itemId] = itemDetail
|
||||
mu.Unlock()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
for itemId := range listItem {
|
||||
jobs <- itemId
|
||||
}
|
||||
close(jobs)
|
||||
|
||||
wg.Wait()
|
||||
|
||||
fileName := fmt.Sprintf("pf.%s.json", locale)
|
||||
|
||||
data, err := json.Marshal(mapItemDetail)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return os.WriteFile(fileName, data, 0644)
|
||||
}
|
||||
55
internal/relic.go
Normal file
55
internal/relic.go
Normal file
@@ -0,0 +1,55 @@
|
||||
package internal
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"hakushi-crawl/api"
|
||||
"os"
|
||||
"sync"
|
||||
)
|
||||
|
||||
func SaveDataRelic(locale string) error {
|
||||
listItem, err := api.GetListRelicsetApi()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
mapItemDetail := make(map[string]*any)
|
||||
|
||||
var mu sync.Mutex
|
||||
|
||||
jobs := make(chan string)
|
||||
wg := sync.WaitGroup{}
|
||||
|
||||
workerCount := 12
|
||||
|
||||
for range workerCount {
|
||||
wg.Go(func() {
|
||||
for itemId := range jobs {
|
||||
itemDetail, err := api.GetRelicInfoApi(itemId, locale)
|
||||
if err != nil || itemDetail == nil {
|
||||
continue
|
||||
}
|
||||
mu.Lock()
|
||||
mapItemDetail[itemId] = itemDetail
|
||||
mu.Unlock()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
for itemId := range listItem {
|
||||
jobs <- itemId
|
||||
}
|
||||
close(jobs)
|
||||
|
||||
wg.Wait()
|
||||
|
||||
fileName := fmt.Sprintf("relics.%s.json", locale)
|
||||
|
||||
data, err := json.Marshal(mapItemDetail)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return os.WriteFile(fileName, data, 0644)
|
||||
}
|
||||
38
main.go
Normal file
38
main.go
Normal file
@@ -0,0 +1,38 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"hakushi-crawl/internal"
|
||||
)
|
||||
|
||||
func main() {
|
||||
listLocale := []string{
|
||||
"en", "jp", "cn", "kr",
|
||||
}
|
||||
for _, locale := range listLocale {
|
||||
fmt.Printf("Fetching character data for %s\n", locale)
|
||||
internal.SaveDataCharacter(locale)
|
||||
|
||||
fmt.Printf("Fetching lightcone data for %s\n", locale)
|
||||
internal.SaveDataLightcone(locale)
|
||||
|
||||
fmt.Printf("Fetching relic data for %s\n", locale)
|
||||
internal.SaveDataRelic(locale)
|
||||
|
||||
fmt.Printf("Fetching monster data for %s\n", locale)
|
||||
internal.SaveDataMonster(locale)
|
||||
|
||||
fmt.Printf("Fetching moc data for %s\n", locale)
|
||||
internal.SaveDataMOCEvent(locale)
|
||||
|
||||
fmt.Printf("Fetching pf data for %s\n", locale)
|
||||
internal.SaveDataPFEvent(locale)
|
||||
|
||||
fmt.Printf("Fetching as data for %s\n", locale)
|
||||
internal.SaveDataASEvent(locale)
|
||||
|
||||
fmt.Printf("Fetching peak data for %s\n", locale)
|
||||
internal.SaveDataPeakEvent(locale)
|
||||
}
|
||||
fmt.Println("DONE!")
|
||||
}
|
||||
34
utils/utils.go
Normal file
34
utils/utils.go
Normal file
@@ -0,0 +1,34 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
func GetĐataJSON[T any](url string) (*T, error) {
|
||||
req, err := http.NewRequest("GET", url, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
req.Header.Set("Content-Type", "application/json")
|
||||
|
||||
client := &http.Client{}
|
||||
resp, err := client.Do(req)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
return nil, fmt.Errorf("http status %d", resp.StatusCode)
|
||||
}
|
||||
|
||||
var data T
|
||||
if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &data, nil
|
||||
}
|
||||
Reference in New Issue
Block a user