Elixir
GoogleSpreadSheet

ElixirでGoogle APIを使う

ElixirからGoogle APIを使った。
ライブラリがSwaggerをつかってコード生成されてることもあってか使い方が初見殺しなのでメモ残しておく。

具体的なほうがわかりやすいので、Spreadsheetを例にする。

SpreadsheetのAPIを使いたい場合はgoogle_api_sheetsを使うことになる。APIごとにgoogle_api_xxxが存在します。

ドキュメントは下記URLで閲覧することができるが、初見はどこからみればいいのか大変わかりづらいです。
https://hexdocs.pm/google_api_sheets/api-reference.html

まず先に、Google Sheetsの開発者ドキュメントを眺めたほうが良いです。
IDの確認方法や必要な概念の説明どが書かれているのでサラッと確認しておくほうが良いです。

APIの一覧が確認したいならこちら。

このAPIと対応するものが、APIモジュール内で提供されている。
Sheetsの場合はGoogleApi.Sheets.V4.Api.Spreadsheetsとなる。

Spreadsheetで最初によくつかいたくなるのは読み込みだと思う。
読み込みはspreadsheets.values.getを用いる。

https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets.values/get

対応する関数は sheets_spreadsheets_values_get/4になる。
https://hexdocs.pm/google_api_sheets/GoogleApi.Sheets.V4.Api.Spreadsheets.html#sheets_spreadsheets_values_get/4

第一引数のConnectionはGoogleApi.Sheets.V4.Connectionである。API毎にあります。
https://hexdocs.pm/google_api_sheets/GoogleApi.Sheets.V4.Connection.html#content

作成方法は、new/0new/1を使って作ります。

new/1の引数tokenはGothを用いて生成することになります。
Gothの詳細は省く。

elixir-google-apiの情報も役に立つと思います。
https://github.com/googleapis/elixir-google-api

具体例

configにGothの設定が必要ですが、下記のコードで取得できるはずです。

def get() do
  alias GoogleApi.Sheets.V4.Connection
  import GoogleApi.Sheets.V4.Api.Spreadsheets

  {:ok, token} = Goth.Token.for_scope("https://www.googleapis.com/auth/spreadsheets.readonly")
  conn = Connection.new(token.token)  # token.token を渡す点に少し注意
  sheetID = "XXXXX" # 自分で用意してください
  range = "A1:A2000" # A列を20000行まで(2000行までなくても値があるところまでとれる)
  sheets_spreadsheets_values_get(conn, sheetID, "A1:A2000")
end
get()