我想创建常规的Google Takeout备份(假设每3个月一次),并将其加密存储在Dropbox或S3等其他云存储中。
尽管首选,但它不一定是云到云的解决方案。它不必是100%自动化的,但是越多越好。
预先感谢您的任何想法。
我想创建常规的Google Takeout备份(假设每3个月一次),并将其加密存储在Dropbox或S3等其他云存储中。
尽管首选,但它不一定是云到云的解决方案。它不必是100%自动化的,但是越多越好。
预先感谢您的任何想法。
Answers:
您可以通过Google云端硬盘将数据备份到第三方存储解决方案,而不是直接备份Google Takeout的Direct API。许多Google服务都允许备份到Google云端硬盘,并且您可以使用以下工具备份Google云端硬盘:
GoogleCL -GoogleCL将Google服务带到命令行。
gdatacopier-用于Google文档的命令行文档管理实用程序。
FUSE Google Drive-用C编写的Google Drive FUSE用户空间文件系统。
Grive -Google云端硬盘客户端的独立开源实现。它使用Google Document List API与Google中的服务器通信。该代码用C ++编写。
gdrive-cli -GDrive的命令行界面。这使用的是GDrive API,而不是GDocs API,这很有趣。要使用它,您需要注册一个Chrome应用程序。它必须至少可以由您安装,但无需发布。回购中有一个样板应用程序,您可以将其用作起点。
python-fuse示例 -包含一些Python FUSE文件系统的幻灯片和示例。
其中大多数似乎都在Ubuntu存储库中。我自己使用过Fuse,gdrive和GoogleCL,它们都可以正常工作。根据您希望的控制级别,这将非常容易或非常复杂。随你(由你决定。从EC2 / S3服务器执行此操作应该很简单。只需一一列出所需命令,然后将其放在cron作业的脚本中即可。
如果您不想这么努力,也可以使用Spinbackup之类的服务。我敢肯定还有其他人也一样,但是我还没有尝试过。
这是部分自动化的部分答案。如果Google选择打击对Google Takeout的自动访问,将来可能会停止工作。此答案当前支持的功能:
+ --------------------------------------------- + --- --------- + --------------------- + | 自动化功能| 自动化了吗?| 支持的平台| + --------------------------------------------- + --- --------- + --------------------- + | Google帐户登录| 没有 | | 从Mozilla Firefox获取cookie | 是的 Linux | | 从Google Chrome浏览器获取Cookie | 是的 Linux,macOS | | 请求存档创建| 没有 | | 计划存档创建| 金田| 外卖网站| | 检查是否创建了存档| 没有 | | 获取存档列表| 是的 跨平台| | 下载所有存档文件| 是的 Linux,macOS | | 加密下载的存档文件| 没有 | | 将下载的存档文件上传到Dropbox | 没有 | | 将下载的存档文件上传到AWS S3 | 没有 | + --------------------------------------------- + --- --------- + --------------------- +
首先,云到云的解决方案实际上无法工作,因为Google Takeout与任何已知的对象存储提供商之间都没有接口。您必须先在自己的计算机上处理备份文件(如果需要,可以将其托管在公共云中),然后再将备份文件发送给对象存储提供商。
其次,由于没有Google Takeout API,因此需要假装自动化脚本成为浏览器用户,以逐步完成Google Takeout归档文件的创建和下载流程。
这还没有自动化。该脚本需要伪装成浏览器并浏览可能的障碍,例如两因素身份验证,CAPTCHA和其他增强的安全性筛选。
我有一个Linux用户脚本,可从Mozilla Firefox抓取Google Takeout cookie并将其导出为环境变量。为此,只能有一个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用户的脚本,可以从Google Chrome浏览器获取Google Takeout cookie并将其导出为环境变量。该脚本假定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 Takeout表单,然后提交。
尚无完全自动化的方法,但在2019年5月,Google Takeout引入了一项功能,该功能可每2个月自动创建1个备份,共1年(共6个备份)。这必须在浏览器中https://takeout.google.com上完成,同时填写存档申请表:
这还没有自动化。如果已创建存档,则Google有时会向用户的Gmail收件箱发送电子邮件,但是在我的测试中,由于未知原因,这种情况并非总是会发生。
检查存档是否已创建的唯一其他方法是定期轮询Google Takeout。
我有一个命令可以执行此操作,假设已在上面的“获取cookie”部分中将cookie设置为环境变量:
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,这些URL导致所有可用档案的下载。
它是使用regex从HTML解析的。
这是Bash中的代码,用于获取存档文件的URL并下载所有URL,并假设已在上述“获取cookie”部分中将cookie设置为环境变量:
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
带有身份验证Cookie的命令:
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驱动器(现在包括照片作为“普通”目录)克隆到本地存储中。