Як автоматизувати регулярні резервні копії Google Takeout у хмарному сховищі


42

Я хотів би створити звичайні резервні копії Google Takeout (скажімо, кожні 3 місяці) і зберігати їх зашифрованими в інших хмарних сховищах, таких як DropBox або S3.

Це не повинно бути рішенням хмара в хмару, хоча і кращим. Це не повинно бути на 100% автоматизованим, але чим більше, тим краще.

Заздалегідь дякую за будь-які ідеї.

Відповіді:


2

Замість Прямих API для резервного копіювання Google Takeout (що, здається, майже неможливо зробити зараз), ви можете створити резервну копію даних у сторонніх рішеннях для зберігання через Google Drive. Багато служб Google дозволяють створити резервну копію на Диску Google, а ви можете створити резервну копію Google Диска за допомогою таких інструментів:

GoogleCL - GoogleCL приносить служби Google до командного рядка.

gdatacopier - утиліти управління документами командного рядка для документів Google.

FUSE Google Drive - файлова система FUSE у просторі користувачів для Google Drive, написана на C.

Grive - незалежна реалізація клієнта з Диска Google із відкритим кодом. Він використовує API списку документів Google для спілкування із серверами в Google. Код написаний на C ++.

gdrive-cli - інтерфейс командного рядка для GDrive. Тут використовується API GDrive, а не API GDocs, що цікаво. Для його використання потрібно зареєструвати хромовану програму. Він повинен бути принаймні встановлений вами, але його не потрібно публікувати. У репо є додаток для котлів, який ви можете використовувати як вихідний пункт.

Приклад python-fuse - Містить деякі слайди та приклади файлових систем Python FUSE.

Більшість із них, схоже, знаходяться у сховищах Ubuntu. Я сам використовував Fuse, gdrive та GoogleCL, і всі вони чудово працюють. Залежно від рівня контролю, який ви хочете, це буде дійсно легко або дуже складно. Це залежить від вас. Це слід робити прямо з сервера EC2 / S3. Просто сформулюйте команди по черзі на все, що вам потрібно, і покладіть їх у сценарій на роботу з cron.

Якщо ви не хочете працювати так важко, ви також можете просто скористатися такою послугою, як Spinbackup . Я впевнений, що є такі ж хороші, але я не пробував жодного.


20
Google кращий інструмент - найкращий інструмент для цього, оскільки він підтримує більше служб, ніж ці інші інструменти. Питання справедливе.
jl6

6
@krowe: Ваша відповідь справді корисна, як би вона не стосувалася лише Google Drive. Служба Google Google дозволяє завантажувати всі свої дані з 25 різних служб Google, а не лише з Google Drive.
Bjarke Freund-Hansen

@ BjarkeFreund-Hansen 1) Багато з цих 25 сервісів можна зберегти в GDrive та створити резервну копію автоматично в рамках автоматизованого резервного копіювання GDrive. 2) Більшість сервісів, що залишилися, або безглузді для резервного копіювання (+1, кола та ін.), Або неіснуючі (Код Google). 3) Я втомився пояснювати це людям, які не мають кращої відповіді. Я цілком впевнений, що немає можливості автоматизувати винос (окрім використання макросів на стороні клієнта; які все-таки не дуже надійні). 4) Якщо ви можете довести мене неправильно, тоді опублікуйте своє краще рішення, і ми можемо поговорити. Якщо ні, то зверніться до мого попереднього коментаря до цього самого питання.
krowe

6
@krowe: Gmail, календар, контакти, фотографії, історія відеокімнат та історія місцезнаходжень - це сервіси, які я широко використовую і хотів би запобігти втраті даних в Google. Жодна з даних цих служб не включена в Google Drive. Тільки тому, що я не знаю кращого рішення, або воно взагалі існує, не змушує вас відповісти більш правильним. Знову ж таки, я не кажу, що ви відповідаєте погано, це просто не відповідає на власне питання.
Bjarke Freund-Hansen

@ BjarkeFreund-Hansen Я розумію, що ви засмучуєтесь, і деякі з цих послуг МОЖЕТ бути синхронізовані з вашим GDrive (тому вони будуть створювати резервну копію разом із ним). Наприклад, Google Photos може це зробити: Резервне копіювання фотографій . Я вважаю, що Календар і контакти можна синхронізувати однаково. GMail також може бути підкріплений: Резервне копіювання GMail . Інші речі, про які ви згадуєте, я не знаю, але це, головним чином, тому, що я особисто б не намагався їх створити.
krowe

2

Це часткова відповідь з частковою автоматизацією. Він може припинити свою роботу в майбутньому, якщо Google вирішить посилити автоматизований доступ до Google Takeout. Функції, які зараз підтримуються у цій відповіді:

+ --------------------------------------------- + --- --------- + --------------------- +
| Функція автоматизації | Автоматизовано? | Підтримувані платформи |
+ --------------------------------------------- + --- --------- + --------------------- +
| Увійти в обліковий запис Google | Ні | |
| Отримати файли cookie від Mozilla Firefox | Так | Linux |
| Отримати файли cookie від Google Chrome | Так | Linux, macOS |
| Запросити створення архіву | Ні | |
| Створення архіву розкладу | Вигляд | Сайт для вильоту |
| Перевірте, чи створено архів | Ні | |
| Отримати список архіву | Так | Міжплатформна |
| Завантажити всі архівні файли | Так | Linux, macOS |
| Зашифрувати завантажені файли архіву | Ні | |
| Завантажте завантажені архівні файли в Dropbox | Ні | |
| Завантажте завантажені архівні файли в AWS S3 | Ні | |
+ --------------------------------------------- + --- --------- + --------------------- +

По-перше, рішення "хмара в хмару" насправді не може працювати, оскільки немає інтерфейсу між Google Takeout і будь-яким відомим постачальником даних для зберігання об'єктів. Ви повинні обробити файли резервного копіювання на власному комп'ютері (який, якщо ви хочете, можна розмістити в загальнодоступній хмарі), перш ніж надсилати їх своєму постачальнику об’єктів зберігання даних.

По-друге, оскільки не існує API Google Takeout, сценарій автоматизації повинен претендувати на користувача з браузером, щоб пройтись по створенню архіву Google Takeout та потоку завантаження.


Особливості автоматизації

Вхід в обліковий запис Google

Це ще не автоматизовано. Сценарій повинен видавати себе за веб-переглядач і здійснювати навігацію щодо можливих перешкод, таких як двофакторна автентифікація, CAPTCHA та інші посилені перевірки безпеки.

Отримайте файли cookie від Mozilla Firefox

У мене є сценарій для користувачів Linux, щоб захопити файли cookie Google Takeout від Mozilla Firefox та експортувати їх як змінні середовища. Щоб це працювало, повинен бути лише один профіль Firefox, і профіль повинен був відвідувати 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"

Як гарніший сценарій Баша:

#!/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"

Отримайте файли cookie від Google Chrome

У мене є сценарій для Linux та, можливо, користувачів macOS, щоб захопити файли cookie Google Takeout з Google Chrome та експортувати їх як змінні середовища. Сценарій працює за припущенням, що Python 3 venvдоступний і 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

Як гарніший сценарій Баша:

#!/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 року Google Takeout представив функцію, яка автоматизує створення 1 резервної копії кожні 2 місяці протягом 1 року (всього 6 резервних копій). Це потрібно зробити в браузері за адресою https://takeout.google.com під час заповнення форми запиту архіву:

Google Takeout: Налаштуйте формат архіву

Перевірте, чи створено архів

Це ще не автоматизовано. Якщо створено архів, Google іноді надсилає електронну пошту в поштову скриньку користувача, але в моєму тестуванні це не завжди відбувається з невідомих причин.

Єдиний інший спосіб перевірити, чи створено архів, - періодично опитуючи Google Takeout.

Отримайте архівний список

У мене є команда зробити це, припускаючи, що куки були встановлені як змінні середовища в розділі "Отримати файли 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 з регулярним виразом .

Завантажте всі архівні файли

Ось код на Bash, щоб отримати URL-адреси архівних файлів та завантажити їх усі, припускаючи, що файли 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]++' | \
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. Завантажте кожен файл зі списку по одному:

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

    Примітка. Паралелізація завантажень (зміна -P1на більшу кількість) можлива, але Google, здається, перешкоджає всім, крім одного з підключень.

    Примітка. -C - Пропускає файли, які вже існують, але вони не можуть успішно відновити завантаження для існуючих файлів.

Зашифруйте завантажені архівні файли

Це не автоматизовано. Реалізація залежить від того, як ви хочете шифрувати свої файли, а витрата місцевого дискового простору має бути подвоєно для кожного файлу, який ви шифруєте.

Завантажте завантажені архівні файли в Dropbox

Це ще не автоматизовано.

Завантажте завантажені архівні файли на AWS S3

Це ще не є автоматизованим, але його слід просто переглядати за списком завантажених файлів та виконувати команду типу:

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

0

Це питання я знайшов, шукаючи, як виправити, щоб мої фотографії Google не відображалися належним чином на Google Drive (що я вже автоматично створюю резервну копію!).

Отже, щоб фотографії відображалися на Google Drive, перейдіть на сторінку https://photos.google.com , налаштування та встановіть його для показу фотографій у папці на диску.

Потім скористайтеся https://github.com/ncw/rclone, щоб клонувати весь диск Google (який тепер включає фотографії як "звичайний" каталог) до локальної пам’яті.


rclone виглядає чудово, здається, зрілим проектом. Просто рішення, яке я шукав.
парі

Це дійсно дійсно приємно. Тхо, з моїми тисячами фотографій, це потребує певного часу, щоб прорізати їх. Мені цікаво, чи можу я просто змусити його наосліп завантажувати все, а не перевіряти на дупи.
djsmiley2k - Корова
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.