masarasiの日記

私は Mackerel CRE テクニカルサポート担当です。

Go言語でAPIを実行するプログラムを作る②

masarasi.hatenablog.com

続き

残作業(前回より)

  • 企業 ID やアクセストークンは変数で渡したい(そもそも出来るかはわからない)
  • POST メソッドで打刻するプログラムに変更する
  • UI を作る

AKASHI 公開 API について

前回、AKASHI の API について全く触れていなかったので、ここで整理。

AKASHI の 公開 API は以下。

AKASHI 公開API 仕様

現在、とりあえず API を実行する検証として、以下の打刻情報取得を行っているところ。

6.7 打刻情報取得API

打刻情報取得 API の実行には以下が必要。

  • ログイン企業ID
  • トークン(token) - 自分の ID に API の実行権限が必要(管理者に付与してもらう)。マイページから発行する。
  • 開始日時(start_date)
  • 終了日時(end_date)
  • 従業員ID

ログイン企業ID、トークン、従業員ID については毎回固定なのでコードに埋め込みでもよさそう。 開始日時と終了日時は実行の度に変えたいので、コマンドライン引数で渡せるようにしたい。

進捗②

調べると flag パッケージを使うとコマンドライン引数をうまく処理してくれそう。 というわけで開始日時と終了日時をコマンドライン引数で渡せるように改修した。 コードの内容は以下。主に前回からの変更部分のみ記載。

func main() {
    // オプションを定義
    var startDate string
    flag.StringVar(&startDate, "start_date", "", "Start Date")
    var endDate string
    flag.StringVar(&endDate, "end_date", "", "End Date")
    flag.Parse()

    // 空のurl.URL構造体のポインタ
    u := &url.URL{}

    〜〜〜〜〜

    // クエリマップに値をセット
    q.Set("end_date", endDate)
    q.Set("start_date", startDate)
    q.Set("token", "<アクセストークン>")

実行方法

go run ak4.go -start_date=20220301000000 -end_date=20220331000000

※取得範囲 2022/3/1 〜 2022/3/31

難しかったところ

ググるとたくさんやり方が出てくるのでどの方法でやればいいのか困った。とりあえずうまくいったけど、オプションが増えるとこのやり方ではしんどいと思うので、もっとスマートな方法はあると思う。flags パッケージとかは構造体を使っていい感じにやってくれそうだったけど、今の自分には扱えそうになかった。

残る作業

  • POST メソッドで打刻するプログラムに変更する
    • サブコマンドでこれまでの情報取得と打刻の両方が出来るようにしたいと思い始めた
  • UI を作る