Сохранение данных с помощью клиента REST после использования внешнего API в Go - PullRequest
0 голосов
/ 29 мая 2018

Я новичок в Go lang создал REST-клиент, который использует alphavantage API

Структура JSON, которая появляется после того, как я выполняю запрос GETкак ниже.Мне нужны только данные ключа Time Series, чтобы я мог выполнять свои собственные расчеты.Как мне получить данные из Time Series и сохранить их, чтобы я мог самостоятельно манипулировать данными?

JSON

{
    "Meta Data": {
        "1. Information": "Intraday (1min) prices and volumes",
        "2. Symbol": "MSFT",
        "3. Last Refreshed": "2018-05-25 16:00:00",
        "4. Interval": "1min",
        "5. Output Size": "Compact",
        "6. Time Zone": "US/Eastern"
    },
    "Time Series (1min)": {
        "2018-05-25 16:00:00": {
            "1. open": "98.2700",
            "2. high": "98.4400",
            "3. low": "98.2650",
            "4. close": "98.3600",
            "5. volume": "2466507"
        }
    }
}

код для клиента REST

package main

import (
    "net/http"
    "fmt"
    "io/ioutil"
    //encode and decode JSON streams
    "encoding/json"
)



func main() {
    response, err := http.Get("https://www.alphavantage.co/query?function=TIME_SERIES_INTRADAY&symbol=MSFT&interval=1min&apikey=demo")

    if err!=nil{
        fmt.Println(err)
        return
    }
    defer response.Body.Close()
    contents, err := ioutil.ReadAll(response.Body)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(string(contents))
}

1 Ответ

0 голосов
/ 29 мая 2018

Использование интерфейса в соответствии с предложением является хорошей идеей, но в данном случае, поскольку вы знаете структуру ответа, определяющую использование явного типа, достаточно и с ним должно быть проще работать:

package main

import (
    "encoding/json"
    "fmt"
    "io/ioutil"
    "log"
    "net/http"
)

type values map[string]string
type TimeSeries struct {
    Item map[string]values `json:"Time Series (1min)"`
}

func main() {
    response, err := http.Get("https://www.alphavantage.co/query?function=TIME_SERIES_INTRADAY&symbol=MSFT&interval=1min&apikey=demo")

    if err != nil {
        fmt.Println(err)
        return
    }
    defer response.Body.Close()
    contents, err := ioutil.ReadAll(response.Body)
    if err != nil {
        fmt.Println(err)
        return
    }
    var ts TimeSeries
    err = json.Unmarshal(contents, &ts)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf("%#v", ts)
}
...