Il s'agit d'une réponse partielle avec une automatisation partielle. Elle peut cesser de fonctionner à l'avenir si Google décide de réprimer l'accès automatisé à Google Takeout. Fonctionnalités actuellement prises en charge dans cette réponse :
+---------------------------------------------+------------+---------------------+
| Automation Feature | Automated? | Supported Platforms |
+---------------------------------------------+------------+---------------------+
| Google Account log-in | No | |
| Get cookies from Mozilla Firefox | Yes | Linux |
| Get cookies from Google Chrome | Yes | Linux, macOS |
| Request archive creation | No | |
| Schedule archive creation | Kinda | Takeout website |
| Check if archive is created | No | |
| Get archive list | Broken | Cross-platform |
| Download all archive files | Broken | Linux, macOS |
| Encrypt downloaded archive files | No | |
| Upload downloaded archive files to Dropbox | No | |
| Upload downloaded archive files to AWS S3 | No | |
+---------------------------------------------+------------+---------------------+
Tout d'abord, une solution "cloud-to-cloud" ne peut pas vraiment fonctionner parce qu'il n'y a pas d'interface entre Google Takeout et un fournisseur connu de stockage d'objets. Vous devez traiter les fichiers de sauvegarde sur votre propre machine (qui pourrait être hébergée dans le nuage public, si vous le souhaitez) avant de les envoyer à votre fournisseur de stockage d'objets.
Deuxièmement, comme il n'existe pas d'API Google Takeout, un script d'automatisation doit se faire passer pour un utilisateur disposant d'un navigateur pour suivre le processus de création et de téléchargement de l'archive Google Takeout.
Caractéristiques de l'automatisation
Connexion au compte Google
Ce n'est pas encore automatisé. Le script devrait se faire passer pour un navigateur et surmonter d'éventuels obstacles tels que l'authentification à deux facteurs, les CAPTCHA et d'autres contrôles de sécurité renforcés.
Supprimer les cookies de Mozilla Firefox
J'ai un script pour les utilisateurs de Linux qui permet de récupérer les cookies de Google Takeout dans Mozilla Firefox et de les exporter en tant que variables d'environnement. Pour que cela fonctionne, le profil par défaut/actif doit avoir visité https://takeout.google.com tout en étant connecté.
En une phrase :
cookie_jar_path=$(mktemp) ; source_path=$(mktemp) ; firefox_profile=$(cat "$HOME/.mozilla/firefox/profiles.ini" | awk -v RS="" '{ if($1 ~ /^\[Install[0-9A-F]+\]/) { print } }' | sed -nr 's/^Default=(.*)$/\1/p' | head -1) ; cp "$HOME/.mozilla/firefox/$firefox_profile/cookies.sqlite" "$cookie_jar_path" ; sqlite3 "$cookie_jar_path" "SELECT name,value FROM moz_cookies WHERE host 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"
Comme un joli script de 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.
# Edit the $firefox_profile variable below to select a specific Firefox profile.
firefox_profile=$(
cat "$HOME/.mozilla/firefox/profiles.ini" |
awk -v RS="" '{
if($1 ~ /^\[Install[0-9A-F]+\]/) {
print
}
}' |
sed -nr 's/^Default=(.*)$/\1/p' |
head -1
)
cp "$HOME/.mozilla/firefox/$firefox_profile/cookies.sqlite" "$cookie_jar_path"
# Get the cookies from the database
sqlite3 "$cookie_jar_path" \
"SELECT name,value
FROM moz_cookies
WHERE host 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"
Supprimer les cookies de Google Chrome
J'ai un script pour les utilisateurs de Linux et éventuellement de macOS pour récupérer les cookies Google Takeout de Google Chrome et les exporter en tant que variables d'environnement. Le script fonctionne en supposant que Python 3 venv
est disponible et le Default
Profil Chrome visité https://takeout.google.com tout en étant connecté.
En une phrase :
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
Comme un joli script de 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"
Nettoyer les fichiers téléchargés :
rm -rf "$venv_path"
Demande de création d'archives
Cette opération n'est pas encore automatisée. Le script devrait remplir le formulaire Google Takeout et le soumettre.
Planifier la création d'archives
Il n'existe pas encore de méthode entièrement automatisée, mais en mai 2019, Google Takeout a introduit une fonctionnalité qui automatise la création d'une sauvegarde tous les deux mois pendant un an (6 sauvegardes au total). Cette opération doit être effectuée dans le navigateur à l'adresse https://takeout.google.com en remplissant le formulaire de demande d'archives :
Vérifier si l'archive est créée
Cette opération n'est pas encore automatisée. Si une archive a été créée, Google envoie parfois un courriel à la boîte de réception Gmail de l'utilisateur, mais dans mes tests, cela ne se produit pas toujours pour des raisons inconnues.
Le seul autre moyen de vérifier si une archive a été créée est d'interroger régulièrement Google Takeout.
Obtenir la liste des archives
Cette section est actuellement interrompue.
Google a cessé de révéler les liens de téléchargement des archives sur la page de téléchargement de Takeout et a mis en place un jeton sécurisé qui limite à 5 fois la récupération du lien de téléchargement pour chaque archive.
J'ai une commande pour faire cela, en supposant que les cookies ont été définis comme variables d'environnement dans la section "Obtenir des cookies" ci-dessus :
~~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]++'~~
~~Le résultat est une liste d'URL délimitée par des lignes qui conduisent au téléchargement de toutes les archives disponibles.
C'est analysé à partir de HTML avec une expression rationnelle .~~
Télécharger tous les fichiers d'archive
Cette section est actuellement interrompue.
Google a cessé de révéler les liens de téléchargement des archives sur la page de téléchargement de Takeout et a mis en place un jeton sécurisé qui limite à 5 fois la récupération du lien de téléchargement pour chaque archive.
Voici le code en Bash pour obtenir les URL des fichiers d'archive et les télécharger tous, en supposant que les cookies ont été définis comme variables d'environnement dans la section "Obtenir des cookies" ci-dessus :
~~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};" {}~~
Je l'ai testé sous Linux, mais la syntaxe devrait être compatible avec macOS également.
Explication de chaque partie :
-
curl
avec des cookies d'authentification :
~~ curl -sL -H "Cookie: SID=${SID}; HSID=${HSID}; SSID=${SSID}; OSID=${OSID};" \~~
-
URL de la page contenant les liens de téléchargement
~~ 'https://takeout.google.com/settings/takeout/downloads' |~~
-
Le filtre ne correspond qu'aux liens de téléchargement
grep -Po '(?
-
Filtrer les liens en double
~~ awk '!x[$0]++' |~~
-
Téléchargez chaque fichier de la liste, un par un :
~~ xargs -n1 -P1 -I{} curl -LOJ -C - -H "Cookie: SID=${SID}; HSID=${HSID}; SSID=${SSID}; OSID=${OSID};" {}~~
Remarque : Paralléliser les téléchargements (modifier -P1
à un nombre plus élevé) est possible, mais Google semble étrangler toutes les connexions sauf une.
Remarque : -C -
ignore les fichiers qui existent déjà, mais il se peut qu'il ne parvienne pas à reprendre les téléchargements pour les fichiers existants.
Cryptage des fichiers d'archives téléchargés
Cette opération n'est pas automatisée. La mise en œuvre dépend de la manière dont vous souhaitez crypter vos fichiers, et la consommation d'espace disque local doit être doublée pour chaque fichier que vous cryptez.
Télécharger les fichiers d'archive téléchargés vers Dropbox
Cette opération n'est pas encore automatisée.
Télécharger les fichiers d'archive téléchargés sur AWS S3
Cette opération n'est pas encore automatisée, mais il devrait suffire de parcourir la liste des fichiers téléchargés et d'exécuter une commande comme :
aws s3 cp TAKEOUT_FILE "s3://MYBUCKET/Google Takeout/"