นี่คือคำตอบบางส่วนด้วยการทำงานอัตโนมัติบางส่วน มันอาจหยุดทำงานในอนาคตหาก Google เลือกที่จะปราบปรามการเข้าถึง Google Takeout โดยอัตโนมัติ ฟีเจอร์ที่รองรับในคำตอบนี้:
+ --------------------------------------------- + --- --------- + --------------------- +
| คุณสมบัติอัตโนมัติ อัตโนมัติ? | รองรับแพลตฟอร์ม |
+ --------------------------------------------- + --- --------- + --------------------- +
| เข้าสู่ระบบบัญชี Google ไม่ | |
| รับคุกกี้จาก Mozilla Firefox | ใช่ Linux |
| รับคุกกี้จาก Google Chrome | ใช่ Linux, macOS |
| ร้องขอการสร้างที่เก็บถาวร | ไม่ | |
| กำหนดการสร้างคลังข้อมูล | คินดา เว็บไซต์ซื้อกลับบ้าน
| ตรวจสอบว่ามีการสร้างที่เก็บถาวรหรือไม่ ไม่ | |
| รับรายการที่เก็บถาวร ใช่ ข้ามแพลตฟอร์ม |
| ดาวน์โหลดไฟล์เก็บถาวรทั้งหมด ใช่ Linux, macOS |
| เข้ารหัสไฟล์เก็บถาวรที่ดาวน์โหลดมา | ไม่ | |
| อัปโหลดไฟล์เก็บถาวรที่ดาวน์โหลดไปยัง Dropbox | ไม่ | |
| อัปโหลดไฟล์เก็บถาวรที่ดาวน์โหลดไปยัง AWS S3 | ไม่ | |
+ --------------------------------------------- + --- --------- + --------------------- +
ประการแรกโซลูชันระบบ Cloud-to-Cloud ใช้งานไม่ได้เพราะไม่มีส่วนต่อประสานระหว่าง Google Takeout และผู้ให้บริการที่เก็บข้อมูลวัตถุที่รู้จัก คุณต้องประมวลผลไฟล์สำรองข้อมูลในเครื่องของคุณเอง (ซึ่งอาจเป็นโฮสต์ในระบบคลาวด์สาธารณะหากคุณต้องการ) ก่อนที่จะส่งออกไปยังผู้ให้บริการที่เก็บข้อมูลวัตถุของคุณ
ประการที่สองเนื่องจากไม่มี Google Takeout API สคริปต์อัตโนมัติจะต้องแกล้งเป็นผู้ใช้ที่มีเบราว์เซอร์ที่จะดำเนินการสร้างและดาวน์โหลดโฟลว์การเก็บถาวรของ Google Takeout
คุณสมบัติอัตโนมัติ
เข้าสู่ระบบบัญชี Google
สิ่งนี้ยังไม่เป็นอัตโนมัติ สคริปต์จะต้องแสร้งทำเป็นเบราว์เซอร์และสำรวจสิ่งกีดขวางที่เป็นไปได้เช่นการตรวจสอบสิทธิ์แบบสองปัจจัย CAPTCHAs และการตรวจคัดกรองความปลอดภัยที่เพิ่มขึ้นอื่น ๆ
รับคุกกี้จาก Mozilla Firefox
ฉันมีสคริปต์สำหรับผู้ใช้ Linux เพื่อคว้าคุกกี้ Google Takeout จาก Mozilla Firefox และส่งออกเป็นตัวแปรสภาพแวดล้อม เพื่อให้ใช้งานได้ควรมีเพียงหนึ่งโปรไฟล์ Firefox เท่านั้นและต้องเข้าสู่https://takeout.google.comในขณะที่ลงชื่อเข้าใช้
ในฐานะที่เป็นหนึ่งซับ:
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"
ในฐานะที่เป็นสคริปต์ 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.
# 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
ฉันมีสคริปต์สำหรับ Linux และผู้ใช้ macOS เพื่อคว้าคุกกี้ Google Takeout จาก Google Chrome และส่งออกเป็นตัวแปรสภาพแวดล้อม สคริปต์ทำงานบนสมมติฐานที่ว่า Python 3 venv
พร้อมใช้งานและDefault
โปรไฟล์ Chrome เข้าชมhttps://takeout.google.comขณะที่ลงชื่อเข้าใช้
ในฐานะที่เป็นหนึ่งซับ:
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
ในฐานะที่เป็นสคริปต์ 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"
ล้างไฟล์ที่ดาวน์โหลด:
rm -rf "$venv_path"
ร้องขอการสร้างที่เก็บถาวร
สิ่งนี้ยังไม่เป็นอัตโนมัติ สคริปต์จะต้องกรอกแบบฟอร์มซื้อกลับของ Google แล้วส่ง
กำหนดการสร้างคลังข้อมูล
ยังไม่มีวิธีอัตโนมัติในการทำเช่นนี้ แต่ในเดือนพฤษภาคม 2019 Google Takeout ได้เปิดตัวคุณลักษณะที่สร้างการสำรองข้อมูล 1 ชุดโดยอัตโนมัติทุก ๆ 2 เดือนเป็นเวลา 1 ปี (มีทั้งหมด 6 สำรอง) สิ่งนี้จะต้องทำในเบราว์เซอร์ที่https://takeout.google.comขณะที่กรอกแบบฟอร์มคำขอเก็บถาวร:
ตรวจสอบว่ามีการสร้างที่เก็บถาวรหรือไม่
สิ่งนี้ยังไม่เป็นอัตโนมัติ หากมีการสร้างที่เก็บถาวร Google จะส่งอีเมลไปยังกล่องจดหมาย Gmail ของผู้ใช้ แต่ในการทดสอบของฉันสิ่งนี้ไม่ได้เกิดขึ้นเพราะเหตุผลที่ไม่รู้จัก
อีกวิธีหนึ่งในการตรวจสอบว่ามีการสร้างที่เก็บถาวรหรือไม่โดยการสำรวจ Google Takeout เป็นระยะ
รับรายการเก็บถาวร
ฉันมีคำสั่งให้ทำเช่นนี้โดยสมมติว่าคุกกี้ถูกตั้งค่าเป็นตัวแปรสภาพแวดล้อมในส่วน "รับคุกกี้" ด้านบน:
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]++'
เอาต์พุตเป็นรายการที่คั่นด้วยบรรทัดของ URL ที่นำไปสู่การดาวน์โหลดไฟล์เก็บถาวรทั้งหมดที่มี
มันแยกวิเคราะห์จาก HTML กับ regex
ดาวน์โหลดไฟล์เก็บถาวรทั้งหมด
นี่คือรหัสใน Bash เพื่อรับ URL ของไฟล์เก็บถาวรและดาวน์โหลดทั้งหมดโดยถือว่ามีการตั้งค่าคุกกี้เป็นตัวแปรสภาพแวดล้อมในส่วน "รับคุกกี้" ด้านบน:
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 แล้ว แต่ไวยากรณ์ควรใช้งานร่วมกับ macOS ได้เช่นกัน
คำอธิบายของแต่ละส่วน:
curl
คำสั่งด้วยคุกกี้การตรวจสอบสิทธิ์:
curl -sL -H "Cookie: SID=${SID}; HSID=${HSID}; SSID=${SSID}; OSID=${OSID};" \
URL ของหน้าเว็บที่มีลิงค์ดาวน์โหลด
'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};" {}
หมายเหตุ:การดาวน์โหลดแบบขนาน (เปลี่ยน-P1
เป็นตัวเลขที่สูงกว่า) เป็นไปได้ แต่ Google ดูเหมือนจะเค้นทั้งหมดยกเว้นหนึ่งในการเชื่อมต่อ
หมายเหตุ: -C -
ข้ามไฟล์ที่มีอยู่แล้ว แต่อาจไม่สามารถทำการดาวน์โหลดไฟล์ที่มีอยู่ต่อได้
เข้ารหัสไฟล์เก็บถาวรที่ดาวน์โหลดมา
สิ่งนี้ไม่อัตโนมัติ การนำไปใช้นั้นขึ้นอยู่กับวิธีที่คุณต้องการเข้ารหัสไฟล์ของคุณและการใช้พื้นที่ดิสก์ในเครื่องจะต้องเพิ่มเป็นสองเท่าสำหรับแต่ละไฟล์ที่คุณกำลังเข้ารหัส
อัปโหลดไฟล์เก็บถาวรที่ดาวน์โหลดไปยัง Dropbox
สิ่งนี้ยังไม่เป็นอัตโนมัติ
อัปโหลดไฟล์เก็บถาวรที่ดาวน์โหลดไปยัง AWS S3
สิ่งนี้ยังไม่เป็นไปโดยอัตโนมัติ แต่ควรเป็นเรื่องของการวนซ้ำในรายการไฟล์ที่ดาวน์โหลดและเรียกใช้คำสั่งเช่น:
aws s3 cp TAKEOUT_FILE "s3://MYBUCKET/Google Takeout/"