Esta es una respuesta parcial con automatización parcial. Puede dejar de funcionar en el futuro si Google decide tomar medidas enérgicas contra el acceso automático a Google Takeout. Características actualmente admitidas en esta respuesta:
+ --------------------------------------------- + --- --------- + --------------------- +
El | Característica de automatización | Automatizado? El | Plataformas compatibles |
+ --------------------------------------------- + --- --------- + --------------------- +
El | Acceso a la cuenta de Google | No | El |
El | Obtenga cookies de Mozilla Firefox | Sí | Linux |
El | Obtenga cookies de Google Chrome | Sí | Linux, macOS |
El | Solicitar creación de archivo | No | El |
El | Programar creación de archivo | Un poco | Sitio web para llevar |
El | Compruebe si se crea el archivo | No | El |
El | Obtener lista de archivos | Sí | Multiplataforma |
El | Descargar todos los archivos | Sí | Linux, macOS |
El | Cifrar archivos descargados | No | El |
El | Subir archivos descargados a Dropbox | No | El |
El | Cargue archivos descargados en AWS S3 | No | El |
+ --------------------------------------------- + --- --------- + --------------------- +
En primer lugar, una solución de nube a nube realmente no puede funcionar porque no hay una interfaz entre Google Takeout y cualquier proveedor de almacenamiento de objetos conocido. Debe procesar los archivos de copia de seguridad en su propia máquina (que podría alojarse en la nube pública, si lo desea) antes de enviarlos a su proveedor de almacenamiento de objetos.
En segundo lugar, como no hay una API de Google Takeout, un script de automatización debe pretender ser un usuario con un navegador para recorrer el flujo de creación y descarga de archivos de Google Takeout.
Funciones de automatización
Acceso a la cuenta de Google
Esto aún no está automatizado. El script necesitaría pretender ser un navegador y navegar posibles obstáculos como la autenticación de dos factores, CAPTCHA y otras pruebas de seguridad mejoradas.
Obtener cookies de Mozilla Firefox
Tengo un script para que los usuarios de Linux tomen las cookies de Google Takeout de Mozilla Firefox y las exporten como variables de entorno. Para que esto funcione, solo debe haber un perfil de Firefox, y el perfil debe haber visitado https://takeout.google.com al iniciar sesión.
Como una línea:
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"
Como un script de Bash más bonito:
#!/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"
Obtenga cookies de Google Chrome
Tengo un script para Linux y posiblemente usuarios de macOS para tomar las cookies de Google Takeout de Google Chrome y exportarlas como variables de entorno. El script funciona asumiendo que Python 3 venv
está disponible y que el Default
perfil de Chrome visitó https://takeout.google.com mientras estaba conectado.
Como una línea:
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
Como un script de Bash más bonito:
#!/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"
Limpia los archivos descargados:
rm -rf "$venv_path"
Solicitar creación de archivo
Esto aún no está automatizado. El script debería completar el formulario Google Takeout y luego enviarlo.
Programar creación de archivo
Todavía no existe una forma totalmente automatizada de hacerlo, pero en mayo de 2019, Google Takeout introdujo una función que automatiza la creación de 1 copia de seguridad cada 2 meses durante 1 año (6 copias de seguridad en total). Esto debe hacerse en el navegador en https://takeout.google.com mientras completa el formulario de solicitud de archivo:
Compruebe si se crea el archivo
Esto aún no está automatizado. Si se creó un archivo, Google a veces envía un correo electrónico a la bandeja de entrada de Gmail del usuario, pero en mis pruebas, esto no siempre sucede por razones desconocidas.
La única otra forma de verificar si se ha creado un archivo es sondeando Google Takeout periódicamente.
Obtener lista de archivo
Tengo un comando para hacer esto, suponiendo que las cookies se hayan configurado como variables de entorno en la sección "Obtener cookies" anterior:
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]++'
El resultado es una lista delimitada por líneas de URL que conducen a descargas de todos los archivos disponibles.
Se analiza desde HTML con regex .
Descargar todos los archivos
Aquí está el código en Bash para obtener las URL de los archivos y descargarlos todos, suponiendo que las cookies se hayan configurado como variables de entorno en la sección "Obtener cookies" anterior:
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};" {}
Lo probé en Linux, pero la sintaxis también debería ser compatible con macOS.
Explicación de cada parte:
curl
comando con cookies de autenticación:
curl -sL -H "Cookie: SID=${SID}; HSID=${HSID}; SSID=${SSID}; OSID=${OSID};" \
URL de la página que tiene los enlaces de descarga
'https://takeout.google.com/settings/takeout/downloads' | \
Filtrar coincidencias solo enlaces de descarga
grep -Po '(?<=")https://storage\.cloud\.google\.com/[^"]+(?=")' | \
Filtrar enlaces duplicados
awk '!x[$0]++' \ |
Descargue cada archivo de la lista, uno por uno:
xargs -n1 -P1 -I{} curl -LOJ -C - -H "Cookie: SID=${SID}; HSID=${HSID}; SSID=${SSID}; OSID=${OSID};" {}
Nota:-P1
es posible poner en paralelo las descargas (cambiar a un número mayor), pero Google parece limitar todas las conexiones menos una.
Nota: -C -
omite los archivos que ya existen, pero es posible que no reanude correctamente las descargas de los archivos existentes.
Cifrar archivos descargados
Esto no está automatizado. La implementación depende de cómo desee cifrar sus archivos, y el consumo de espacio en disco local debe duplicarse para cada archivo que está cifrando.
Subir archivos descargados a Dropbox
Esto aún no está automatizado.
Subir archivos descargados a AWS S3
Esto aún no está automatizado, pero debería ser simplemente una cuestión de iterar sobre la lista de archivos descargados y ejecutar un comando como:
aws s3 cp TAKEOUT_FILE "s3://MYBUCKET/Google Takeout/"