Quantcast
Channel: All Power Query posts
Viewing all articles
Browse latest Browse all 122259

Re: Connecting to data source hosted on Dropbox

$
0
0

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 GetFile

  

The "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&"""}"],

Viewing all articles
Browse latest Browse all 122259

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>