CLIでAmazon Drive / Photosに画像ファイルをアップロードする odrive版

以前書いた、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ですね。

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に付いてくる付加機能は個人的には不要なので。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

Close Bitnami banner
Bitnami