Forum Discussion
Connecting to data source hosted on Dropbox
While researching this topic, I noticed that all the examples given appear to be for the Dropbox v1 API, which has been deprecated and will be turned off in a few months (June 2017):
https://blogs.dropbox.com/developers/2016/06/api-v1-deprecated/
The v2 API looks much more complex - there doesnt appear to be any direct equivalent for the method suggested above (single HTTPS call with an API Key). The authentication requirements now seem more complex:
https://www.dropbox.com/developers/reference/auth-types#user
It's stumped me for now - has anyone got this working?
I agree with mike_honey - cant seem to get it working.
Any tips on connecting into the dropbox files would be great.
- hugoberry9 years agoResponsive Resident
The documentation on their developer site is quite comperhansive https://www.dropbox.com/developers/documentation/http/documentation
As for some boilerplate code to get you going have a look at the snippet below for an example of geting folder listing.
let data = [ path= "/code", recursive=false, include_media_info=false, include_deleted=false, include_has_explicit_shared_members=false], header = [ #"Authorization"="Bearer ZZZZZZZZZZZ", #"Content-Type"= "application/json"], response = Web.Contents("https://api.dropboxapi.com/2/files/list_folder",[Content=Json.FromValue(data),Headers=header]), out = Json.Document(response,1252) in outThe only setup that I had to do on the Dropbox site was to create an App in the developer space and then generate an access key, which by the way is ZZZZZZZZZZ in my snippet.
- gparrello9 years agoRegular Visitor
Thanks to you I am finally able to call data from Dropbox. I built upon your list_folder API call , added a download call after it:
- Actual data table would be:
let header = [ #"Authorization"="Bearer "&token, #"Content-Type"="application/json"], data = [ path="", recursive=true, include_media_info=false, include_deleted=false, include_has_explicit_shared_members=false], response = Web.Contents("https://api.dropboxapi.com/2/files/list_folder",[Content=Json.FromValue(data),Headers=header]), out = Json.Document(response,1252), entries = out[entries], #"Converted to Table" = Table.FromList(entries, Splitter.SplitByNothing(), null, null, ExtraValues.Error), #"Expanded Column1" = Table.ExpandRecordColumn(#"Converted to Table", "Column1", {".tag", "name", "path_lower", "path_display", "id", "client_modified", "server_modified", "rev", "size", "content_hash"}, {".tag", "name", "path_lower", "path_display", "id", "client_modified", "server_modified", "rev", "size", "content_hash"}), #"Filtered Rows" = Table.SelectRows(#"Expanded Column1", each ([#".tag"] = "file")), #"Added Custom" = Table.AddColumn(#"Filtered Rows", "file", each fGetTable([path_display])), #"Removed Columns" = Table.RemoveColumns(#"Added Custom",{".tag", "name", "path_lower", "path_display", "id", "client_modified", "server_modified", "rev", "size", "content_hash"}), #"Expanded data" = Table.ExpandTableColumn(#"Removed Columns", "file", {"COLUMN1 HERE", "COLUMN2 HERE"}, {"COLUMN1 HERE", "COLUMN2 HERE"})
in
#"Expanded data"- keep in mind you have to type your expanded columns manually, user interface expanding does not seem to work with this method...
- "token" (line 2) is a defined parameter with the actual generated access token for the Dropbox application, you could type it between quotes as text right there instead.
- fGetTable function, which is the actual download query (referenced in line 15) would be:
let GetFile=(file) => let header = [ #"Authorization"="Bearer "&token, #"Dropbox-API-Arg"="{"&""""&"path"&""""&":"&""""&file&""""&"}"], out = Web.Contents("https://content.dropboxapi.com/2/files/download",[Headers=header]), excel = Excel.Workbook(out, null, true), table = excel{0}[Data], #"Promoted Headers" = Table.PromoteHeaders(table, [PromoteAllScalars=true]) in #"Promoted Headers" in GetFileThe "Dropbox-API-Arg" was escaping-quotes hell...Edit: double quotes is one escaped quote inside a string... didn't need so much escape and concatenate, just changed that line to:
#"Dropbox-API-Arg"="{""path"":"""&file&"""}"], - masplin9 years agoImpactful Individual
I tried your code and got this error. I just created an app and added the access code where you had zzzzzzz.
DataSource.Error: Web.Contents failed to get contents from 'https://api.dropboxapi.com/2/files/list_folder' (400): Bad Request
Details:
DataSourceKind=Web
DataSourcePath=https://api.dropboxapi.com/2/files/list_folder
Url=https://api.dropboxapi.com/2/files/list_folderAny ideas what this means?
Thnaks
Mike
- hugoberry9 years agoResponsive ResidentI have created a DropBox data connector using the Power Query Extensions SDK. You are welcome to try it or check the code for a possible answer
https://github.com/Hugoberry/PowerQueryConnectors/blob/master/src/DropBox/DropBox.pq