Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Access publicly shared OneDrive folder via API

I have a publicly shared OneDrive folder with some various sub-folders and files. I.e. I have shared it via a link, so anyone with this link can access them.

Is there a way I can access these files from either client-side JavaScript or some server-side code via a REST API of some sort? Without having to use any sort of user-specific credentials?


What I've been trying

I've been looking at the Accessing Shared Content page, and it looks like what I want, but can't figure out how to use it.

I've taken something that looks like an id from the shared URL, which looks to be a long hexadecimal number (which seems to be an id pointing at me?), an !, and then a number (which I assume has to do with the shared resource).

I've then tried to stick it in this URL:

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

But I get back a 400 Bad Request, so something isn't quite right...

I'm thinking maybe some sort of authentication is missing, but since the shared files are public, I don't users to have to login with their credentials, and can't of course use my own in code.

I've tried to register an app, where I get an application id (guid) and can generate Passwords and Key-Pairs. Was hoping maybe I could use that, but don't see in the API how and where to actually use those...


Goal

The shared folder contains sheet music for a choir, that I'm responsible for keeping updated (and OneDrive syncing is super handy here).

Some members aren't very computer savvy, so I'd like to make seeing and downloading these files as easy as possible. The shared link with a "go here to this other strange site and find the files there"-text sort of works, but I would much rather like to list the files directly in a member-only area of our website. Basically just "here are the files, click on one to download it".

like image 658
Svish Avatar asked Nov 06 '16 20:11

Svish


People also ask

How do I access my OneDrive public folder?

Sign in to OneDrive.com with your personal Microsoft account. In the left pane, under OneDrive, select Shared. Files or folders shared with you appear under the names of the people who shared them. Select a file or folder to open it, just as you would any other item in OneDrive.

Is there an API for OneDrive?

The OneDrive REST API is a portion of the Microsoft Graph API which allows your app to connect to content stored in OneDrive and SharePoint.

Can anyone access OneDrive folder if I share?

If you want anyone who receives the sharing link to be able to access the content, select Anyone with the link option in Link settings. The recipients won't need a Microsoft account and can access the content without having to enter a passcode or sign in.


1 Answers

Yes, you can use the REST API to access the contents of a folder.

The API is the one you mentioned, the shares API. However, it sounds like you are perhaps using the wrong ID.

The most straightforward way to do this is to follow the instructions to encode the actual sharing URL into a token. This way you create a base64 encoded version of the sharing link, append a "u!" to the front of that string, and then make the exact call you already mentioned. You'll get back a list of the files in the shared folder and you can go from there.

Here's an example of this: Here's a sharing link to a folder in OneDrive with some photos in it.

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

To convert this URL into the API, you first base64 encode the URL and append u!

u!aHR0cHM6Ly8xZHJ2Lm1zL2YvcyFBdHVBTV9OYWN3VmFoaUZwdU1HU19CaVFDd1d1

Now you can use this URL as the sharing token, and expand children and thumbnails:

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

Clicking on this bottom link should give you the JSON response, which includes the shared folder and the children inside the folder.

like image 137
Ryan Gregg Avatar answered Oct 11 '22 16:10

Ryan Gregg