Google Takeoutの定期的なバックアップを作成し(3か月ごとに言う)、DropBoxやS3などの他のクラウドストレージに暗号化して保存します。
クラウドからクラウドへのソリューションである必要はありませんが、推奨されます。100%自動化する必要はありませんが、多ければ多いほど良いです。
どんなアイデアでもよろしくお願いします。
Google Takeoutの定期的なバックアップを作成し(3か月ごとに言う)、DropBoxやS3などの他のクラウドストレージに暗号化して保存します。
クラウドからクラウドへのソリューションである必要はありませんが、推奨されます。100%自動化する必要はありませんが、多ければ多いほど良いです。
どんなアイデアでもよろしくお願いします。
回答:
Google TakeoutをバックアップするためのDirect APIの代わりに(現時点ではほとんど不可能と思われます)、Googleドライブを介してサードパーティのストレージソリューションにデータをバックアップできます。多くのGoogleサービスではGoogleドライブへのバックアップが許可されており、次のツールを使用してGoogleドライブをバックアップできます。
GoogleCL -GoogleCLは、Googleサービスをコマンドラインにもたらします。
gdatacopier -Googleドキュメント用のコマンドラインドキュメント管理ユーティリティ。
FUSE Google Drive -Cで書かれたGoogle Drive用のFUSEユーザースペースファイルシステム。
Grive -Googleドライブクライアントの独立したオープンソース実装。Google Document List APIを使用して、Googleのサーバーと通信します。コードはC ++で記述されています。
gdrive-cli - GDriveのコマンドラインインターフェイス。これは、GDocs APIではなくGDrive APIを使用しています。これは興味深いものです。使用するには、Chromeアプリケーションを登録する必要があります。少なくともインストールできる必要がありますが、公開する必要はありません。レポには、開始点として使用できる定型アプリがあります。
python-fuseの例 -いくつかのスライドとPython FUSEファイルシステムの例が含まれています。
これらのほとんどはUbuntuリポジトリにあるようです。私は自分でFuse、gdrive、GoogleCLを使用しましたが、すべて正常に動作します。必要な制御レベルに応じて、これは非常に簡単または非常に複雑になります。それはあなた次第です。EC2 / S3サーバーから行うのは簡単です。必要なすべてのコマンドを1つずつ見つけ出し、cronジョブのスクリプトに入れてください。
一生懸命働きたくない場合は、Spinbackupのようなサービスを使用することもできます。他にも同じようなものがあると確信していますが、試したことはありません。
これは部分的な自動化による部分的な回答です。GoogleがGoogle Takeoutへの自動アクセスの取り締まりを選択した場合、今後機能しなくなる可能性があります。この回答で現在サポートされている機能:
+ --------------------------------------------- + --- --------- + --------------------- + | 自動化機能| 自動化された?| サポートされているプラットフォーム| + --------------------------------------------- + --- --------- + --------------------- + | Googleアカウントログイン| いいえ| | | Mozilla FirefoxからCookieを取得| はい| Linux | | Google ChromeからCookieを取得| はい| Linux、macOS | | アーカイブ作成のリクエスト| いいえ| | | アーカイブ作成のスケジュール| ちょっと| テイクアウトのウェブサイト| | アーカイブが作成されているかどうかを確認します| いいえ| | | アーカイブリストを取得| はい| クロスプラットフォーム| | すべてのアーカイブファイルをダウンロードする| はい| Linux、macOS | | ダウンロードしたアーカイブファイルを暗号化する| いいえ| | | ダウンロードしたアーカイブファイルをDropboxにアップロードする| いいえ| | | ダウンロードしたアーカイブファイルをAWS S3にアップロードする| いいえ| | + --------------------------------------------- + --- --------- + --------------------- +
まず、Google Takeoutと既知のオブジェクトストレージプロバイダーの間にインターフェースがないため、クラウドツークラウドソリューションは実際には機能しません。バックアップファイルをオブジェクトストレージプロバイダーに送信する前に、(必要に応じてパブリッククラウドでホストできる)自分のマシンでバックアップファイルを処理する必要があります。
第二に、Google Takeout APIがないため、自動スクリプトは、Google Takeoutアーカイブの作成とダウンロードのフローを確認するために、ブラウザを使用するユーザーのふりをする必要があります。
これはまだ自動化されていません。スクリプトは、ブラウザのふりをして、2要素認証、CAPTCHA、その他の強化されたセキュリティスクリーニングなど、考えられるハードルをナビゲートする必要があります。
LinuxユーザーがMozilla FirefoxからGoogle Takeout Cookieを取得し、環境変数としてエクスポートするためのスクリプトがあります。これが機能するためには、Firefoxプロファイルが1つだけである必要があり、そのプロファイルはログイン中にhttps://takeout.google.comにアクセスする必要があります。
ワンライナーとして:
cookie_jar_path=$(mktemp) ; source_path=$(mktemp) ; cp ~/.mozilla/firefox/*.default/cookies.sqlite "$cookie_jar_path" ; sqlite3 "$cookie_jar_path" "SELECT name,value FROM moz_cookies WHERE baseDomain LIKE 'google.com' AND (name LIKE 'SID' OR name LIKE 'HSID' OR name LIKE 'SSID' OR (name LIKE 'OSID' AND host LIKE 'takeout.google.com')) AND originAttributes LIKE '^userContextId=1' ORDER BY creationTime ASC;" | sed -e 's/|/=/' -e 's/^/export /' | tee "$source_path" ; source "$source_path" ; rm -f "$source_path" ; rm -f "$cookie_jar_path"
よりきれいなBashスクリプトとして:
#!/bin/bash
# Extract Google Takeout cookies from Mozilla Firefox and export them as envvars
#
# The browser must have visited https://takeout.google.com as an authenticated user.
# Warn the user if they didn't run the script with `source`
[[ "${BASH_SOURCE[0]}" == "${0}" ]] && \
echo 'WARNING: You should source this script to ensure the resulting environment variables get set.'
cookie_jar_path=$(mktemp)
source_path=$(mktemp)
# In case the cookie database is locked, copy the database to a temporary file.
# Only supports one Firefox profile.
# Edit the asterisk below to select a specific profile.
cp ~/.mozilla/firefox/*.default/cookies.sqlite "$cookie_jar_path"
# Get the cookies from the database
sqlite3 "$cookie_jar_path" \
"SELECT name,value
FROM moz_cookies
WHERE baseDomain LIKE 'google.com'
AND (
name LIKE 'SID' OR
name LIKE 'HSID' OR
name LIKE 'SSID' OR
(name LIKE 'OSID' AND host LIKE 'takeout.google.com')
) AND
originAttributes LIKE '^userContextId=1'
ORDER BY creationTime ASC;" | \
# Reformat the output into Bash exports
sed -e 's/|/=/' -e 's/^/export /' | \
# Save the output into a temporary file
tee "$source_path"
# Load the cookie values into environment variables
source "$source_path"
# Clean up
rm -f "$source_path"
rm -f "$cookie_jar_path"
Linuxおよび場合によってはmacOSユーザーがGoogle Takeout CookieをGoogle Chromeから取得して環境変数としてエクスポートするためのスクリプトがあります。このスクリプトvenv
は、Python 3 が使用可能であり、Default
Chromeプロファイルがログイン中にhttps://takeout.google.comにアクセスしたことを前提に動作します。
ワンライナーとして:
if [ ! -d "$venv_path" ] ; then venv_path=$(mktemp -d) ; fi ; if [ ! -f "${venv_path}/bin/activate" ] ; then python3 -m venv "$venv_path" ; fi ; source "${venv_path}/bin/activate" ; python3 -c 'import pycookiecheat, dbus' ; if [ $? -ne 0 ] ; then pip3 install git+https://github.com/n8henrie/pycookiecheat@dev dbus-python ; fi ; source_path=$(mktemp) ; python3 -c 'import pycookiecheat, json; cookies = pycookiecheat.chrome_cookies("https://takeout.google.com") ; [print("export %s=%s;" % (key, cookies[key])) for key in ["SID", "HSID", "SSID", "OSID"]]' | tee "$source_path" ; source "$source_path" ; rm -f "$source_path" ; deactivate
よりきれいなBashスクリプトとして:
#!/bin/bash
# Extract Google Takeout cookies from Google Chrome and export them as envvars
#
# The browser must have visited https://takeout.google.com as an authenticated user.
# Warn the user if they didn't run the script with `source`
[[ "${BASH_SOURCE[0]}" == "${0}" ]] && \
echo 'WARNING: You should source this script to ensure the resulting environment variables get set.'
# Create a path for the Chrome cookie extraction library
if [ ! -d "$venv_path" ]
then
venv_path=$(mktemp -d)
fi
# Create a Python 3 venv, if it doesn't already exist
if [ ! -f "${venv_path}/bin/activate" ]
then
python3 -m venv "$venv_path"
fi
# Enter the Python virtual environment
source "${venv_path}/bin/activate"
# Install dependencies, if they are not already installed
python3 -c 'import pycookiecheat, dbus'
if [ $? -ne 0 ]
then
pip3 install git+https://github.com/n8henrie/pycookiecheat@dev dbus-python
fi
# Get the cookies from the database
source_path=$(mktemp)
read -r -d '' code << EOL
import pycookiecheat, json
cookies = pycookiecheat.chrome_cookies("https://takeout.google.com")
for key in ["SID", "HSID", "SSID", "OSID"]:
print("export %s=%s" % (key, cookies[key]))
EOL
python3 -c "$code" | tee "$source_path"
# Clean up
source "$source_path"
rm -f "$source_path"
deactivate
[[ "${BASH_SOURCE[0]}" == "${0}" ]] && rm -rf "$venv_path"
ダウンロードしたファイルをクリーンアップします。
rm -rf "$venv_path"
これはまだ自動化されていません。スクリプトは、Google Takeoutフォームに記入してから送信する必要があります。
これを行うための完全に自動化された方法はまだありませんが、2019年5月に、Google Takeoutは1年間2か月ごとに1つのバックアップ(合計6つのバックアップ)の作成を自動化する機能を導入しました。これは、https://takeout.google.comのブラウザでアーカイブリクエストフォームに入力する必要があります。
これはまだ自動化されていません。アーカイブが作成されている場合、GoogleはユーザーのGmail受信トレイにメールを送信することがありますが、私のテストでは、不明な理由でこれが常に発生するとは限りません。
アーカイブが作成されたかどうかを確認する他の唯一の方法は、Google Takeoutを定期的にポーリングすることです。
上記の「Cookieの取得」セクションでCookieが環境変数として設定されていると仮定して、これを行うコマンドがあります。
curl -sL -H "Cookie: SID=${SID}; HSID=${HSID}; SSID=${SSID}; OSID=${OSID};" \
'https://takeout.google.com/settings/takeout/downloads' | \
grep -Po '(?<=")https://storage\.cloud\.google\.com/[^"]+(?=")' | \
awk '!x[$0]++'
出力は、使用可能なすべてのアーカイブのダウンロードにつながるURLの行区切りリストです。
それはだ正規表現でHTMLから解析されました。
上記の「Cookieを取得」セクションでCookieが環境変数として設定されていると仮定して、アーカイブファイルのURLを取得してすべてをダウンロードするBashのコードを次に示します。
curl -sL -H "Cookie: SID=${SID}; HSID=${HSID}; SSID=${SSID}; OSID=${OSID};" \
'https://takeout.google.com/settings/takeout/downloads' | \
grep -Po '(?<=")https://storage\.cloud\.google\.com/[^"]+(?=")' | \
awk '!x[$0]++' | \
xargs -n1 -P1 -I{} curl -LOJ -C - -H "Cookie: SID=${SID}; HSID=${HSID}; SSID=${SSID}; OSID=${OSID};" {}
Linuxでテストしましたが、構文もmacOSと互換性があるはずです。
各部の説明:
curl
認証Cookieを使用したコマンド:
curl -sL -H "Cookie: SID=${SID}; HSID=${HSID}; SSID=${SSID}; OSID=${OSID};" \
ダウンロードリンクがあるページのURL
'https://takeout.google.com/settings/takeout/downloads' | \
フィルターはダウンロードリンクのみに一致します
grep -Po '(?<=")https://storage\.cloud\.google\.com/[^"]+(?=")' | \
重複するリンクを除外する
awk '!x[$0]++' \ |
リスト内の各ファイルを1つずつダウンロードします。
xargs -n1 -P1 -I{} curl -LOJ -C - -H "Cookie: SID=${SID}; HSID=${HSID}; SSID=${SSID}; OSID=${OSID};" {}
注:ダウンロードの並列化(-P1
より大きな数への変更)は可能ですが、Googleは1つを除くすべての接続を抑制しているようです。
注: -C -
既に存在するファイルはスキップしますが、既存のファイルのダウンロードを正常に再開できない場合があります。
これは自動化されていません。実装は、ファイルの暗号化方法に依存し、暗号化するファイルごとにローカルディスク領域の消費量を2倍にする必要があります。
これはまだ自動化されていません。
これはまだ自動化されていませんが、ダウンロードしたファイルのリストを繰り返し処理し、次のようなコマンドを実行するだけの問題です。
aws s3 cp TAKEOUT_FILE "s3://MYBUCKET/Google Takeout/"
GoogleドライブでGoogle写真が正しく表示されないのを修正する方法を探しているときに、この質問を見つけました(これは既に自動的にバックアップされています!)。
したがって、Googleドライブに写真を表示するには、https://photos.google.comの設定に移動し、ドライブのフォルダーに写真を表示するように設定します。
次に、https://github.com/ncw/rcloneを使用して、Googleドライブ全体(現在は「通常の」ディレクトリとしての写真が含まれています)をローカルストレージに複製します。