Boxはストレージサービス。
BoxからAPIを用いてRubyでファイルを取得する。
Boxアプリを作る
非公開のBoxアプリを作る。
Box Developersにアクセスし、「アプリの新規作成」
認証方法はとりあえずオススメの「JWTを使用したOAuth 2.0(サーバー認証)」
アプリ名は適当で可(使われた事があるものはNGになる模様?)
gemをインストールする
Box用のgemはBoxrという(公式)。
gem install boxr
する。
トークンを取得する
Box Developersの以下の箇所からトークンをメモする。
使用中のアプリケーション>(作ったアプリ)>構成>Developerトークン
※書かれている通り、60分毎にトークンが無効になる。無かったらボタンを押して新しいトークンを生成する。
コードを書く
Excelを1ファイル取得するコードを書いてみる。
require "boxr"
# 先程メモしたトークンを貼り付ける
BOX_DEVELOPER_TOKEN = "hogetoken".freeze
client = Boxr::Client.new(BOX_DEVELOPER_TOKEN)
# フォルダのオブジェクトを取得
folder_obj = client.folder_from_path("/hoge/fuga")
# フォルダ内を検索する
results = client.search("abc", file_extensions: ["xls", "xlsx"], ancestor_folder_ids: [folder_obj.id], content_types: ["name"], type: "file")
# 検索結果をループする
results.each do |file|
# 類似性のあるファイルがたくさん検索にかかるので、
# 本当に対象のファイルなのかの判断は検索結果を見つつ調整する必要がある
if file.name =~ /abc.xlsx?\z/
open(file.name, "w") do |out|
# ファイルをダウンロードする
out.write(client.download_file(file))
end
end
end
これで対象のExcelファイルが取得できた。
リファレンス
公式のリファレンスとBoxrのREADMEに用意されているが、1ページでひたすら長く、分かりやすいとも言えず、色々試してみないと分からない点もある。