Forum Discussion
connecting notion database
- 4 years ago
Hi Anonymous ,
the devil lies in the detail here: When I use the GET request from my PQ query in Postman I get the same result than in PQ: Empty email and name.
However, I missed that you were using a POST-request instead. You can convert the PQ GET request to a post request by adding a content parameter to the record like so. I'm using page_size = 100 in the body here:let Source = Json.Document(Web.Contents("https://api.notion.com/v1/databases/4db1bc42bf2b4e1a81b6c7056b41321d/query", [Headers=[Authorization="secret_hc4P70yKhZeK8xbzTsAaLgLeTUYPBmXZ6zDsH09bia5", #"Notion-Version"="2022-02-22"], Content = Json.FromValue([page_size=100])])), results = Source[results], #"Converted to Table" = Table.FromList(results, Splitter.SplitByNothing(), null, null, ExtraValues.Error), #"Expanded Column1" = Table.ExpandRecordColumn(#"Converted to Table", "Column1", {"object", "id", "created_time", "last_edited_time", "created_by", "last_edited_by", "cover", "icon", "parent", "archived", "properties", "url"}, {"object", "id", "created_time", "last_edited_time", "created_by", "last_edited_by", "cover", "icon", "parent", "archived", "properties", "url"}), #"Expanded properties" = Table.ExpandRecordColumn(#"Expanded Column1", "properties", {"Mood", "Email", "Name"}, {"Mood", "Email", "Name"}), #"Expanded Email" = Table.ExpandRecordColumn(#"Expanded properties", "Email", {"id", "type", "email"}, {"id.1", "type", "email.1"}), #"Expanded Name" = Table.ExpandRecordColumn(#"Expanded Email", "Name", {"id", "type", "title"}, {"id.2", "type.1", "title"}) in #"Expanded Name"The reason for the different result is probably that email and name are complex fields, as they are separate database objects themselves.
- 4 years ago
Hi Anonymous ,
sure. This is an example where the next cursor info has to be passed in the body:
let Source = Json.Document( Web.Contents( "https://api.notion.com/v1/databases/4db1bc42bf2b4e1a81b6c7056b41321d/query", [ Headers = [ Authorization = "secret_hc4P70yKhZeK8xbzTsAaLgLeTUYPBmXZ6zDsH09bia5", #"Notion-Version" = "2022-02-22", #"Content-Type" = "application/json" ], Content = Json.FromValue([page_size = 20]) ] ) ), Custom1 = List.Generate( () => [Result = Source, prevHasMore = true], each [prevHasMore] = true, each [ prevHasMore = [Result][has_more], Result = Json.Document( Web.Contents( "https://api.notion.com/v1/databases/4db1bc42bf2b4e1a81b6c7056b41321d/query", [ Headers = [ Authorization = "secret_hc4P70yKhZeK8xbzTsAaLgLeTUYPBmXZ6zDsH09bia5", #"Notion-Version" = "2022-02-22", #"Content-Type" = "application/json" ], Content = Json.FromValue( [page_size = 20, start_cursor = [Result][next_cursor]] ) ] ) ) ] ), #"Converted to Table" = Table.FromList( Custom1, Splitter.SplitByNothing(), null, null, ExtraValues.Error ), #"Expanded Column1" = Table.ExpandRecordColumn( #"Converted to Table", "Column1", {"Result"}, {"Column1.Result"} ), #"Expanded Column1.Result" = Table.ExpandRecordColumn( #"Expanded Column1", "Column1.Result", {"object", "results", "next_cursor", "has_more", "type", "page"}, {"object", "results", "next_cursor", "has_more", "type", "page"} ), #"Expanded results" = Table.ExpandListColumn(#"Expanded Column1.Result", "results") in #"Expanded results"With a page size of 20 and 110 total rows, it runs 6 times to get the total result.
Please note that I've had to add a Content-Type parameter to the header.
If you're wondering about the "prevHasMore"-field, you can read more about it here: How not to miss the last page when paging with Power BI and Power Query (thebiccountant.com)
Hi Anonymous ,
to start, you have to create an integration in Notion: Getting started (notion.com)
This will give you the authentication token.
Make sure to share content with that integration, as that's a prerequisite to receive anything.
All this is described in detail the link above.
Then a basic call for an internal app with simple authentication would look like so:
Web.Contents( "https://api.notion.com/v1/databases/<YourNotionDatabaseID>,
[Headers = [Authorization= "Bearer <YourNotionToken>, #"Notion-Version"= "2022-02-22"]] )
Thanks for your quick reply, ImkeF.
I have actually managed use the basic call as u provided earlier. when opening the 'property' object, I managed to get the following:
However, only the Mood's Value can be expanded to show the items in there. In trying to expand the Email and Name's Value, I didn't manage ti get any content from them. Is there anything that is amissed in Notion or Power Query.
KRgds, -Nik
p.s.
To kindly recap, when I did a POST query in POSTMAN (https://api.notion.com/v1/databases/<NotionDatabaseID>/query), I managed to generate a JSON file with all the values in there.