Bu, kısmi otomasyona sahip kısmi bir cevaptır. Google, Google Takeout’a otomatik erişimi engellemeyi seçerse gelecekte çalışmaya devam edebilir. Şu anda bu yanıtta desteklenen özellikler:
+ --------------------------------------------- + --- --------- + --------------------- +
| Otomasyon Özelliği | Otomatik? | Desteklenen Platformlar |
+ --------------------------------------------- + --- --------- + --------------------- +
| Google Hesabı giriş | Hayır | |
| Mozilla Firefox’tan çerezleri alın | Evet | Linux |
| Google Chrome'dan çerez al | Evet | Linux, macOS |
| Arşiv oluşturma iste | Hayır | |
| Zamanlama arşiv oluşturma | Tür | Paket servisi web sitesi |
| Arşivin oluşturulduğunu kontrol edin | Hayır | |
| Arşiv listesini al | Evet | Çapraz platform |
| Tüm arşiv dosyalarını indir | Evet | Linux, macOS |
| İndirilen arşiv dosyalarını şifrele | Hayır | |
| İndirilen arşiv dosyalarını Dropbox'a yükleyin | Hayır | |
| İndirilen arşiv dosyalarını AWS S3'e yükleyin | Hayır | |
+ --------------------------------------------- + --- --------- + --------------------- +
İlk olarak, bir buluttan buluta çözümü gerçekten işe yaramaz çünkü Google Takeout ile bilinen herhangi bir nesne depolama sağlayıcısı arasında bir arayüz yoktur. Yedekleme dosyalarını kendi makinenizde (isterseniz genel bulutta barındırılabilir), nesne depolama sağlayıcınıza göndermeden önce işlemelisiniz.
İkincisi, bir Google Takeout API'si olmadığından, bir otomasyon betiğinin Google Takeout arşiv oluşturma ve indirme akışında gezinmek için tarayıcıya sahip bir kullanıcı gibi davranması gerekir.
Otomasyon Özellikleri
Google Hesabı girişi
Bu henüz otomatik değil. Betiğin bir tarayıcı gibi davranması ve iki faktörlü kimlik doğrulaması, CAPTCHA'lar ve diğer artırılmış güvenlik taraması gibi olası engellerde gezinmesi gerekir.
Mozilla Firefox’tan çerezleri al
Linux kullanıcılarının Mozilla Firefox’tan Google Paket Servis çerezlerini alması ve ortam değişkenleri olarak dışa aktarması için bir senaryom var. Bunun çalışması için yalnızca bir Firefox profili olmalı ve giriş yaparken https://takeout.google.com adresini ziyaret etmiş olmalıdır .
Tek astar olarak:
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"
Daha güzel bir Bash senaryosu olarak:
#!/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"
Google Chrome'dan çerez al
Linux ve muhtemelen macOS kullanıcılarının Google Chrome'dan Google Paket Servis çerezlerini alıp çevre değişkenleri olarak dışa aktarmaları için bir komut dosyası var. Betik Python 3'ün venv
kullanılabilir olduğu varsayımına dayanıyor ve Default
Chrome profili giriş yaparken https://takeout.google.com adresini ziyaret ediyor .
Tek astar olarak:
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
Daha güzel bir Bash senaryosu olarak:
#!/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"
İndirilen dosyaları temizle:
rm -rf "$venv_path"
Arşiv oluşturma isteğinde bulun
Bu henüz otomatik değil. Komut dosyasının Google Takeout formunu doldurması ve sonra göndermesi gerekir.
Arşiv oluşturmayı zamanla
Bunu yapmak için henüz tam otomatik bir yol yoktur, ancak Mayıs 2019’da Google Takeout, 1 yıl boyunca her 2 ayda bir 1 yedek oluşturmayı otomatikleştiren bir özellik (toplam 6 yedek) sunar. Bu, arşiv istek formunu doldururken tarayıcıda https://takeout.google.com adresinde yapılmalıdır :
Arşivin oluşturulduğunu kontrol edin
Bu henüz otomatik değil. Bir arşiv oluşturulduysa, Google bazen kullanıcının Gmail gelen kutusuna bir e-posta gönderir, ancak testimde bu her zaman bilinmeyen nedenlerle olmaz.
Bir arşivin oluşturulduğunu kontrol etmenin tek yolu, düzenli aralıklarla Google Takeout’u sorgulamaktır.
Arşiv listesini al
Çerezlerin yukarıdaki "Çerezleri al" bölümünde ortam değişkenleri olarak ayarlandığını varsayarak bunu yapmak için bir komutum var:
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]++'
Çıktı, mevcut tüm arşivlerin indirilmesine yol açan satırlarla ayrılmış bir URL listesidir.
O oluyor regex HTML çözümlenir .
Tüm arşiv dosyalarını indir
Tanımlama bilgilerinin yukarıdaki "Tanımlama bilgileri al" bölümünde ortam değişkenleri olarak ayarlandığı varsayılarak, arşiv dosyalarının URL'lerini almak ve hepsini indirmek için Bash kodudur:
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};" {}
Linux'ta test ettim, ancak sözdizimi macOS ile de uyumlu olmalı.
Her bölümün açıklaması:
curl
kimlik doğrulama çerezleri ile komut:
curl -sL -H "Cookie: SID=${SID}; HSID=${HSID}; SSID=${SSID}; OSID=${OSID};" \
İndirme bağlantılarına sahip sayfanın URL’si
'https://takeout.google.com/settings/takeout/downloads' | \
Filtre yalnızca indirme bağlantılarıyla eşleşiyor
grep -Po '(?<=")https://storage\.cloud\.google\.com/[^"]+(?=")' | \
Çift bağlantıları filtrele
awk '!x[$0]++' \ |
Listedeki her dosyayı tek tek indirin:
xargs -n1 -P1 -I{} curl -LOJ -C - -H "Cookie: SID=${SID}; HSID=${HSID}; SSID=${SSID}; OSID=${OSID};" {}
Not: İndirmeleri paralel hale getirmek ( -P1
daha yüksek bir numaraya değiştirmek ) mümkündür, ancak Google, bağlantılardan birini dışındakileri kısmaya çalışıyor.
Not: -C -
Önceden varolan dosyaları atlar, ancak mevcut dosyalar için indirmeleri başarıyla devam ettiremeyebilir.
İndirilen arşiv dosyalarını şifrele
Bu otomatik değil. Uygulama, dosyalarınızı nasıl şifrelemek istediğinize bağlıdır ve şifrelemekte olduğunuz her dosya için yerel disk alanı tüketimi iki katına çıkarılmalıdır.
İndirilen arşiv dosyalarını Dropbox'a yükleyin
Bu henüz otomatik değil.
İndirilen arşiv dosyalarını AWS S3'e yükleyin
Bu henüz otomatik değildir, ancak indirilen dosyalar listesinde yineleme ve aşağıdaki gibi bir komutu çalıştırma meselesi olmalıdır:
aws s3 cp TAKEOUT_FILE "s3://MYBUCKET/Google Takeout/"