なんかいいの発見。
何かで API を云々だったので使ってみようかな。
とりあえず
CircleCI のヤツを云々してみるか。とりあえず GET:/me
してみます。サンプルをコピペして以下。
package main
import (
"fmt"
"gopkg.in/h2non/gentleman.v0"
)
func main() {
// Create a new client
cli := gentleman.New()
// Define base URL
cli.URL("http://circleci.com/api/v1/me?circle-token=fugahoge")
// Create a new request based on the current client
req := cli.Request()
// Perform the request
res, err := req.Send()
if err != nil {
fmt.Printf("Request error: %s\n", err)
return
}
if !res.Ok {
fmt.Printf("Invalid server response: %d\n", res.StatusCode)
return
}
// Reads the whole body and returns it as string
fmt.Printf("Body: %s", res.String())
}
とりあえず go build
する前に
$ go get gopkg.in/h2non/gentleman.v0
が必要でした。というか gentleman 楽ですね。
POST もしてみます
例示されてるサンプルに沿って、あとスルして rochefort/gem-search
なソレを folk させて頂いております。
package main
import (
"fmt"
"gopkg.in/h2non/gentleman.v0"
// "gopkg.in/h2non/gentleman.v0/plugins/body"
)
func main() {
// Create a new client
cli := gentleman.New()
// Define the Base URL
cli.URL("https://circleci.com/api/v1/project/yamanetoshi/gem-search/tree/master?circle-token=fugahoge")
// Create a new request based on the current client
req := cli.Request()
// Method to be used
req.Method("POST")
// Define the JSON payload via body plugin
// data := map[string]string{"parallel": "null"}
// req.Use(body.JSON(data))
// Perform the request
res, err := req.Send()
if err != nil {
fmt.Printf("Request error: %s\n", err)
return
}
if !res.Ok {
fmt.Printf("Invalid server response: %d\n", res.StatusCode)
return
}
fmt.Printf("Status: %d\n", res.StatusCode)
fmt.Printf("Body: %s", res.String())
}
ちなみに、上記な API ですが、一度は CircleCI の Web な i/f からプロジェクトを登録 (追加) しておく必要があるようでした。これってどうなんだろう。微妙と言わざるを得ないっす。
もひとつ
POST なソレは https になってないと 301 が戻ってきました。GET だと大丈夫だったのですが、これってどうなんでしょ。
json デコード
encoding/json
なナニを import してレスポンスな文字列を
output := Output{}
err = json.Unmarshal(body, &output)
if err != nil {
fmt.Println(err.Error())
return
}
というカンジで良いのかどうか
駄目ぽ
どうも変換に失敗してるみたい。どうも json.Unmarshall では
- レスポンス文字列の []byte なナニを渡す
- 構造体を渡す
必要があるようで以下なソレを定義して
type Output struct {
In_beta_program bool
Selected_email string
Avatar_url string
Name string
Login string
Github_id int32
}
さしげる必要があったようです。先頭が大文字になってないと駄目みたい。あと snakecase なナニは InBetaProgram
とかってするのかと思ってたらそうでもなかったです。