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)
Hi ImkeF, thank you for the code. It works perfectly in Power BI Desktop. Though in the PBI Service I am getting the "Failed to update data source credentials" error.
Do you have any idea how to refresh the data online?
Failed to update data source credentials: Web.Contents failed to get contents from 'https://api.notion.com/v1/databases/4db1bc42bf2b4e1a81b6c7056b41321d/query' (400): Bad RequestHide details
| Activity ID: | c510cc15-88ac-4552-80d9-c73811b2c14c |
| Request ID: | 209bd64e-080e-81b4-9413-e484347b1fda |
| Status code: | 400 |
| Time: | Sat Mar 04 2023 12:54:38 GMT+0100 (Central European Standard Time) |
| Service version: | 13.0.20148.59 |
| Client version: | 2302.3.12445-train |
| Cluster URI: | https://wabi-north-europe-l-primary-redirect.analysis.windows.net/ |