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 ,
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)
Many thanks as always, ImkeF.
You have been humbly helpful many times here & elsewhere too.
Kind regards, -Nik