谷歌照片和相册备份工具

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第三方库


热门话题
serversocket Java服务器socket中断如何   java通过随机类和排序为数组生成数据   @Column length大于255个字符的java实体   java在使用NIO2 API时消除检查异常   java使用用户凭据通过Microsoft Graph API上的控制台应用程序发送电子邮件   java将2个ArrayList一个接一个地显示到jTextArea中,根据输入的数据多次显示   java无法使用导入的库。安卓工作室。谷歌云端点jar   spring boot Neo4j Apoc在java中获取结果摘要时的情况   转义特殊字符javajson   无法在java中使用OpenCV读取图像,涉及unicode路径   swing Document Listener java“无法实例化DocumentListener类型”   java Piglatin,难以理解如何移动“.”一串   java映射请求基于一个可观察对象中的每个元素,使用改进?   java在可扩展字符串中搜索时,如何忽略字符的大小写?   在包中分组类的java约定   python为Java应用程序创建Ubuntu指示小程序   java Camunda:如何通过processInstanceId获取所有已完成的任务