プログラミング雑記帳

online-judge-tooolsでAtCoderのテストケースを取得できない

verification-helperAtCoderを使ってVerifyしようと思ったのですが、案内されるDropboxのアプリがおそらく追加のユーザーを受け付けていないため、うまくできませんでした。

同じ問題で Issue も立てられていますが、それに対する反応はありません。

そこで、Dropboxのアプリを自分で作成してアクセストークンを入手することにしました。

Dropboxアカウントの作成

省略します。

Dropboxアプリの作成

Dropbox Developers からアプリを作成します。

  1. Choose an API: Scoped access
  2. Choose the type of access you need: Full Dropbox
  3. Name your app: 適当に決めてください

App key と App secret の取得

アプリを作成するとアプリの設定ページが表示されます。 その中に App key と App secret という項目があると思うのでこれをメモしておきます。

追記

設定ページの下の方に Generated access token があります。 これを利用する場合は、Permission の変更だけすればよいです。 もしかしたら Permission の変更をしなくてもできるかもしれませんが、試していません。

Permission の変更

このままだと oj からファイルの読み込み等ができないので権限を変更します。 設定ページの Permissions タブから files.metadata.readsharing.read にチェックを入れて保存します。 oj では Dropbox API v2/list_folder/get_shared_link_file を使用しているらしいので、これらにチェックを入れています。

アプリへのログイン

https://www.dropbox.com/oauth2/authorize?client_id=${APP_KEY}&response_type=code にアクセスします(${APP_KEY} の部分は各自変更してください)。 適当に許可していくと、アクセスコードが生成されるのでこれもメモしておきます。

アクセストークンの取得

curl https://api.dropbox.com/oauth2/token --user ${APP_KEY}:${APP_SECRET} --data grant_type=authorization_code --data code=${ACCESS_CODE}

これを上でメモしたものに置き換えて実行します。 そうするとJSON形式で帰ってくるので、その中の access_token をメモしておきます。

たまに期限切れなどとでることがあるので、その時はアクセスコードをもう一度生成します。リロードで再生成されると思います。

テストケースを取得できるか確認

oj download https://atcoder.jp/contests/agc001/tasks/agc001_a --system --dropbox-token=${ACCESS_TOKEN}

これをメモしたものに置き換えて実行して、成功すれば問題ないです。 実行するとファイルが作られるので問題ない場所で実行してください。 実行する前に ojAtCoder にログインしておいてください。