クラウドストレージへの定期的なGoogle Takeoutバックアップを自動化する方法


42

Google Takeoutの定期的なバックアップを作成し(3か月ごとに言う)、DropBoxやS3などの他のクラウドストレージに暗号化して保存します。

クラウドからクラウドへのソリューションである必要はありませんが、推奨されます。100%自動化する必要はありませんが、多ければ多いほど良いです。

どんなアイデアでもよろしくお願いします。

回答:


2

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のようなサービスを使用することもできます。他にも同じようなものがあると確信していますが、試したことはありません。


20
Google takeout 、他のツールよりも多くのサービスをサポートするため、これに最適なツールです。質問は有効です。
jl6

6
@krowe:あなたの答えは本当に便利です、それがグーグルドライブだけに関係していても。Googleデータエクスポートでは、Googleドライブだけでなく、25種類のGoogleサービスからすべてのデータをダウンロードできます。
ビャルケフロイントハンセン

@ BjarkeFreund-Hansen 1)これらの25のサービスの多くはGDriveに保存でき、自動GDriveバックアップの一部として自動的にバックアップできます。2)残りのサービスのほとんどは、バックアップしても意味がありません(+1、サークルなど)、または機能しません(Google Code)。3)より良い答えを持たない人々にこれを説明するのはうんざりです。テイクアウトを自動化する方法がないことはかなり確信しています(クライアント側のマクロを使用することは別として、それはとにかくあまり信頼性がありません)。4)私の間違いを証明できる場合は、より良い解決策を投稿してください。そうでない場合は、この同じ問題に関する以前のコメントを参照してください。
クロー

6
@krowe:Gmail、カレンダー、連絡先、写真、ハングアウト履歴、ロケーション履歴は、私が広く使用しているサービスであり、Googleでのデータ損失を確実に防止したいと考えています。これらのサービスのデータはいずれもGoogleドライブに含まれていません。私がより良い解決策を知らない、またはまったく存在しないからといって、あなたはそれ以上正解しません。繰り返しますが、あなたの答えが悪いと言っているのではなく、実際の質問に答えているだけではありません。
ビャルケフロイントハンセン

@ BjarkeFreund-Hansen私はあなたの不満を理解しており、それらのサービスのいくつかはあなたのGDriveと同期することができます(したがって、彼らはそれと一緒にバックアップします)。たとえば、Googleフォトはそれを行うことができます:バックアップ写真。カレンダーと連絡先は同じ方法で同期できると思います。GMailも同様にバックアップできます:バックアップGMail。あなたが言及する他のことは私が知らないが、それは私が個人的にとにかくそれらをバックアップする気にしないだろうからだ。
クロー

2

これは部分的な自動化による部分的な回答です。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アーカイブの作成とダウンロードのフローを確認するために、ブラウザを使用するユーザーのふりをする必要があります。


自動化機能

Googleアカウントのログイン

これはまだ自動化されていません。スクリプトは、ブラウザのふりをして、2要素認証、CAPTCHA、その他の強化されたセキュリティスクリーニングなど、考えられるハードルをナビゲートする必要があります。

Mozilla FirefoxからCookieを取得します

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"

Google ChromeからCookieを取得します

Linuxおよび場合によってはmacOSユーザーがGoogle Takeout CookieをGoogle Chromeから取得して環境変数としてエクスポートするためのスクリプトがあります。このスクリプトvenvは、Python 3 が使用可能であり、DefaultChromeプロファイルがログイン中に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 Takeout:アーカイブ形式のカスタマイズ

アーカイブが作成されているかどうかを確認します

これはまだ自動化されていません。アーカイブが作成されている場合、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と互換性があるはずです。

各部の説明:

  1. curl 認証Cookieを使用したコマンド:

    curl -sL -H "Cookie: SID=${SID}; HSID=${HSID}; SSID=${SSID}; OSID=${OSID};" \
  2. ダウンロードリンクがあるページのURL

    'https://takeout.google.com/settings/takeout/downloads' | \
  3. フィルターはダウンロードリンクのみに一致します

    grep -Po '(?<=")https://storage\.cloud\.google\.com/[^"]+(?=")' | \
  4. 重複するリンクを除外する

    awk '!x[$0]++' \ |
  5. リスト内の各ファイルを1つずつダウンロードします。

    xargs -n1 -P1 -I{} curl -LOJ -C - -H "Cookie: SID=${SID}; HSID=${HSID}; SSID=${SSID}; OSID=${OSID};" {}

    注:ダウンロードの並列化(-P1より大きな数への変更)は可能ですが、Googleは1つを除くすべての接続を抑制しているようです。

    注: -C -既に存在するファイルはスキップしますが、既存のファイルのダウンロードを正常に再開できない場合があります。

ダウンロードしたアーカイブファイルを暗号化する

これは自動化されていません。実装は、ファイルの暗号化方法に依存し、暗号化するファイルごとにローカルディスク領域の消費量を2倍にする必要があります。

ダウンロードしたアーカイブファイルをDropboxにアップロードする

これはまだ自動化されていません。

ダウンロードしたアーカイブファイルをAWS S3にアップロードする

これはまだ自動化されていませんが、ダウンロードしたファイルのリストを繰り返し処理し、次のようなコマンドを実行するだけの問題です。

aws s3 cp TAKEOUT_FILE "s3://MYBUCKET/Google Takeout/"

0

GoogleドライブでGoogle写真が正しく表示されないのを修正する方法を探しているときに、この質問を見つけました(これは既に自動的にバックアップされています!)。

したがって、Googleドライブに写真を表示するには、https://photos.google.comの設定に移動し、ドライブのフォルダーに写真を表示するように設定します。

次に、https://github.com/ncw/rcloneを使用して、Googleドライブ全体(現在は「通常の」ディレクトリとしての写真が含まれています)をローカルストレージに複製します。


rcloneは見栄えがよく、成熟したプロジェクトのようです。まさに私が探していた解決策。
18年

本当にすてきです。私の何千枚もの写真では、それらをくぐり抜けるのにしばらく時間がかかります。だまされているかどうかをチェックするのではなく、盲目的にすべてをダウンロードさせることができるのではないかと思います。
djsmiley2k-CoW
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.