通过API访问公开共享的OneDrive文件夹

6
我有一个公开共享的OneDrive文件夹,其中包含一些不同的子文件夹和文件。也就是说,我通过链接共享了它,因此拥有该链接的任何人都可以访问这些文件。
是否有一种方法可以通过客户端JavaScript或某种REST API的服务器端代码访问这些文件?而不必使用任何特定于用户的凭据?

我一直在尝试什么

我一直在查看访问共享内容页面,它看起来就是我想要的,但我不知道如何使用它。

我从共享URL中提取了一个看起来像ID的东西,它看起来是一个长的十六进制数字(似乎是指向我的ID?),后面跟着一个感叹号和一个数字(我认为与共享资源有关)。

然后我尝试将其插入到此URL中:

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

但是我收到了一个400错误的请求,所以有些地方不太对劲...
我想也许缺少某种身份验证,但由于共享文件是公开的,我不希望用户必须使用自己的凭据登录,当然也不能在代码中使用我的凭据。
我尝试注册应用程序,获得应用程序ID(GUID)并生成密码和密钥对。希望我可以使用它,但不知道如何在API中实际使用它们...

目标

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

一些成员对计算机不是很熟练,因此我希望尽可能简化查看和下载这些文件的过程。共享链接加上“去这个其他奇怪的网站找到文件”这样的文本有点用,但我更想在我们网站的会员专区直接列出文件。基本上就是“这里是文件,点击其中一个即可下载”。


在问题中,我没有看到任何关于JSON的内容;是否有特殊原因需要添加这个标签? - Heretic Monkey
@MikeMcCaughan 主要是因为 REST API 似乎返回 JSON。我把它放在最后了,但由于某种原因,StackOverflow 将标签按从最不相关到最相关的顺序排序 :P - Svish
1
因此,一些人(比如我)会遵循JSON标签来提问有关格式、解析等方面的问题。由于这个问题与格式或解析无关,最好不要包括该标签。标签的目的是为了对问题进行分类,而不仅仅是列出与其有关联但不直接相关的技术。 - Heretic Monkey
1个回答

11

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

您所提到的API就是shares API。但是,看起来您可能在使用错误的ID。

最简单的方法是按照说明将实际的共享URL编码为令牌。这样,您可以创建共享链接的base64编码版本,在该字符串的前面追加“u!”,然后进行您已经提到的确切调用。您将收到共享文件夹中文件的列表,然后可以从那里开始。

以下是一个示例:

这是OneDrive中带有一些照片的文件夹的共享链接。

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

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

u!aHR0cHM6Ly8xZHJ2Lm1zL2YvcyFBdHVBTV9OYWN3VmFoaUZwdU1HU19CaVFDd1d1

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

点击此链接 可以获取JSON响应,其中包括共享文件夹和文件夹内的子文件。

嗯,那就是我试图做的...你有这方面的一个可行的例子吗? - Svish
2
我在我的回答中添加了一个例子。 - Ryan Gregg
对于base64编码,您需要确保它是URL安全的-请参见https://en.wikipedia.org/wiki/Base64#URL_applications(特别是有关将+替换为-和/替换为_的部分) - Brad
1
嗨,Ryan,这对我非常有用!!! 这正是我要找的东西。 有了这个,我就可以访问其中所有文件的下载URL的JSON。重要的是要记住按照您所解释的结构进行设置:https://api.onedrive.com/v1.0/shares/u![在此处放置BASE 64 URL CONVERTED]/root?expand = children - Junior Grão
你需要在base64编码的URL开头添加u!,而不是追加(答案中说追加)。 - brettv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接