Esta é uma resposta parcial com automação parcial. Pode parar de funcionar no futuro se o Google optar por reprimir o acesso automatizado ao Google Takeout. Recursos atualmente suportados nesta resposta:
+ --------------------------------------------- + --- --------- + --------------------- +
| Recurso de automação | Automatizado? | Plataformas Suportadas |
+ --------------------------------------------- + --- --------- + --------------------- +
| Login na Conta do Google | Não |
| Obtenha cookies do Mozilla Firefox | Sim Linux
| Obtenha cookies do Google Chrome | Sim Linux, macOS |
| Solicitar criação de arquivo | Não |
| Agendar criação de arquivo | Meio que | Site para viagem |
| Verifique se o arquivo morto foi criado | Não |
| Obter lista de arquivos | Sim Plataforma cruzada |
| Baixe todos os arquivos compactados | Sim Linux, macOS |
| Criptografar arquivos baixados | Não |
| Carregar arquivos baixados para o Dropbox | Não |
| Carregar arquivos compactados baixados para o AWS S3 | Não |
+ --------------------------------------------- + --- --------- + --------------------- +
Em primeiro lugar, uma solução de nuvem para nuvem não pode realmente funcionar porque não há interface entre o Google Takeout e qualquer provedor de armazenamento de objetos conhecido. É necessário processar os arquivos de backup em sua própria máquina (que podem ser hospedados na nuvem pública, se você desejar) antes de enviá-los ao seu provedor de armazenamento de objetos.
Em segundo lugar, como não há API do Google Takeout, um script de automação precisa fingir ser um usuário com um navegador para percorrer o fluxo de download e criação de arquivos do Google Takeout.
Recursos de automação
Login da Conta do Google
Isso ainda não está automatizado. O script precisaria fingir ser um navegador e navegar por possíveis obstáculos, como autenticação de dois fatores, CAPTCHAs e outra triagem de segurança aumentada.
Obtenha cookies do Mozilla Firefox
Eu tenho um script para usuários do Linux pegar os cookies do Google Takeout do Mozilla Firefox e exportá-los como variáveis de ambiente. Para que isso funcione, deve haver apenas um perfil do Firefox e o perfil deve ter visitado https://takeout.google.com enquanto estiver conectado.
Como uma linha:
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 um script Bash mais 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"
Obter cookies do Google Chrome
Eu tenho um script para Linux e possivelmente usuários do macOS para pegar os cookies do Google Takeout no Google Chrome e exportá-los como variáveis de ambiente. O script funciona no pressuposto de que o Python 3 venv
esteja disponível e o Default
perfil do Chrome visitou https://takeout.google.com enquanto estiver conectado.
Como uma linha:
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 um script Bash mais 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"
Limpe os arquivos baixados:
rm -rf "$venv_path"
Solicitar criação de arquivo
Isso ainda não está automatizado. O script precisaria preencher o formulário do Google Takeout e enviá-lo.
Agendar criação de arquivo morto
Ainda não há uma maneira totalmente automatizada de fazer isso, mas em maio de 2019, o Google Takeout introduziu um recurso que automatiza a criação de 1 backup a cada 2 meses por 1 ano (total de 6 backups). Isso deve ser feito no navegador em https://takeout.google.com ao preencher o formulário de solicitação de arquivamento:
Verifique se o arquivo morto foi criado
Isso ainda não está automatizado. Se um arquivo foi criado, o Google às vezes envia um email para a caixa de entrada do Gmail do usuário, mas nos meus testes, isso nem sempre acontece por motivos desconhecidos.
A única outra maneira de verificar se um arquivo foi criado é pesquisando periodicamente o Google Takeout.
Obter lista de arquivos
Eu tenho um comando para fazer isso, supondo que os cookies tenham sido definidos como variáveis de ambiente na seção "Obter cookies" acima:
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]++'
A saída é uma lista delimitada por linha de URLs que levam a downloads de todos os arquivos disponíveis.
É analisado do HTML com regex .
Faça o download de todos os arquivos compactados
Aqui está o código no Bash para obter os URLs dos arquivos e baixá-los todos, assumindo que os cookies foram definidos como variáveis de ambiente na seção "Obter cookies" acima:
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};" {}
Eu testei no Linux, mas a sintaxe também deve ser compatível com o macOS.
Explicação de cada parte:
curl
comando com cookies de autenticação:
curl -sL -H "Cookie: SID=${SID}; HSID=${HSID}; SSID=${SSID}; OSID=${OSID};" \
URL da página que possui os links para download
'https://takeout.google.com/settings/takeout/downloads' | \
O filtro corresponde apenas aos links para download
grep -Po '(?<=")https://storage\.cloud\.google\.com/[^"]+(?=")' | \
Filtrar links duplicados
awk '!x[$0]++' \ |
Faça o download de cada arquivo da lista, um por um:
xargs -n1 -P1 -I{} curl -LOJ -C - -H "Cookie: SID=${SID}; HSID=${HSID}; SSID=${SSID}; OSID=${OSID};" {}
Nota:-P1
é possível paralelizar os downloads (mudar para um número maior), mas o Google parece limitar todas as conexões, exceto uma.
Nota: -C -
ignora arquivos que já existem, mas pode não retomar com êxito os downloads de arquivos existentes.
Criptografar arquivos baixados
Isso não é automatizado. A implementação depende de como você deseja criptografar seus arquivos e o consumo de espaço em disco local deve ser dobrado para cada arquivo que você está criptografando.
Carregar arquivos baixados para o Dropbox
Isso ainda não está automatizado.
Carregar arquivos compactados baixados para o AWS S3
Isso ainda não está automatizado, mas deve ser apenas uma questão de iterar sobre a lista de arquivos baixados e executar um comando como:
aws s3 cp TAKEOUT_FILE "s3://MYBUCKET/Google Takeout/"