MEGAからAmazon Photosに写真を移管

# 概要
[MEGA](https://mega.io/ja)にアップロードしていた写真を一括で[Amazon Photos](https://www.amazon.co.jp/b?ie=UTF8&node=5262648051)に移し替えました。
その方法の備忘録です。
やることは単純で、以下2つになります。
1. MEGAから写真をローカルにダウンロード
1. ODirveを使用し、ローカルに保存した写真をAmazon Drive(≒Amazon Photos)にバックアップ

## 環境
- WSL2 Ubuntu-20.04
- Python 3.8.10

## MEGA-CMD

MEGAをコマンドライン上で操作するために[MEGA-CMD](https://mega.io/ja/cmd#downloadapps)を利用します。
（[Pythonのモジュール](https://github.com/odwyersoftware/mega.py)もありますが、メンテされてなくて非推奨です）

### アプリダウンロード, インストール

https://mega.io/ja/cmd#downloadapps
サイト下にWindows, Mac, Linuxのアプリがそれぞれ用意されているので、環境にあったものをダウンロード, インストールします。

```bash
sudo apt install /path/to/downloaded/megacmd-xUbuntu_20.04_amd64.deb
```

### ログイン, ダウンロード
https://github.com/meganz/MEGAcmd/blob/master/UserGuide.md
ユーザーガイドに沿ってログインし、写真をフォルダごとダウンロードします。

- [ログイン](https://github.com/meganz/MEGAcmd/blob/master/UserGuide.md#login)
```bash
mega-login email password
```
```mega-xxx```でMEGAcmd serverをバックグラウンドで実行することができます。
一方、`mega-cmd`ではインタラクティブモードでコマンドを実行することもできます。

> passwordを平文で入れなきゃいけないところが🤮

- [ダウンロード](https://github.com/meganz/MEGAcmd/blob/master/UserGuide.md#get)
```bash
mega-get remotepath localpath
```
試しに1フォルダだけダウンロードした結果↓↓
![SnapCrab_NoName_2023-6-24_17-3-55_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392448/cae92dfc-26ad-a6fa-bcea-28d2aeaf3339.png)

## ODrive
次に[ODrive](https://www.odrive.com/homepage5b)というサービスを使用してAmazon Driveに写真をアップロードします。
このサービスを通じて複数のクラウドストレージを管理できます。
ただし、MEGAはサポートしていません:cry:
そのため、今回はCLI機能を使用しローカルのファイルをクラウドにアップロードしていきます。

### ダウンロード, Client起動
基本的に[Guides](https://docs.odrive.com/docs/odrive-sync-agent)に沿って操作を行っていくだけです。
- [CLI Clientのダウンロード, インストール](https://docs.odrive.com/docs/odrive-sync-agent#install-on-linux)
```bash
od="$HOME/.odrive-agent/bin" && curl -L "https://dl.odrive.com/odrive-py" --create-dirs -o "$od/odrive.py" && curl -L "https://dl.odrive.com/odriveagent-lnx-64" | tar -xvzf- -C "$od/" && curl -L "https://dl.odrive.com/odrivecli-lnx-64" | tar -xvzf- -C "$od/"
```

- [Client起動](https://docs.odrive.com/docs/odrive-sync-agent#run-on-linux)
```bash
nohup "$HOME/.odrive-agent/bin/odriveagent" > /dev/null 2>&1 &
```

- 起動確認
```bash
python "$HOME/.odrive-agent/bin/odrive.py" -h
```

### Webでの操作

https://docs.odrive.com/docs/odrive-sync-agent#using-the-cliagent-all-platforms
Web上でサービスにサインインします。Googleのアカウントを使用しました。
サインインするとサービスのホーム画面が表示され、現在リンクしているクラウドサービスの一覧が表示されます。
`+ Link Storage`をクリックし、Amazon DriveをODriveとリンクさせます。

次にローカルからODriveに接続するために`Auth Key`を作成します。
[Auth Key](https://www.odrive.com/account/authcodes)のページの`Create Auth Key`をクリックし、適当な名前をつけてAuth Keyを作成しコピーしておきます。

### 認証

上述でコピーしておいたAuth Keyを使って認証します。
```bash
python "$HOME/.odrive-agent/bin/odrive.py" authenticate 00000000-0000-0000-0000-000000000000-00000000
```

### アップロード

ローカルに保存したフォルダをリモート=Amazon Driveにアップロードします。
`backup`コマンドを使用します。

:::note warn
`backup`コマンドはODriveの[Premium会員の機能](https://docs.odrive.com/docs/free-vs-premium-capabilities)になります。
アカウント作成後、7日間は無料でPremium会員の機能を使用できるのでその期間中にやりました。
:::

```bash
python "$HOME/.odrive-agent/bin/odrive.py" backup localpath remotepath
```
remotepathは`'/Amazon Drive/Pictures/Web'`を指定しています。

バックアップの状況は`status`コマンドで確認できます。
```bash
python "$HOME/.odrive-agent/bin/odrive.py" status --backups
```

バックアップが終わり、Amazon Photos上で写真が閲覧できることを確認しました。
![SnapCrab_NoName_2023-6-24_17-6-4_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392448/50879464-1e8b-3721-9902-129651bd114d.png)

## 再びMEGA-CMD
### 一括ダウンロード

shellファイルを書いてMEGAにあげているファイルを一括でダウンロードしていきます。
```shell
#!/bin/bash

mega-login email password

mega-cd 写真
dirNames=(`mega-ls`)

for dirName in ${dirNames[@]}; do
    echo "${dirName}"
    mega-get "${dirName}" photos
done

mega-logout
```

上げていた写真は`写真`フォルダ配下に旅行先や科学館・美術館などの展示会の名前でフォルダ分けされているので、まずディレクトリを移動します。
次に`ls`コマンドでフォルダ名を配列に入れ、ループ処理で1フォルダずつダウンロードしました。
（`写真`フォルダごとダウンロードしようとしたら、すぐダウンロードが止まってしまったため）

## 再びODrive

### バックアップ
ダウンロードは時間がかかるため、この間に部屋のお掃除をします。
ダウンロードが終わったらODriveのバックアップを実行します。
```bash
python "$HOME/.odrive-agent/bin/odrive.py" backupnow
```
1度`backup`で指定したローカルのディレクトリを再びバックアップさせる場合は、`backupnow`を実行することでバックアップのタスクを開始させることができます。

アップロードにも時間がかかるため、この間にお買い物に行きます。
こうして無事にMEGAからAmazon Photosに写真を移し替えることができました。

## 背景とか
旅行や展示会に行ったときなどに写真を撮ることが趣味で、その写真をMEGAに保存していました:camera:

私がMEGAを使い始めた当時（多分2014年ぐらい）は[無料で50GB](https://www.macotakara.jp/etc/internet/entry-18971.html)使えるクラウドでした。[^1]
その後[Amazon Photosのサービス](https://www.itmedia.co.jp/dc/articles/1601/21/news095.html)が始まり、社会人になってからPrime会員になってAmazon Photosも利用するようになりました。[^2]

カメラで撮った写真はMEGA、スマホはAmazon Photos（自動アップロード設定）で管理していました。
ただ二重管理がめんどくなったのと、50GBもいずれ埋まるだろうと思いAmazon Photosで管理することにしました。
Amazon Photosでは、[フォルダ分けをすることはできませんがアルバムを作成する機能はある](https://jp.amazonforum.com/s/question/0D54P00008TpYyQSAV/prime-photos%E3%81%AE%E3%82%A2%E3%83%AB%E3%83%90%E3%83%A0%E3%82%92%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E5%88%86%E3%81%91%E3%81%97%E3%81%9F%E3%81%84)ので、それを利用して写真を分類分けしています。

アルバムの作成は[Amazon Photos上でAmazon Driveのフォルダを指定して個別に作成できる](https://jp.amazonforum.com/s/question/0D56Q00008D2RGZSA3/amazondrive%E3%81%A7%E4%BD%9C%E6%88%90%E3%81%97%E3%81%9F%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E3%82%92amazonphotos%E3%81%AE%E3%82%A2%E3%83%AB%E3%83%90%E3%83%A0%E3%81%B8%E5%A4%89%E6%8F%9B%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E3%81%8A%E3%82%88%E3%81%B3amazonphotos%E3%81%AEpc%E3%81%A7%E3%81%AE%E8%A8%AD%E5%AE%9A%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)ので、画面でポチポチして作成しました。
1枚ずつ写真を選択してアルバムを作成する、みたいな手間はかからずに済んで良かったです。

[^1]:2023年7月時点では新規登録すると[20GBの容量](https://mega.io/ja/storage)を利用できます
[^2]:Amazon PhotosはPrime会員なら写真を容量無制限で保存でき、その他ファイルは5GBまで追加課金なしで利用できます。