1

I'm making a discord bot using Golang. However, I tried to get only the desired data value by calling the API, but an error occurred. The API format is {"id":"", "name":"", "level":0 ...}. I want to get the values of level and id here.

req, err := http.NewRequest("GET", "https://kr.api.riotgames.com/lol/summoner/v4/summoners/by-name/"+a, nil)
if err != nil {
   panic(err)
}

req.Header.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36")
req.Header.Add("Accept-Language", "ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7,ja-JP;q=0.6,ja;q=0.5")
req.Header.Add("Origin", "https://developer.riotgames.com")
req.Header.Add("X-Riot-Token", "RGAPI-195db001-c13f-4412-a9ee-bda6e13baa48")

client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
   panic(err)
}
defer resp.Body.Close()

bytes, _ := ioutil.ReadAll(resp.Body)
str := string(bytes)
fmt.Println(str)

return str
Ensnif
  • 19
  • 3

1 Answers1

2

Try to build a struct with expected fields and try to bind response with struct.

check here: other stack overflow binding topic

type myStruct struct {
    Id    string `json:"id"`
    Level string `json:"level"`
}
func foo () myStruct{
    var ms myStruct
    req, err := http.NewRequest("GET", "https://kr.api.riotgames.com/lol/summoner/v4/summoners/by-name/", nil)
    if err != nil {
        log.Printf("error: %s", err)
    }

    req.Header.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36")
    req.Header.Add("Accept-Language", "ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7,ja-JP;q=0.6,ja;q=0.5")
    req.Header.Add("Origin", "https://developer.riotgames.com")
    req.Header.Add("X-Riot-Token", "RGAPI-195db001-c13f-4412-a9ee-bda6e13baa48")

    var client http.Client
    resp, err := client.Do(req)
    if err != nil {
        log.Printf("error: %s", err)
    }
    defer resp.Body.Close()

    json.NewDecoder(resp.Body).Decode(&ms)

    return ms
}

can't test it properly because got 403. Also it will be good to check response status code. Also panic it's not a best way to handle and err. Server you try to reach could be down.