谷歌照片和相册备份工具

gphotos-sync的Python项目详细描述


谷歌照片同步

简介

有关非常好的描述和详细说明,请参阅logix在linux起义上的文章

谷歌照片同步下载你的谷歌照片到本地文件系统。它会备份所有的照片 用户上载到 谷歌照片,还有相册信息和其他谷歌照片"创作"(动画,全景, 电影、特效和拼贴画)。

此项目使用新的google photos api请参见 https://developers.google.com/photos/

完成完全同步后,您将在指定根目录下有两个目录:

  • 照片 -包含来自google照片库的所有照片和视频,这些照片和视频按 结构"photos/yyy/mm",其中"yyyy/mm"是拍摄照片/视频的日期。文件夹中的文件名 将按照原始上传,但重复的名称将有一个后缀(n),其中n是重复的编号 (这与官方google windows工具中使用的方法相匹配)。
  • 相册 -包含表示库中相册和共享相册集的文件夹层次结构。所有 这些文件是指向照片文件夹中内容的符号链接。文件夹名将是 '相册/yyyy/mm原始相册名称。'

此外,在使用-compare-folder选项时还会有更多的文件夹。该选项用于生成 将库的内容与本地文件夹(如以前的备份)进行比较。比较不需要 文件被安排在同一个文件夹中,它在文件中使用元数据,比如create date和 匹配项对的exif uid。比较后的其他文件夹为:

  • 比较 指定根目录下的新文件夹,其中包含以下内容:
  • 丢失的文件 包含指向比较文件夹中在google中找不到的文件的符号链接 照片库。文件夹结构与比较文件夹中的结构相同。这些是 您将通过Web界面上传到Google照片以从备份中还原的文件。
  • 附加文件 -包含指向"照片"文件夹中的文件的符号链接,这些文件出现在库中,但不在 比较文件夹。文件夹结构是与"照片"文件夹相同。
  • 重复项 -包含指向比较文件夹中找到的任何重复文件的符号链接。这是一个扁平的结构 符号链接文件名有一个数字前缀,使其唯一,并将重复项组合在一起。

注意:

  • 比较代码使用外部工具"ffprobe"。没有它它它会跑,但不能 从视频文件中提取元数据,并恢复到依赖于谷歌照片元数据和文件修改日期(这是 一种更不可靠的匹配视频文件的方法,但是如果备份文件夹 最初是使用gphotos sync创建的。
  • 如果您共享了相册,并单击了其他库中项目的"添加到库",则您将有两个 这些项目的副本,它们也将显示为副本。

已知问题

google api的一些突出限制限制了可以实现的功能。所有这些问题都已报告 到谷歌,此项目将在解决后更新。

  • 无法发现库媒体项的修改日期。当前,gphotos sync将刷新本地 复制自上次扫描后添加的任何新照片,但不会更新在谷歌中修改过的任何照片 照片。已向谷歌提交功能请求,请参见https://issuetracker.google.com/issues/122737849" rel="nofollow">https://issuetracker.google.com/issues/122737849
  • 某些类型的视频不会使用新的api下载。这主要限于旧格式的视频文件(在 我的图书馆是2010年之前拍摄的视频的一个子集。谷歌正在研究这个问题参见 https://issuetracker.google.com/issues/116842164
  • API从图像中提取GPS数据请参见https://issuetracker.google.com/issues/80379228" rel="nofollow">https://issuetracker.google.com/issues/80379228
  • 视频下载即使要求原始文件(=vd参数),也会对视频进行转码,请参见 https://issuetracker.google.com/issues/80149160 。我的经验是结果看起来和原来的很相似 但压缩更明显。它是一个较小的文件,大约有60%的比特率(相同的分辨率)。
  • 不支持连拍。你只会看到一个爆炸的第一个文件。见 https://issuetracker.google.com/issues/124656564
  • pipenv有一个硬python版本要求,请参见etc/python3.6.rst 解决方法

安装并配置

要从pypi安装最新发布的版本,只需:

pipenv install gphotos-sync

或者如果您不想使用pipenv,请创建一个虚拟环境并:

pip install gphotos-sync

(如果您不熟悉virtual environments,请参见 https://packaging.python.org/guides/installing-using-pip-and-virtual-environments/

要使用源代码,请克隆git存储库并使用pipenv创建虚拟环境并运行 代码。(如果您没有pipenv,那么我建议您获取它-但是您可以手动创建一个virtualenv并使用 "python setup.py install"代替)

git clone https://github.com/gilesknap/gphotos-sync.git
cd gphotos-sync
pipenv install .
pipenv run gphotos-sync

为了工作,gphotos sync首先需要一个链接到项目的有效客户机id 授权使用"照片库API"。发行版中没有提供。每个客户端ID 提供(大量)有限数量的免费api调用给google服务。如果此分发共享客户端ID, 所有用户都将共享此资源限制。这有点烦躁,但只需要做一次。

为此:

  • 在google developer console上创建项目,遵循创建项目过程
  • 授权它使用"照片库API",遵循激活和停用API过程
  • 按照 设置OAuth 2.0过程 并将应用程序类型设置为 其他
  • 创建客户机ID后,将其下载为 client_secret.json 并将其保存在应用程序下 配置目录:
    • ~/library/application 在Mac OS X下支持/gphotos sync/
    • ~/.config/gphotos sync/ 在Linux下,
    • c:\用户\<;用户名>;\appdata\local\gphotos sync\gphotos sync\ 在Windows下。

还要注意,对于Windows,您需要为gphoto同步的帐户启用符号链接权限 会跑下去的。请参见在Windows上启用符号链接。

如何使用

配置好脚本后,就可以使用下面的简单命令行来使用它了:

cd <installed directory>
pipenv run gphotos-sync TARGET_DIRECTORY

或者,如果您使用virtualenv和pip而不是pipenv,请激活virtualenv并:

gphotos-sync TARGET_DIRECTORY

第一次,它会给您一个指向授权页的链接,以便授权客户端访问 谷歌照片。

有关其他命令行参数的说明,请键入:

gphotos-sync --help

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Hibernate:合并并删除,而不是从数据库中删除实体对象   java如何在WebFilter中有条件地从Mono返回?   java调用mysql c3p0函数   可执行jar Java jar文件加载错误:无法找到或加载主类。类导致的错误:java。lang.ClassNotFoundException:某些东西。班   java如何减少/更改爬网后的延迟?   从其他语言(如Java、PHP、Perl、Python等)调用C/C++代码的最佳方式是什么?   java如何模拟影响对象的void返回方法   当我试图在ubuntu上启动JavaScala时,它抛出了一个异常   java如何正确输出游戏   理解java和C++背景下的JavaScript原型   oracle如何将Java函数转换为postgresql函数   多线程为什么我的java服务器程序在超时后不退出?   java如何使listView中的按钮在单击时工作?   试图将这个嵌套的java forloop转换为python,但我不知道如何转换。有没有一种方法可以像这样为循环执行if语句?   java幂函数在计算器中的应用   如何在java中滚动浏览mysql数据库   在Spring Boot应用程序的JUnit测试中,java没有符合自动连线JPA存储库要求的bean   java如何使用扩展类的JPanel对象?