Cách tự động hóa các bản sao lưu Google Takeout thông thường vào bộ nhớ đám mây


42

Tôi muốn tạo các bản sao lưu Google Takeout thông thường (giả sử cứ sau 3 tháng) và lưu trữ chúng được mã hóa trong một số lưu trữ đám mây khác như DropBox hoặc S3.

Nó không phải là một giải pháp đám mây, mặc dù được ưa thích. Nó không phải tự động 100%, tuy nhiên càng nhiều càng tốt.

Cảm ơn bạn trước cho bất kỳ ý tưởng.

Câu trả lời:


2

Thay vì API trực tiếp để sao lưu Google Takeout (dường như gần như không thể thực hiện được), bạn có thể sao lưu dữ liệu của mình vào các giải pháp lưu trữ của bên thứ 3 thông qua Google Drive. Nhiều dịch vụ của Google cho phép sao lưu vào Google Drive và bạn có thể sao lưu Google Drive bằng các công cụ sau:

GoogleCL - GoogleCL đưa các dịch vụ của Google vào dòng lệnh.

gdatacopier - Tiện ích quản lý tài liệu dòng lệnh cho tài liệu Google.

FUSE Google Drive - Hệ thống tệp không gian người dùng FUSE cho Google Drive, được viết bằng C.

Grive - Một triển khai nguồn mở độc lập của ứng dụng khách Google Drive. Nó sử dụng API danh sách tài liệu của Google để nói chuyện với các máy chủ trong Google. Mã được viết bằng C ++.

gdrive-cli - Giao diện dòng lệnh cho GDrive. Điều này sử dụng API GDrive, không phải API GDocs, điều này rất thú vị. Để sử dụng nó, bạn cần đăng ký một ứng dụng chrome. Nó ít nhất phải được cài đặt bởi bạn, nhưng không cần phải được công bố. Có một ứng dụng soạn sẵn trong repo mà bạn có thể sử dụng làm điểm bắt đầu.

ví dụ python-fuse - Chứa một số slide và ví dụ về hệ thống tập tin Python FUSE.

Hầu hết trong số này dường như nằm trong kho Ubuntu. Tôi đã sử dụng Fuse, gdrive và GoogleCL và tất cả đều hoạt động tốt. Tùy thuộc vào mức độ kiểm soát mà bạn muốn, việc này sẽ thực sự dễ dàng hoặc thực sự phức tạp. Tùy ban. Nó nên được chuyển thẳng từ máy chủ EC2 / S3. Chỉ cần tìm ra từng lệnh một cho tất cả mọi thứ bạn cần và đặt nó vào một tập lệnh trên công việc định kỳ.

Nếu bạn không muốn làm việc chăm chỉ, bạn cũng có thể sử dụng một dịch vụ như Spinbackup . Tôi chắc chắn có những người khác cũng tốt như vậy nhưng tôi chưa thử.


20
Google Takeout công cụ tốt nhất cho việc này vì nó hỗ trợ nhiều dịch vụ hơn các công cụ khác. Câu hỏi có giá trị.
jl6

6
@krowe: Câu trả lời của bạn thực sự hữu ích, tuy nhiên nó chỉ liên quan đến google drive. Google Takeout cho phép bạn tải xuống tất cả dữ liệu của mình từ 25 dịch vụ khác nhau của Google, không chỉ ổ Google.
Bjarke Freund-Hansen

@ BjarkeFreund-Hansen 1) Nhiều dịch vụ trong số 25 dịch vụ đó có thể được lưu vào GDrive và được sao lưu tự động như một phần của bản sao lưu GDrive tự động. 2) Hầu hết các dịch vụ còn lại đều vô nghĩa để sao lưu (+1, Vòng kết nối, v.v.) hoặc không còn tồn tại (Google Code). 3) Tôi mệt mỏi khi giải thích điều này với những người không có câu trả lời tốt hơn. Tôi khá chắc chắn rằng không có cách nào để tự động hóa việc lấy ra (ngoài việc sử dụng macro phía máy khách; dù sao nó cũng không đáng tin cậy lắm). 4) Nếu bạn có thể chứng minh tôi sai thì hãy đăng giải pháp tốt hơn của bạn và chúng ta có thể nói chuyện. Nếu không, sau đó tham khảo bình luận trước đây của tôi về vấn đề tương tự.
krowe

6
@krowe: Gmail, Lịch, Danh bạ, Ảnh, lịch sử Hangout và lịch sử Vị trí là các dịch vụ tôi sử dụng rộng rãi và muốn đảm bảo chống mất dữ liệu tại Google. Không có dữ liệu nào trong số các dịch vụ đó được đưa vào ổ Google. Chỉ vì tôi không biết một giải pháp tốt hơn, hoặc một giải pháp tồn tại, không khiến bạn trả lời đúng hơn. Một lần nữa, tôi không nói rằng bạn trả lời là xấu, nó chỉ không trả lời cho câu hỏi thực tế.
Bjarke Freund-Hansen

@ BjarkeFreund-Hansen Tôi hiểu sự thất vọng của bạn và một số dịch vụ có thể được đồng bộ hóa với GDrive của bạn (vì vậy chúng sẽ sao lưu cùng với nó). Ví dụ: Google Photos có thể làm điều đó: Sao lưu ảnh . Tôi tin rằng Lịch và Danh bạ có thể được đồng bộ hóa theo cùng một cách. GMail cũng có thể được hỗ trợ: Sao lưu GMail . Những điều khác mà bạn đề cập tôi không biết nhưng điều đó chủ yếu là vì cá nhân tôi sẽ không bận tâm sao lưu chúng.
krowe

2

Đây là một câu trả lời một phần với tự động hóa một phần. Nó có thể ngừng hoạt động trong tương lai nếu Google chọn phá vỡ quyền truy cập tự động vào Google Takeout. Các tính năng hiện được hỗ trợ trong câu trả lời này:

+ --------------------------------------------- + --- --------- + --------------------- +
| Tính năng tự động hóa | Tự động hóa? | Nền tảng được hỗ trợ |
+ --------------------------------------------- + --- --------- + --------------------- +
| Đăng nhập tài khoản Google | Không | |
| Nhận cookie từ Mozilla Firefox | Vâng | Linux |
| Nhận cookie từ Google Chrome | Vâng | Linux, macOS |
| Yêu cầu tạo lưu trữ | Không | |
| Lập lịch lưu trữ tạo | Loại | Trang web mang đi |
| Kiểm tra nếu lưu trữ được tạo ra | Không | |
| Nhận danh sách lưu trữ | Vâng | Đa nền tảng |
| Tải xuống tất cả các tập tin lưu trữ | Vâng | Linux, macOS |
| Mã hóa tập tin lưu trữ đã tải xuống | Không | |
| Tải tập tin lưu trữ đã tải xuống Dropbox | Không | |
| Tải các tệp lưu trữ đã tải xuống lên AWS S3 | Không | |
+ --------------------------------------------- + --- --------- + --------------------- +

Thứ nhất, giải pháp đám mây trên đám mây thực sự không thể hoạt động vì không có giao diện giữa Google Takeout và bất kỳ nhà cung cấp lưu trữ đối tượng đã biết nào. Bạn đã phải xử lý các tệp sao lưu trên máy của chính mình (có thể được lưu trữ trên đám mây công cộng, nếu bạn muốn) trước khi gửi chúng cho nhà cung cấp lưu trữ đối tượng của bạn.

Thứ hai, vì không có API Google Takeout, tập lệnh tự động hóa cần giả vờ là người dùng có trình duyệt để duyệt qua quá trình tạo và tải xuống lưu trữ Google Takeout.


Tính năng tự động hóa

Đăng nhập tài khoản Google

Điều này chưa được tự động. Kịch bản sẽ cần phải giả vờ là một trình duyệt và điều hướng các rào cản có thể có như xác thực hai yếu tố, CAPTCHA và sàng lọc bảo mật gia tăng khác.

Nhận cookie từ Mozilla Firefox

Tôi có một tập lệnh cho người dùng Linux để lấy cookie Google Takeout từ Mozilla Firefox và xuất chúng dưới dạng các biến môi trường. Để làm việc này, chỉ nên có một hồ sơ Firefox và hồ sơ đó phải truy cập https://takeout.google.com khi đăng nhập.

Như một lớp lót:

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"

Là một kịch bản Bash đẹp hơn:

#!/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"

Nhận cookie từ Google Chrome

Tôi có một tập lệnh cho Linux và có thể là người dùng macOS để lấy cookie Google Takeout từ Google Chrome và xuất chúng dưới dạng các biến môi trường. Tập lệnh hoạt động dựa trên giả định rằng Python 3 venvcó sẵn và Defaulthồ sơ Chrome đã truy cập https://takeout.google.com khi đăng nhập.

Như một lớp lót:

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

Là một kịch bản Bash đẹp hơn:

#!/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"

Dọn dẹp các tập tin đã tải xuống:

rm -rf "$venv_path"

Yêu cầu tạo lưu trữ

Điều này chưa được tự động. Tập lệnh sẽ cần điền vào biểu mẫu Google Takeout và sau đó gửi nó.

Lập lịch lưu trữ

Chưa có cách nào hoàn toàn tự động để làm điều này, nhưng vào tháng 5 năm 2019, Google Takeout đã giới thiệu một tính năng tự động hóa việc tạo 1 bản sao lưu cứ sau 2 tháng trong 1 năm (tổng cộng 6 bản sao lưu). Điều này phải được thực hiện trong trình duyệt tại https://takeout.google.com trong khi điền vào mẫu yêu cầu lưu trữ:

Google Takeout: Tùy chỉnh định dạng lưu trữ

Kiểm tra nếu lưu trữ được tạo ra

Điều này chưa được tự động. Nếu một kho lưu trữ đã được tạo, đôi khi Google sẽ gửi email đến hộp thư đến Gmail của người dùng, nhưng trong thử nghiệm của tôi, điều này không phải lúc nào cũng xảy ra vì những lý do không xác định.

Cách khác duy nhất để kiểm tra xem một kho lưu trữ đã được tạo hay chưa là bằng cách bỏ phiếu theo định kỳ của Google Takeout.

Nhận danh sách lưu trữ

Tôi có một lệnh để làm điều này, giả sử rằng các cookie đã được đặt làm biến môi trường trong phần "Nhận cookie" ở trên:

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]++'

Đầu ra là một danh sách các URL được phân tách bằng dòng dẫn đến tải xuống tất cả các tài liệu lưu trữ có sẵn.
Nó được phân tích cú pháp từ HTML với regex .

Tải xuống tất cả các tệp lưu trữ

Đây là mã trong Bash để lấy URL của các tệp lưu trữ và tải xuống tất cả, giả sử rằng các cookie đã được đặt làm biến môi trường trong phần "Nhận cookie" ở trên:

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};" {}

Tôi đã thử nghiệm nó trên Linux, nhưng cú pháp cũng phải tương thích với macOS.

Giải thích từng phần:

  1. curl lệnh với cookie xác thực:

    curl -sL -H "Cookie: SID=${SID}; HSID=${HSID}; SSID=${SSID}; OSID=${OSID};" \
  2. URL của trang có các liên kết tải xuống

    'https://takeout.google.com/settings/takeout/downloads' | \
  3. Bộ lọc chỉ khớp với các liên kết tải xuống

    grep -Po '(?<=")https://storage\.cloud\.google\.com/[^"]+(?=")' | \
  4. Lọc ra các liên kết trùng lặp

    awk '!x[$0]++' \ |
  5. Tải xuống từng tệp trong danh sách, từng cái một:

    xargs -n1 -P1 -I{} curl -LOJ -C - -H "Cookie: SID=${SID}; HSID=${HSID}; SSID=${SSID}; OSID=${OSID};" {}

    Lưu ý: Có thể song song tải xuống (thay đổi -P1thành số cao hơn), nhưng Google dường như điều tiết tất cả trừ một trong các kết nối.

    Lưu ý: -C - bỏ qua các tệp đã tồn tại, nhưng nó có thể không tiếp tục tải xuống thành công các tệp hiện có.

Mã hóa tập tin lưu trữ đã tải xuống

Điều này không tự động. Việc triển khai tùy thuộc vào cách bạn muốn mã hóa tệp của mình và mức tiêu thụ không gian đĩa cục bộ phải được nhân đôi cho mỗi tệp bạn đang mã hóa.

Tải tập tin lưu trữ đã tải xuống Dropbox

Điều này chưa được tự động.

Tải các tệp lưu trữ đã tải xuống lên AWS S3

Điều này chưa được tự động, nhưng nó chỉ đơn giản là vấn đề lặp qua danh sách các tệp đã tải xuống và chạy một lệnh như:

aws s3 cp TAKEOUT_FILE "s3://MYBUCKET/Google Takeout/"

0

Tôi đã tìm thấy câu hỏi này trong khi tìm kiếm cách sửa ảnh google của mình không hiển thị đúng trong ổ google (mà tôi đã tự động sao lưu!).

Vì vậy, để làm cho ảnh của bạn hiển thị trong google drive, hãy truy cập https://photos.google.com , cài đặt và đặt nó để hiển thị ảnh trong một thư mục trong ổ đĩa.

Sau đó, sử dụng https://github.com/ncw/rclone để sao chép toàn bộ ổ đĩa google của bạn (hiện bao gồm ảnh dưới dạng thư mục 'bình thường') vào bộ nhớ cục bộ của bạn.


Rclone trông tuyệt vời, có vẻ như một dự án trưởng thành. Chỉ là giải pháp tôi đang tìm kiếm.
steampowered

Nó thật sự rất tuyệt. tho với hàng ngàn bức ảnh của tôi bây giờ mất một lúc để lướt qua chúng. Tôi tự hỏi nếu tôi chỉ có thể làm cho nó tải xuống một cách mù quáng mọi thứ, thay vì kiểm tra các bản sao.
djsmiley2k - CoW
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.