【问题标题】:Access publicly shared OneDrive folder via API通过 API 访问公开共享的 OneDrive 文件夹
【发布时间】:2016-11-06 20:19:59
【问题描述】:

我有一个公开共享的 OneDrive 文件夹,其中包含一些不同的子文件夹和文件。 IE。我通过一个链接分享了它,所以知道这个链接的任何人都可以访问它们。

有没有一种方法可以通过某种 REST API 从客户端 JavaScript 或某些服务器端代码访问这些文件?无需使用任何类型的用户特定凭据?


我一直在尝试的事情

我一直在查看Accessing Shared Content 页面,它看起来像我想要的,但不知道如何使用它。

我从共享 URL 中获取了一个看起来像 id 的东西,它看起来是一个长的十六进制数字(它似乎是一个指向我的 id?)、一个 !,然后是一个数字(我假设与共享资源有关)。

然后我尝试将其粘贴在此 URL 中:

https://api.onedrive.com/v1.0/shares/<id>/root?expand=children

但是我收到了 400 Bad Request,所以有些地方不太对劲……

我在想可能缺少某种身份验证,但由于共享文件是公开的,我不需要用户使用他们的凭据登录,当然也不能在代码中使用我自己的。

我试过register an app,在那里我得到了一个应用程序ID(guid)并且可以生成密码和密钥对。希望也许我可以使用它,但在 API 中看不到如何以及在何处实际使用它们...


目标

共享文件夹包含合唱团的乐谱,我负责保持更新(OneDrive 同步在这里非常方便)。

有些成员不是很精通计算机,所以我想让查看和下载这些文件尽可能简单。带有“去这里到这个 other 奇怪的网站并在那里找到文件”的共享链接 - 文本类型的作品,但我更愿意直接在会员专区列出文件我们的网站。基本上就是“这里有文件,点击下载”。

【问题讨论】:

  • 我在关于 JSON 的问题中看不到任何内容;有标签存在的原因吗?
  • @MikeMcCaughan 主要是其余的 api 似乎返回 JSON。我把它放在最后,但由于某种原因,StackOverflow 已将标签从最不相关到最相关:P
  • 所以,有些人(比如我)关注JSON标签,询问有关格式、如何解析等问题。由于这个问题与格式无关,如何解析等,最好不要包含标签。标签旨在对问题进行分类,而不仅仅是与其相关的技术列表。

标签: json rest onedrive


【解决方案1】:

是的,您可以使用 REST API 访问文件夹的内容。

API 就是你提到的那个,shares API。但是,听起来您可能使用了错误的 ID。

最直接的方法是按照encode the actual sharing URL into a token 的说明进行操作。这样您就可以创建共享链接的 base64 编码版本,并附加一个“u!”到该字符串的前面,然后进行您已经提到的确切调用。您将返回共享文件夹中的文件列表,然后您可以从那里开始。

这是一个例子: 这是 OneDrive 中包含一些照片的文件夹的共享链接。

https://1drv.ms/f/s!AtuAM_NacwVahiFpuMGS_BiQCwWu

要将此 URL 转换为 API,您首先要对 URL 进行 base64 编码并附加 u!

u!aHR0cHM6Ly8xZHJ2Lm1zL2YvcyFBdHVBTV9OYWN3VmFoaUZwdU1HU19CaVFDd1d1

现在您可以将此 URL 用作共享令牌,并展开子项和缩略图:

https://api.onedrive.com/v1.0/shares/u!aHR0cHM6Ly8xZHJ2Lm1zL2YvcyFBdHVBTV9OYWN3VmFoaUZwdU1HU19CaVFDd1d1/root?expand=children

单击此底部链接应为您提供 JSON 响应,其中包括共享文件夹和文件夹内的子文件夹。

【讨论】:

  • 嗯,这就是我试图做的......你会碰巧有一个这样的例子吗?
  • 我在答案中添加了一个示例。
  • 对于 base64 编码,您需要确保它的 URL 安全 - 请参阅 en.wikipedia.org/wiki/Base64#URL_applications(特别是关于将 + 替换为 - 和 / 替换为 _ 的部分)
  • 嗨瑞恩,它对我很有用!!!这正是我正在寻找的。有了这个,我就可以使用我在其中的所有文件的下载 URL 访问 JSON。重要的是要记住按照您的解释设置此结构:api.onedrive.com/v1.0/shares/u![HERE您已将 BASE 64 URL 转换]/root?expand=children
  • 你会想要在前面加上你!因为它位于 base64 编码 URL 的开头(答案是附加)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-31
  • 2011-03-06
  • 2020-01-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多