使用虚拟云端硬盘获取 Google 云端硬盘文件链接

A. *_*tia 2 python macos google-drive-api

我正在使用虚拟云端硬盘访问我的 Google 云端硬盘文件。
所以我在 Python 中有我所有 Google Drive 文件的列表(使用os.path.walk),但我想知道是否有可能获得文件在线链接。
我在 Mac OS X 上使用 Finder,通过二次点击,我有一个选项“用 Google Drive 打开”,它可以直接在我的浏览器上打开文件。我想自动对我的所有文件做同样的事情。

lah*_*hma 6

我最近发现了一种更有效的方法来检索位于 Google Drive File Stream 文件系统中的任何给定文件/文件夹的 Drive API“文件 ID”。虽然我在 Windows 系统上发现了这个功能,但在 Mac OS X 上可能也有类似的功能。

我不知道到底是什么机制允许下面描述的功能,但它的功能几乎与 NTFS 备用数据流的工作方式相同。问题是,Drive File Stream 的虚拟驱动器的属性显示它被分区为不支持备用数据流的 FAT32。也许 Google 的文件系统驱动程序只是模拟 NTFS 备用数据流的行为。无论如何,虚拟云端硬盘驱动程序添加了一种机制,用于读取附加到位于其文件系统中的文件/文件夹的特殊元数据。可以通过在任何以冒号为后缀的文件/文件夹路径上调用“ReadFile”来访问此元数据,后跟一个描述要检索的元数据的特殊标识符。这些是标识符 I'

  • user.drive.id - 文件/文件夹的 Drive API“文件 ID”
  • user.drive.team_drive_id - 文件/文件夹的 Drive API“Team Drive ID”(如果不在 Team Drive 中则为空)
  • user.drive.gdoc - 如果文件是“Google Docs”文档,则返回“1”,否则返回“0”
  • user.drive.email - 据我所知,这只是返回 Drive File Stream 登录的 Google 帐户的电子邮件地址(我尝试在另一个 Google 帐户拥有的文件上调用它,但它仍然返回我的电子邮箱)
  • user.drive.itemprotostr - 提供几乎所有附加到文件的元数据,包括几乎所有这些其他标识符的输出
  • user.drive.md5 - 文件的 MD5 校验和
  • com.apple.FinderInfo - 不确定这是否真的是一个有效的标识符(因为它在 Windows 上不起作用),但由于我发现它与其他标识符非常接近,并且它可能与您的平台相关,我想我会提供以防万一
  • user.drive.stableid
  • 用户驱动器固定
  • 用户驱动器未提交
  • 用户驱动进度
  • 用户驱动印象
  • user.drive.is_virtual_folder
  • 用户驱动器缩略图

视窗

在 Windows 上,从命令行读取此元数据的一种简单方法是使用“type”命令。以下示例将为您提供位于 Google Drive 根目录中的文件“test.txt”的 Drive API 文件 ID:

type "G:\My Drive\test.txt:user.drive.id"
Run Code Online (Sandbox Code Playgroud)

注意:如果您在创建新文件/文件夹并随后快速读取“user.drive.id”的某种类型的脚本中使用它,请注意生成“真实”文件 ID 可能需要几秒钟的时间. 如果您读取 'user.drive.id' 的值并且它以 'local' 开头,这意味着它还没有生成实际的文件 ID。在我看来,解决这个问题的最好方法是创建一个异步循环,在检查之间休眠,然后在不再以“local”开头时返回文件 ID。

我个人不使用 Mac,所以我绝对不是最有资格就 Mac 的使用提供建议的人。话虽如此,我确实对 Linux 有一些经验,而且我相信 OS X 使用了很多相同的命令,因为它是基于 Unix 的。如果 Windows 功能与 OS X 直接相关(我完全不确定),我相信以下命令应该可以实现与上面提供的 Windows 命令相同的功能:

cat "/Volumes/GoogleDrive/My Drive/test.txt:user.drive.id"
Run Code Online (Sandbox Code Playgroud)

我希望这些信息对您或其他可能遇到此问题的人有用。我知道这对我的 Python 应用程序非常有价值,因为它允许我使用虚拟云端硬盘已经缓存的数据,而不必为每个单独的文件(在我的情况下是成千上万个)进行单独的 API 调用。祝你的项目好运!

  • 对于 Windows 来说这是一个很好的答案。在 macOS 上,您将执行以下操作: xattr -p user.drive.id "/Volumes/GoogleDrive/My Drive/test.txt" (3认同)