To częściowa odpowiedź z częściową automatyzacją. Może przestać działać w przyszłości, jeśli Google zdecyduje się na zautomatyzowany dostęp do Google Takeout. Funkcje obecnie obsługiwane w tej odpowiedzi:
+ --------------------------------------------- + --- --------- + --------------------- +
| Funkcja automatyzacji | Zautomatyzowany? | Obsługiwane platformy |
+ --------------------------------------------- + --- --------- + --------------------- +
| Logowanie do konta Google | Nie | |
| Pobierz pliki cookie z Mozilla Firefox | Tak | Linux |
| Pobierz pliki cookie z Google Chrome | Tak | Linux, macOS |
| Poproś o utworzenie archiwum | Nie | |
| Zaplanuj tworzenie archiwum | Rodzaj | Witryna na wynos |
| Sprawdź, czy archiwum jest utworzone | Nie | |
| Pobierz listę archiwów | Tak | Międzyplatformowy |
| Pobierz wszystkie pliki archiwów | Tak | Linux, macOS |
| Szyfruj pobrane pliki archiwów | Nie | |
| Prześlij pobrane pliki archiwum do Dropbox | Nie | |
| Prześlij pobrane pliki archiwów do AWS S3 | Nie | |
+ --------------------------------------------- + --- --------- + --------------------- +
Po pierwsze, rozwiązanie typu chmura do chmury nie może naprawdę działać, ponieważ nie ma interfejsu między Google Takeout a żadnym znanym dostawcą obiektów do przechowywania danych. Musisz przetworzyć pliki kopii zapasowej na własnym komputerze (który może być przechowywany w chmurze publicznej, jeśli chcesz) przed wysłaniem ich do dostawcy przechowywania obiektów.
Po drugie, ponieważ nie ma interfejsu API Google Takeout, skrypt automatyzacji musi udawać użytkownika z przeglądarką, aby przejść przez proces tworzenia i pobierania archiwum Google Takeout.
Funkcje automatyzacji
Logowanie do konta Google
To nie jest jeszcze zautomatyzowane. Skrypt musiałby udawać przeglądarkę i poruszać się po możliwych przeszkodach, takich jak uwierzytelnianie dwuskładnikowe, CAPTCHA i inne zwiększone zabezpieczenia.
Pobierz pliki cookie z Mozilla Firefox
Mam skrypt dla użytkowników systemu Linux, aby pobrać pliki cookie Google Takeout z Mozilla Firefox i wyeksportować je jako zmienne środowiskowe. Aby to zadziałało, powinien istnieć tylko jeden profil Firefox, a profil musi odwiedzać https://takeout.google.com po zalogowaniu.
Jako jedna linijka:
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"
Jako ładniejszy skrypt 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"
Pobierz pliki cookie z Google Chrome
Mam skrypt dla systemu Linux i prawdopodobnie użytkowników systemu macOS, aby pobrać pliki cookie Google Takeout z Google Chrome i wyeksportować je jako zmienne środowiskowe. Skrypt działa przy założeniu, że Python 3 venv
jest dostępny, a Default
profil Chrome odwiedził https://takeout.google.com po zalogowaniu.
Jako jedna linijka:
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
Jako ładniejszy skrypt 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"
Oczyść pobrane pliki:
rm -rf "$venv_path"
Poproś o utworzenie archiwum
To nie jest jeszcze zautomatyzowane. Skrypt musiałby wypełnić formularz Google Takeout, a następnie go przesłać.
Zaplanuj tworzenie archiwum
Nie ma jeszcze w pełni zautomatyzowanego sposobu, aby to zrobić, ale w maju 2019 r. Google Takeout wprowadził funkcję, która automatyzuje tworzenie 1 kopii zapasowej co 2 miesiące przez 1 rok (łącznie 6 kopii zapasowych). Należy to zrobić w przeglądarce na stronie https://takeout.google.com , wypełniając formularz wniosku o archiwum:
Sprawdź, czy archiwum jest utworzone
To nie jest jeszcze zautomatyzowane. Jeśli zostało utworzone archiwum, Google czasami wysyła wiadomość e-mail do skrzynki odbiorczej Gmaila użytkownika, ale w moich testach nie zawsze dzieje się tak z nieznanych przyczyn.
Jedynym innym sposobem sprawdzenia, czy archiwum zostało utworzone, jest okresowe odpytywanie Google Takeout.
Pobierz listę archiwów
Mam polecenie, aby to zrobić, zakładając, że pliki cookie zostały ustawione jako zmienne środowiskowe w sekcji „Pobierz pliki cookie” powyżej:
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]++'
Dane wyjściowe to rozdzielana wierszami lista adresów URL, które prowadzą do pobierania wszystkich dostępnych archiwów.
Jest analizowany z HTML za pomocą wyrażenia regularnego .
Pobierz wszystkie pliki archiwów
Oto kod w Bash, aby uzyskać adresy URL plików archiwów i pobrać je wszystkie, zakładając, że pliki cookie zostały ustawione jako zmienne środowiskowe w sekcji „Pobierz pliki cookie” powyżej:
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};" {}
Przetestowałem to na Linuksie, ale składnia również powinna być kompatybilna z macOS.
Objaśnienie każdej części:
curl
polecenie z uwierzytelniającymi plikami cookie:
curl -sL -H "Cookie: SID=${SID}; HSID=${HSID}; SSID=${SSID}; OSID=${OSID};" \
Adres URL strony z linkami do pobrania
'https://takeout.google.com/settings/takeout/downloads' | \
Filtruj dopasowania tylko linki do pobrania
grep -Po '(?<=")https://storage\.cloud\.google\.com/[^"]+(?=")' | \
Odfiltruj duplikaty linków
awk '!x[$0]++' \ |
Pobierz każdy plik z listy, jeden po drugim:
xargs -n1 -P1 -I{} curl -LOJ -C - -H "Cookie: SID=${SID}; HSID=${HSID}; SSID=${SSID}; OSID=${OSID};" {}
Uwaga: Równoległe pobieranie (zmiana -P1
na wyższą liczbę) jest możliwe, ale Google zdaje się ograniczać wszystkie połączenia oprócz jednego.
Uwaga: -C -
pomija pliki, które już istnieją, ale może nie zostać pomyślnie wznowione pobieranie istniejących plików.
Szyfruj pobrane pliki archiwów
To nie jest zautomatyzowane. Implementacja zależy od tego, jak chcesz szyfrować pliki, a zużycie lokalnego miejsca na dysku musi zostać podwojone dla każdego szyfrowanego pliku.
Prześlij pobrane pliki archiwów do Dropbox
To nie jest jeszcze zautomatyzowane.
Prześlij pobrane pliki archiwów do AWS S3
Nie jest to jeszcze zautomatyzowane, ale powinno po prostu polegać na iteracji listy pobranych plików i uruchomieniu polecenia takiego jak:
aws s3 cp TAKEOUT_FILE "s3://MYBUCKET/Google Takeout/"