정기적 인 Google 테이크 아웃 백업 을 만들고 (3 개월마다 말하겠습니다) DropBox 또는 S3와 같은 다른 클라우드 저장소에 암호화하여 저장하고 싶습니다.
선호되는 클라우드 간 솔루션 일 필요는 없습니다. 100 % 자동화 할 필요는 없지만 더 좋습니다.
어떤 아이디어라도 미리 감사드립니다.
정기적 인 Google 테이크 아웃 백업 을 만들고 (3 개월마다 말하겠습니다) DropBox 또는 S3와 같은 다른 클라우드 저장소에 암호화하여 저장하고 싶습니다.
선호되는 클라우드 간 솔루션 일 필요는 없습니다. 100 % 자동화 할 필요는 없지만 더 좋습니다.
어떤 아이디어라도 미리 감사드립니다.
답변:
현재로서는 거의 불가능한 것으로 보이는 Google 테이크 아웃 백업을위한 직접 API 대신 Google 드라이브를 통해 데이터를 타사 스토리지 솔루션에 백업 할 수 있습니다. 많은 Google 서비스는 Google 드라이브에 백업을 허용하며 다음 도구를 사용하여 Google 드라이브를 백업 할 수 있습니다.
GoogleCL -GoogleCL은 Google 서비스를 명령 줄에 제공합니다.
gdatacopier -Google 문서 용 명령 행 문서 관리 유틸리티
FUSE Google 드라이브 -C로 작성된 Google 드라이브 용 FUSE 사용자 공간 파일 시스템
Grive -Google 드라이브 클라이언트의 독립적 인 오픈 소스 구현입니다. Google 문서 목록 API를 사용하여 Google 서버와 통신합니다. 코드는 C ++로 작성되었습니다.
gdrive-cli -GDrive 용 명령 줄 인터페이스입니다. 이것은 흥미로운 GDocs API가 아닌 GDrive API를 사용합니다. 사용하려면 크롬 애플리케이션을 등록해야합니다. 최소한 설치 가능해야하지만 게시 할 필요는 없습니다. repo에는 시작점으로 사용할 수있는 상용구 앱이 있습니다.
python-fuse 예제 -파이썬 FUSE 파일 시스템의 슬라이드와 예제가 들어 있습니다.
이것들 대부분은 우분투 저장소에있는 것 같습니다. 나는 퓨즈, gdrive 및 GoogleCL을 직접 사용했으며 모두 잘 작동합니다. 원하는 제어 수준에 따라이 작업은 매우 쉽고 복잡합니다. 그것은 당신에게 달려 있습니다. EC2 / S3 서버에서 직접 수행해야합니다. 필요한 모든 것에 대해 명령을 하나씩 알아내어 크론 작업의 스크립트에 넣으십시오.
열심히 일하고 싶지 않다면 Spinbackup 과 같은 서비스를 사용할 수도 있습니다 . 나는 다른 사람들처럼 좋은 것이 확실하지만 나는 시도하지 않았다.
이것은 부분 자동화의 부분 답변입니다. Google이 Google 테이크 아웃에 대한 자동 액세스를 단속하기로 선택하면 향후 작동이 중지 될 수 있습니다. 이 답변에서 현재 지원되는 기능 :
+ --------------------------------------------- + --- --------- + --------------------- + | 자동화 기능 | 자동화 되었습니까? | 지원되는 플랫폼 | + --------------------------------------------- + --- --------- + --------------------- + | Google 계정 로그인 | 아니요 | | | Mozilla Firefox에서 쿠키 가져 오기 | 예 | 리눅스 | | Chrome에서 쿠키 가져 오기 | 예 | 리눅스, macOS | | 아카이브 생성 요청 | 아니요 | | | 아카이브 생성 일정 | 킨다 | 테이크 아웃 웹 사이트 | | 아카이브가 작성되었는지 확인 | 아니요 | | | 보관 목록 가져 오기 | 예 | 크로스 플랫폼 | | 모든 아카이브 파일 다운로드 | 예 | 리눅스, macOS | | 다운로드 한 아카이브 파일 암호화 | 아니요 | | | 다운로드 한 아카이브 파일을 Dropbox | 아니요 | | | 다운로드 한 아카이브 파일을 AWS S3에 업로드 | 아니요 | | + --------------------------------------------- + --- --------- + --------------------- +
첫째, Google 테이크 아웃과 알려진 객체 저장소 공급자간에 인터페이스가 없기 때문에 클라우드 간 솔루션이 실제로 작동하지 않습니다. 백업 파일을 오브젝트 스토리지 제공자로 전송하기 전에 자신의 머신 (원하는 경우 퍼블릭 클라우드에서 호스팅 가능)에서 백업 파일을 처리해야합니다.
둘째, Google 테이크 아웃 API가 없으므로 자동화 스크립트는 브라우저를 사용하여 사용자가 Google 테이크 아웃 아카이브 생성 및 다운로드 흐름을 안내하는 척해야합니다.
아직 자동화되지 않았습니다. 스크립트는 브라우저 인 척하고 2 단계 인증, 보안 문자 및 기타 보안 강화 검사와 같은 가능한 장애물을 탐색해야합니다.
Linux 사용자가 Mozilla Firefox에서 Google 테이크 아웃 쿠키를 가져 와서 환경 변수로 내보내는 스크립트가 있습니다. 이 기능을 사용하려면 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"
Linux 및 macOS 사용자가 Chrome에서 Google 테이크 아웃 쿠키를 가져 와서 환경 변수로 내보내는 스크립트가 있습니다. 이 스크립트는 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 년 5 월 Google 테이크 아웃은 1 년 동안 2 개월마다 1 개의 백업 생성을 자동화하는 기능을 도입했습니다 (총 6 개의 백업). 보관 요청 양식을 작성하는 동안 https://takeout.google.com 브라우저에서 수행해야합니다 .
아직 자동화되지 않았습니다. 보관 파일이 생성 된 경우 Google은 때때로 사용자의 Gmail받은 편지함으로 이메일을 보내지 만 필자의 테스트에서 항상 알 수없는 이유로 발생하는 것은 아닙니다.
아카이브가 생성되었는지 확인하는 유일한 다른 방법은 Google 테이크 아웃을 주기적으로 폴링하는 것입니다.
쿠키가 위의 "쿠키 가져 오기"섹션에서 환경 변수로 설정되었다고 가정하면 다음과 같은 명령이 있습니다.
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 목록입니다.
regex를 사용하여 HTML
에서 구문 분석되었습니다 .
쿠키가 위의 "쿠키 가져 오기"섹션에서 환경 변수로 설정되었다고 가정하면 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 -
이미 존재하는 파일은 건너 뛰지 만 기존 파일의 다운로드를 다시 시작하지 못할 수 있습니다.
이것은 자동화되지 않습니다. 구현 방법은 파일을 암호화하는 방법에 따라 다르며 암호화하는 각 파일에 대해 로컬 디스크 공간 소비를 두 배로 늘려야합니다.
아직 자동화되지 않았습니다.
이것은 아직 자동화되지는 않았지만 단순히 다운로드 된 파일 목록을 반복하고 다음과 같은 명령을 실행하면됩니다.
aws s3 cp TAKEOUT_FILE "s3://MYBUCKET/Google Takeout/"
Google 드라이브에서 Google 사진이 올바르게 표시되지 않는 문제를 해결하는 방법을 검색하는 동안이 질문을 발견했습니다 (이미 자동 백업 중입니다).
따라서 Google 드라이브에 사진을 표시하려면 https://photos.google.com 설정으로 이동하여 드라이브의 폴더에 사진을 표시하도록 설정하십시오.
그런 다음 https://github.com/ncw/rclone 을 사용 하여 전체 Google 드라이브 (이제 사진을 '일반'디렉토리로 포함)를 로컬 저장소에 복제하십시오.