見出し画像

APIを叩いてBoxのフォルダの共有リンクを取得する

この記事に対するレスポンス。整形は後にして、とりいそぎ超特急で書きましたが、画像とかを追加しました。

Boxの開発者コンソールでの設定

1. Boxページの左下から開発者コンソールへアクセスし、そこで新規Appを作成する。

画像2

種類はカスタムアプリ。

画像2

認証方式を聞かれるが、今回の目的ではOAuth 2.0を選択。で青い作成ボタンを押す。

画像3

2. MyAppの中のConfiguration内を見て設定をチェックしていく。

・上から見ていくとOAuth 2.0 Credentials のところに、エンコードされた文字列がある。これがClient ID。その下に「Secretを取得」があればクリックして、似たような文字列を取得する。こちらはClient Secret。どちらも使うのでコピっておくが、一般には公開しないように管理する。

・Redirect URLは http://localhost/ でOK。

・Application ScopesでOAuthのプロセスで取得する権限を調整しておく。ここでは書き込み権限(2番目)をクリックしておけばよい。たぶん。

・最後に右上にある青い"Save"ボタンを押すのを忘れない。

画像4

3. APIを発動するまでがなかなか遠い。処理の流れとしては、
a) oauth2 authorizationを行う。Client IDとブラウザでの認証を使って"code"を取得する。

b) アクセストークンを取得する。Client ID、Secret、codeが必要。
ここで取得するアクセストークンを持っていれば、期間中は大事な情報を使って認証をせずともこのトークンだけでAPIをたたけるようになる。アクセストークンが期限切れ(expire)した場合、リフレッシュトークンで新しいアクセストークンを取得できるのだが、今回は単発処理のはずだから、まあいいでしょう。

c) アクセストークンを使ってAPIを叩く

OAuth2 Authorization

次のURLにブラウザでアクセスする。ここで[CLIENT_ID]を自分のClient IDに入れ替える。[]も空白もなくきっちり入れ替えないと動かない。

https://account.box.com/api/oauth2/authorize?response_type=code&client_id=[CLIENT_ID]&redirect_uri=http://localhost/

するとブラウザに認証画面が現れるので、認証する。必要ならBoxへのログインもする。

画像5

アクセスを承認すると、ブラウザがlocalhost(自分のPCをサーバーと見立てたアドレス)にリダイレクトされる。ローカルでWebサーバーが走っていなければ接続エラーになるが問題ない。本来であれば、ここで自分のアプリが動いており、このコードをすくい上げて自動処理するのであろうが、いまは手動でやるので、このURLからコードを抽出し、別の場所にコピーペーストして保管する。

画像6


アクセストークンの取得

さてここまで出来たら、token取得のURLを叩いて、その結果帰ってくる情報を受け取らないと行けない。ここではcurlコマンドを使う。

curl -i -X POST "https://api.box.com/oauth2/token" \
    -H "Content-Type: application/x-www-form-urlencoded" \
    -d "client_id=[CLIENT_ID]" \
    -d "client_secret=[CLIENT_SECRET]" \
    -d "code=[CODE]" \
    -d "grant_type=authorization_code"

ここで[CLIENT_ID]と[CLIENT_SECRET]はBoxの設定の時に取得した物にきっちり入れ替える。(空白も[]も残してはダメ)
[CODE]は先ほどの認証で取得した奴を使う。

うまくいくとこんなのが帰ってくる。

{"access_token":"kZ00wOUfe9ZSd4vyWPzoyJID2154321","expires_in":4112,"restricted_to":[],"refresh_token":"Tq5sMWbRaZNy5ir9UAo0Eb4tWQAtJgpo5Bh5DeqEaxeG1FnkjCDwTd91gi00000","token_type":"bearer"}%

この一番最初のがアクセストークンなので、コピペしておく。

このコマンドで失敗すると、もうCodeは有効でなくなってしまうようで、2度目のアクセスはできなかった。なので、うまく行かなかったら、先の「認証」と「トークン取得」は連続でやる方が良い。

WindowsでもCurlは利用できるようである。

Box APIを発動させる

アクセストークンを手に入れたら権限内の作業ができるようになる。ただし、時間が経つと消滅してしまう(上記の例では4112秒なのかな?)。

今回の場合、すでに準備してあるフォルダにWeb共有リンクをパスワード付きで発行すると言うことにする。APIの説明はこちら

あらかじめ対象のフォルダのIDは調べておく。きちんとしたやり方はあると思うが、今回は単純にそのフォルダに行ってURLを調べた。

https://xxxx.app.box.com/folder/12349495176870

この場合12349495176870がそのフォルダのIDである。このフォルダに共有リンクを付与する。

curl -i -X PUT "https://api.box.com/2.0/folders/12349495176870?fields=shared_link" \
    -H "Authorization: Bearer [ACCESS TOKEN]" \
    -d '{
      "shared_link": {
        "access": "open",
        "password": "mypassword",
        "unshared_at": "2021-12-12T10:53:43-08:00",
        "permissions": {
          "can_download": false
        }
      }
    }'

この場合、パスワードはmypassword。省略もできる。Expire Dateも設定可能。帰ってくる文字列はつぎのようになっている。(うわ、みにくい)

{"type":"folder","id":"12349495176870","etag":"0","shared_link":{"url":"https:\/\/xxxx.box.com\/s\/yrtuvbwe73rs7ln12i6bwzwrbb43210","download_url":null,"vanity_url":null,"vanity_name":null,"effective_access":"open","effective_permission":"can_preview","is_password_enabled":true,"unshared_at":"2021-12-12T10:53:43-08:00","download_count":0,"preview_count":0,"access":"open","permissions":{"can_preview":true,"can_download":false}}}%

ここで得られた

https:\/\/xxxx.box.com\/s\/yrtuvbwe73rs7ln12i6bwzwrbb43210 

の\/のエスケープを取り除いて\にしたものが共有リンクである。

実用上は

これだけやってようやくフォルダひとつ共有にして、しかもURLは手動でしか得られていないので、メールに貼り付けてとか辛すぎ…

なのでこれをGAS / google spreadsheet / gmailと組み合わせるのが吉である。アクセストークンの取得まではまあ手動でやってもOKでしょう。

そのアクセストークンを使ったAPIの利用と返り値の処理、それをスプレッドシートで管理し、GMAILに貼り付ける部分はGASでできるでしょう。

GASでやる方法についてはこのリンクが良い感じです。

今日のところは以上で。

#Box #BoxAPI #BoxCLI #処理自動化 #OAUTH2

いいなと思ったら応援しよう!