以前書いた、acd_cliというCLI(GUIなしコマンド)でのAmazon Drive操作を可能にする素晴らしいツールが突然使えなくなってしまい、詳しい原因を調べもせずに諦めていました。
今現在も使えないことに変わりないのですが、Prime会員特典であるPhoto無制限アップロードを使わない手はないので、自力でAmazon Drive APIを駆使して同期するツールを作ろうかと思ったら、リンク先にある通り新規利用申請を受け付けていないとのこと。まじか。
今更ながらacd_cliが使えなくなった原因を調べてみると、以下の記事を発見しました。
https://www.reddit.com/r/DataHoarder/comments/6eebn1/amazon_banned_acd_cli_and_similiar_clients_again/
最初の一文が原因ですね。要約すると、他人のAPI keyを共有して使いまわしていたために利用規約違反でBANされたと。
acd-cli was never unbanned, they simply used another Developers API key (with permission I believe from the developer but not Amazon) this developer sharing the API key with acd-cli was likely a Terms of Service violation
それならacd_cliに代わるアプリケーションを探してみましょう。
rclone
上記の記事でも挙がっていたrcloneですが、noteに書いてある通りAmazon Drive API新規利用不可のためKeyが取得できず、使えませんね。あっけなく脱落。
Important: rclone supports Amazon Drive only if you have your own set of API keys. Unfortunately the Amazon Drive developer program is now closed to new entries so if you don’t already have your own set of keys you will not be able to use rclone with Amazon Drive.
For the history on why rclone no longer has a set of Amazon Drive API keys see the forum.
If you happen to know anyone who works at Amazon then please ask them to re-instate rclone into the Amazon Drive developer program - thanks!
odrive
Amazon Driveをキーワードに指定してググっていると、odriveというサービスを発見しました。Amazon Drive含む各種クラウドストレージサービスを統合して、ファイルの同期や共有を可能にするとのこと。クラアントアプリケーションはWindows版はもちろん、macOS/Linux版も提供されてる。これは期待できるのでは?GUI版しかないと困るのだけれど。
早速ユーザ登録してサインインしてみると、ダッシュボードの下の方にLinux Agentの文字が!(ただしBeta)
試してみた結果、これは良さそうです。以下に具体的な使い方を書きます。
DOWNLOAD CLI SYNC CLIENT
主要なプラットフォーム向けのCLIバイナリが用意されています。フロントはPythonですね。
- odrive CLI (Python): https://dl.odrive.com/odrive-py
- odrive CLI (Linux 32bit binary): https://dl.odrive.com/odrivecli-lnx-32
- odrive CLI (Linux 64bit binary): https://dl.odrive.com/odrivecli-lnx-64
- odrive CLI (OS X binary): https://dl.odrive.com/odrivecli-osx
- odrive CLI (Windows binary): https://dl.odrive.com/odrivecli-win
- odrive CLI (RPi/ARMv6 binary): https://dl.odrive.com/odrivecli-rpi
Linux 64bit版のインストールとAgentの起動
Usage Guideの通り、以下のコマンドを実行すればインストール完了です。
od="$HOME/.odrive-agent/bin" && \ curl -L "http://dl.odrive.com/odrive-py" --create-dirs -o "$od/odrive.py" && \ curl -L "http://dl.odrive.com/odriveagent-lnx-64" | \ tar -xvzf- -C "$od/" && \ curl -L "http://dl.odrive.com/odrivecli-lnx-64" | \ tar -xvzf- -C "$od/"
Usage Guideはnohupで簡易的にデーモン化してますが、start-stop-daemon使ったり、systemdの設定をした方が個人的には好み。あとで何とかしようと思います。
nohup "$HOME/.odrive-agent/bin/odriveagent" > /dev/null 2>&1 &
odrive CLIヘルプ
主要機能は押さえてある感じがします。
$ python "$HOME/.odrive-agent/bin/odrive.py" -h usage: odrive.py [-h] {authenticate,mount,unmount,backup,removebackup,sync,stream,refresh,unsync,xlthreshold,encpassphrase,syncstate,status,deauthorize,emptytrash,restoretrash,shutdown} ... odrive Make Cloud Storage THE WAY IT SHOULD BE. positional arguments: {authenticate,mount,unmount,backup,removebackup,sync,stream,refresh,unsync,xlthreshold,encpassphrase,syncstate,status,deauthorize,emptytrash,restoretrash,shutdown} commands authenticate authenticate odrive with an auth key mount mount remote odrive path to a local folder unmount remove a mount backup backup a local folder to a remote odrive path removebackup remove a backup job sync sync a placeholder stream stream placholder/remote file eg. stream path | app - or stream to a file eg. stream path > file.ext refresh refresh a folder unsync unsync a file or a folder xlthreshold split files larger than this threshold encpassphrase specify a passphrase for Encryptor folders syncstate get sync status info status get status info deauthorize deauthorize odrive to unlink the current user and exit emptytrash empty odrive trash restoretrash restore odrive trash shutdown shutdown odrive optional arguments: -h, --help show this help message and exit
Amazon Drive / Photoのファイル操作
早速、Amazon Driveにコマンドでファイル操作を試していきます。
authenticate(認証)
Usage Guideに記載されている通りに、まずは認証コードをCLIツールに登録します。
Once you have signed-in, navigate to your Authentication Codes and click on “Create Auth Key” to create an auth key that you can then use to authenticate your odrive Sync Agent install.
$ python "$HOME/.odrive-agent/bin/odrive.py" authenticate 00000000-0000-0000-0000-000000000000-00000000 Hello 安藤敬資
認証に成功すると、初期状態では下記ファイル構成だったのが
$ tree .odrive-agent/ └── bin ├── odrive ├── odrive.py └── odriveagent
下記のようにそれっぽいdbが生成されます。
$ tree .odrive-agent/ ├── bin │ ├── odrive │ ├── odrive.py │ └── odriveagent ├── db │ ├── backups │ ├── integrations │ ├── odrive-agent-db │ ├── odrive-agent-id │ ├── odrive.db │ ├── odrive.db-shm │ ├── odrive.db-wal │ └── tracking.db └── log ├── agent.log └── error.log
mount
Amazon Driveをマウントしてみましょう。
$ sudo mkdir /mnt/odrive $ python "$HOME/.odrive-agent/bin/odrive.py" mount /mnt/odrive / /mnt/odrive is now synchronizing with odrive.
あっさりできた。
backup(アップロード)
いよいよAmazon Driveへのファイルアップロード。これにはbackupサブコマンドを使います。
$ python "$HOME/.odrive-agent/bin/odrive.py" backup \ /symlinks/pictures/デジカメ写真/2019/08/20190816/ \ /Amazon\ Cloud\ Drive/写真/2019/08/
できた。
sync(ダウンロード)
こちらはsyncサブコマンドをファイルごとに実行する必要があり、めんどくさいんですが問題なくできました。
$ python "$HOME/.odrive-agent/bin/odrive.py" sync /mnt/odrive/Amazon\ Cloud\ Drive.cloudf /mnt/odrive/Amazon Cloud Drive $ python "$HOME/.odrive-agent/bin/odrive.py" sync /mnt/odrive/Amazon\ Cloud\ Drive/写真.cloudf /mnt/odrive/Amazon Cloud Drive/写真 build@espresso:~$ python "$HOME/.odrive-agent/bin/odrive.py" sync /mnt/odrive/Amazon\ Cloud\ Drive/写真/2019.cloudf /mnt/odrive/Amazon Cloud Drive/写真/2019 build@espresso:~$ python "$HOME/.odrive-agent/bin/odrive.py" sync /mnt/odrive/Amazon\ Cloud\ Drive/写真/2019/08 Unable to sync 08. Please use a placeholder path. build@espresso:~$ python "$HOME/.odrive-agent/bin/odrive.py" sync /mnt/odrive/Amazon\ Cloud\ Drive/写真/2019/08.cloudf /mnt/odrive/Amazon Cloud Drive/写真/2019/08 build@espresso:~$ python "$HOME/.odrive-agent/bin/odrive.py" sync /mnt/odrive/Amazon\ Cloud\ Drive/写真/2019/08/20190815.cloudf /mnt/odrive/Amazon Cloud Drive/写真/2019/08/20190815 $ ls /mnt/odrive/Amazon\ Cloud\ Drive/写真/2019/08/20190815/*.cloud | while read line; do python "$HOME/.odrive-agent/bin/odrive.py" sync "$line" done /mnt/odrive/Amazon Cloud Drive/写真/2019/08/20190815/DSC_9244.JPG /mnt/odrive/Amazon Cloud Drive/写真/2019/08/20190815/DSC_9244.NEF /mnt/odrive/Amazon Cloud Drive/写真/2019/08/20190815/DSC_9246.JPG /mnt/odrive/Amazon Cloud Drive/写真/2019/08/20190815/DSC_9246.NEF /mnt/odrive/Amazon Cloud Drive/写真/2019/08/20190815/DSC_9247.JPG /mnt/odrive/Amazon Cloud Drive/写真/2019/08/20190815/DSC_9247.NEF /mnt/odrive/Amazon Cloud Drive/写真/2019/08/20190815/DSC_9248.JPG /mnt/odrive/Amazon Cloud Drive/写真/2019/08/20190815/DSC_9248.NEF /mnt/odrive/Amazon Cloud Drive/写真/2019/08/20190815/DSC_9249.JPG /mnt/odrive/Amazon Cloud Drive/写真/2019/08/20190815/DSC_9249.NEF /mnt/odrive/Amazon Cloud Drive/写真/2019/08/20190815/IMG_3300.JPG
まとめ
odriveで問題なし。Amazon Driveにコマンドでファイルをバックアップする程度の用途なら、odriveのFreeプランで問題ないと思います。Premiumに付いてくる付加機能は個人的には不要なので。