Це часткова відповідь з частковою автоматизацією. Він може припинити свою роботу в майбутньому, якщо 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 іноді надсилає електронну пошту в поштову скриньку користувача, але в моєму тестуванні це не завжди відбувається з невідомих причин.
Єдиний інший спосіб перевірити, чи створено архів, - періодично опитуючи 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.
Пояснення кожної частини:
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]++' \ |
Завантажте кожен файл зі списку по одному:
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/"