Pixela の Go クライアント pixela4go を作りました。
Pixela の Go クライアント pixela4go を作りました。
Pixela とは?
任意の数値を登録してアレのあれっぽくグラフを作れるクールな API サービスです。
詳しくは↓
使い方
package main import ( "log" "github.com/ebc-2in2crc/pixela4go" ) func main() { client := pixela.New("YOUR_NAME", "YOUR_TOKEN") // 新しいユーザーを作る uci := &pixela.UserCreateInput{ AgreeTermsOfService: pixela.Bool(true), NotMinor: pixela.Bool(true), ThanksCode: pixela.String("thanks-code"), } result, err := client.User().Create(uci) if err != nil { log.Fatal(err) } if result.IsSuccess == false { log.Fatal(result.Message) } // 新しい slack チャンネル を作る cci := &pixela.ChannelCreateInput{ ID: pixela.String("channel-id"), Name: pixela.String("channel-name"), Type: pixela.String(pixela.ChannelTypeSlack), SlackDetail: &pixela.SlackDetail{ URL: pixela.String("https://hooks.slack.com/services/xxxx"), UserName: pixela.String("slack-user-name"), ChannelName: pixela.String("slack-channel-name"), }, } result, err = client.Channel().Create(cci) if err != nil { log.Fatal(err) } if result.IsSuccess == false { log.Fatal(result.Message) } // 新しいグラフを作る gci := &pixela.GraphCreateInput{ ID: pixela.String("graph-id"), Name: pixela.String("graph-name"), Unit: pixela.String("commit"), Type: pixela.String(pixela.GraphTypeInt), Color: pixela.String(pixela.GraphColorShibafu), TimeZone: pixela.String("Asia/Tokyo"), SelfSufficient: pixela.String(pixela.GraphSelfSufficientIncrement), IsSecret: pixela.Bool(true), PublishOptionalData: pixela.Bool(true), } result, err = client.Graph().Create(gci) if err != nil { log.Fatal(err) } if result.IsSuccess == false { log.Fatal(result.Message) } // 値をピクセルに記録する pci := &pixela.PixelCreateInput{ Date: pixela.String("20180915"), Quantity: pixela.String("5"), GraphID: pixela.String("graph-id"), } result, err = client.Pixel().Create(pci) if err != nil { log.Fatal(err) } if result.IsSuccess == false { log.Fatal(result.Message) } // 新しい通知ルールを作る nci := &pixela.NotificationCreateInput{ GraphID: pixela.String("graph-id"), ID: pixela.String("notification-id"), Name: pixela.String("notification-name"), Target: pixela.String(pixela.NotificationTargetQuantity), Condition: pixela.String(pixela.NotificationConditionGreaterThan), Threshold: pixela.String("3"), RemindBy: pixela.String("23"), ChannelID: pixela.String("channel-id"), } result, err = client.Notification().Create(nci) if err != nil { log.Fatal(err) } if result.IsSuccess == false { log.Fatal(result.Message) } // 新しい webhook を作る wci := &pixela.WebhookCreateInput{ GraphID: pixela.String("graph-id"), Type: pixela.String(pixela.WebhookTypeIncrement), } webhook, err := client.Webhook().Create(wci) if err != nil { log.Fatal(err) } if webhook.IsSuccess == false { log.Fatal(webhook.Message) } // webhook を呼び出す wii := &pixela.WebhookInvokeInput{WebhookHash: pixela.String("webhook-hash")} result, err = client.Webhook().Invoke(wii) if err != nil { log.Fatal(err) } if result.IsSuccess == false { log.Fatal(result.Message) } }
現時点の Pixela の最新バージョンの v1.18.0 のすべての API をサポートしています。
インストール
$ go get -u github.com/ebc-2in2crc/pixela-client-go
動機
Pixela はシンプルでいろんなことに応用できるとても便利な API サービスです。
実は pixela-client-go という Pixela の Go クライアントを作って公開しているのですが、実装があまりよくなく、Pixela のアップデートへ追従することにつらみを感じていたため、車輪を再発明してしまいました。
また、pixela-client-go は API のパラメーターがプリミティブ型が多くて渡すものを間違えたり、引数を省略できなかったりな使いにくさを感じていました。 pixela4go は API のパラメーターが構造体になっているので引数を間違えたりしにくくなっており、引数を省略することもできるのため、かなり使いやすくなっています。
pixela4go という名前
Twitter4J みたいな <サービス名>4<言語名>
ネーミングをしてみたかったので。
まとめ
バグとかあると思いますし、「こーしたら使いやすくなる」とかあったら issue や PR を作ったり、Twitter で声をかけてもらえると嬉しいです。
ということで Pixela の Go クライアント pixela4go の紹介でした。