Dies ist eine Teilantwort mit Teilautomatisierung. Möglicherweise funktioniert es in Zukunft nicht mehr, wenn Google den automatisierten Zugriff auf Google Takeout einschränkt. Funktionen, die derzeit in dieser Antwort unterstützt werden:
+ --------------------------------------------- + --- --------- + --------------------- +
| Automatisierungsfunktion | Automatisiert? | Unterstützte Plattformen |
+ --------------------------------------------- + --- --------- + --------------------- +
| Google-Konto anmelden | Nein | |
| Holen Sie sich Cookies von Mozilla Firefox | Ja | Linux |
| Holen Sie sich Cookies von Google Chrome | Ja | Linux, macOS |
| Archiverstellung anfordern | Nein | |
| Archivierungserstellung einplanen | Ein bisschen | Website zum Mitnehmen |
| Überprüfen Sie, ob das Archiv erstellt wurde Nein | |
| Archivliste abrufen | Ja | Plattformübergreifend |
| Alle Archivdateien herunterladen Ja | Linux, macOS |
| Verschlüsseln Sie heruntergeladene Archivdateien Nein | |
| Laden Sie heruntergeladene Archivdateien in Dropbox | hoch Nein | |
| Laden Sie heruntergeladene Archivdateien in AWS S3 | hoch Nein | |
+ --------------------------------------------- + --- --------- + --------------------- +
Erstens kann eine Cloud-to-Cloud-Lösung nicht wirklich funktionieren, da es keine Schnittstelle zwischen Google Takeout und einem bekannten Objektspeicheranbieter gibt. Sie müssen die Sicherungsdateien auf Ihrem eigenen Computer verarbeiten (der auf Wunsch in der öffentlichen Cloud gehostet werden kann), bevor Sie sie an Ihren Objektspeicheranbieter senden.
Zweitens muss ein Automatisierungsskript, da es keine Google Takeout-API gibt, so tun, als wäre es ein Benutzer mit einem Browser, um die Erstellung des Google Takeout-Archivs und den Download-Ablauf zu durchlaufen.
Automatisierungsfunktionen
Google-Konto anmelden
Dies ist noch nicht automatisiert. Das Skript muss sich als Browser ausgeben und mögliche Hürden wie Zwei-Faktor-Authentifizierung, CAPTCHAs und andere verstärkte Sicherheitsüberprüfungen überwinden.
Holen Sie sich Cookies von Mozilla Firefox
Ich habe ein Skript, mit dem Linux-Benutzer die Google Takeout-Cookies von Mozilla Firefox abrufen und als Umgebungsvariablen exportieren können. Damit dies funktioniert, sollte es nur ein Firefox-Profil geben, und das Profil muss https://takeout.google.com besucht haben, während Sie angemeldet waren.
Als Einzeiler:
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"
Als schöneres Bash-Skript:
#!/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"
Holen Sie sich Cookies von Google Chrome
Ich habe ein Skript für Linux- und möglicherweise MacOS-Benutzer, mit dem ich die Google Takeout-Cookies von Google Chrome abrufen und als Umgebungsvariablen exportieren kann. Das Skript geht davon aus, dass Python 3 venv
verfügbar ist und das Default
Chrome-Profil https://takeout.google.com besuchte, während es angemeldet war.
Als Einzeiler:
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
Als schöneres Bash-Skript:
#!/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"
Bereinigen Sie heruntergeladene Dateien:
rm -rf "$venv_path"
Archivierung anfordern
Dies ist noch nicht automatisiert. Das Skript muss das Google Takeout-Formular ausfüllen und dann senden.
Planen Sie die Erstellung des Archivs
Es gibt noch keine vollständig automatisierte Methode, aber im Mai 2019 hat Google Takeout eine Funktion eingeführt, die die Erstellung von 1 Backup alle 2 Monate für 1 Jahr (insgesamt 6 Backups) automatisiert. Dies muss im Browser unter https://takeout.google.com erfolgen, während das Archivierungsanforderungsformular ausgefüllt wird:
Überprüfen Sie, ob das Archiv erstellt wurde
Dies ist noch nicht automatisiert. Wenn ein Archiv erstellt wurde, sendet Google manchmal eine E-Mail an den Google Mail-Posteingang des Nutzers. In meinen Tests geschieht dies jedoch nicht immer aus unbekannten Gründen.
Die einzige andere Möglichkeit, um zu überprüfen, ob ein Archiv erstellt wurde, besteht darin, Google Takeout regelmäßig abzufragen.
Archivliste abrufen
Ich habe einen Befehl, um dies zu tun, vorausgesetzt, dass die Cookies als Umgebungsvariablen im Abschnitt "Cookies abrufen" oben festgelegt wurden:
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]++'
Die Ausgabe ist eine zeilenbegrenzte Liste von URLs, die zum Herunterladen aller verfügbaren Archive führen.
Es wird aus HTML mit Regex analysiert .
Laden Sie alle Archivdateien herunter
Hier ist der Code in Bash, mit dem die URLs der Archivdateien abgerufen und alle heruntergeladen werden können, vorausgesetzt, die Cookies wurden im obigen Abschnitt "Cookies abrufen" als Umgebungsvariablen festgelegt:
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};" {}
Ich habe es unter Linux getestet, aber die Syntax sollte auch mit macOS kompatibel sein.
Erklärung der einzelnen Teile:
curl
Befehl mit Authentifizierungs-Cookies:
curl -sL -H "Cookie: SID=${SID}; HSID=${HSID}; SSID=${SSID}; OSID=${OSID};" \
URL der Seite mit den Download-Links
'https://takeout.google.com/settings/takeout/downloads' | \
Nur Download-Links für Übereinstimmungen filtern
grep -Po '(?<=")https://storage\.cloud\.google\.com/[^"]+(?=")' | \
Filtern Sie doppelte Links heraus
awk '!x[$0]++' \ |
Laden Sie jede Datei in der Liste nacheinander herunter:
xargs -n1 -P1 -I{} curl -LOJ -C - -H "Cookie: SID=${SID}; HSID=${HSID}; SSID=${SSID}; OSID=${OSID};" {}
Hinweis: Das Parallelisieren der Downloads (Ändern -P1
auf eine höhere Nummer) ist möglich, aber Google scheint alle Verbindungen bis auf eine zu drosseln.
Hinweis: -C -
Überspringt bereits vorhandene Dateien, setzt den Download für vorhandene Dateien jedoch möglicherweise nicht erfolgreich fort.
Verschlüsseln Sie heruntergeladene Archivdateien
Dies ist nicht automatisiert. Die Implementierung hängt davon ab, wie Sie Ihre Dateien verschlüsseln möchten. Der lokale Speicherplatzbedarf muss für jede zu verschlüsselnde Datei verdoppelt werden.
Laden Sie heruntergeladene Archivdateien in Dropbox hoch
Dies ist noch nicht automatisiert.
Laden Sie heruntergeladene Archivdateien in AWS S3 hoch
Dies ist noch nicht automatisiert, aber es sollte einfach darum gehen, die Liste der heruntergeladenen Dateien zu durchlaufen und einen Befehl wie den folgenden auszuführen:
aws s3 cp TAKEOUT_FILE "s3://MYBUCKET/Google Takeout/"