最近は調整とエクセルのメンテばかりでやさぐれているので隙を見ては go の勉強がてらエクセルを生成してみたりチケットの内容をエクセルに反映してみたりしてる。 redmine のチケットのステータスを取りたくてググってみたのだけどサクッと引っかからなかったので書いてみたら案外いけた。未だに作法がよく分かってない。
package main import ( "encoding/json" "errors" "fmt" "io/ioutil" "net/http" "strconv" ) type Issue struct { Id int `json:"id"` Subject string `json:"subject"` Status Status `json:"status"` } type Status struct { Id int `json:"id"` Name string `json:"name"` } func main() { issue, err := fetch(1) if err != nil { fmt.Println(err) return } fmt.Printf("#%d %s\n",issue.Id, issue.Subject) fmt.Printf("%s (%d)\n", issue.Status.Name, issue.Status.Id) } func fetch(id int) (*Issue, error) { url := "https://www.redmine.org/issues/" + strconv.Itoa(id) + ".json" res, err := http.Get(url) if err != nil { return nil, err } bytes, err := ioutil.ReadAll(res.Body) if err != nil { return nil, err } dict := map[string]*Issue{} if err := json.Unmarshal(bytes, &dict); err != nil { return nil, err } issue, ok := dict["issue"] if !ok { return nil, errors.New("no ticket") } return issue, nil }