PowerShell x NotionAPIでページ情報を抽出する
PowerShellからNotionAPIを使ってページ情報を抽出するときのメモです。
1.下のリンク先を参考にNotionAPIキーとDatabaseIDを取得する
2.下のスクリプトのAPIKeyとDatabaseIDを書き換えて実行すればNotionの任意ページの情報が読み取れます。
$NotionAPIKey="<NOTIONAPIキー>"
$DatabaseID="<DatabaseID>"
$APIURL = "https://api.notion.com/v1/databases/"+$DatabaseID+"/query"
$Notionheaders = @{
"Authorization" = "Bearer $($NotionAPIKey)"
"Content-type" = "application/json"
"Notion-Version" = "2022-06-28"
}
$JsonBody = ""
$Return = Invoke-RestMethod -Uri $APIURL -Method POST -Headers $Notionheaders -Body $JsonBody
$Return.results
実行したところが次のスクショ
object : pageから下が取得データ
$return.results.propertiesの中を見に行けば項目ごとの値も見ることができます。
$JsonBody=""の "" の中を書き換えれば、条件で検索ができます。
$JsonBodyの中をどう書くのか
基本の書き方
$JsonBody = @"{
"filter": {
"property":"<検索したい項目名>",
"プロパティ種別":{
"equals":"<検索値>"
}
}
}"@
基本の書き方に沿って検索条件を書けばいいのですが、検索したい項目のプロパティごとに書き方が違い、公式を読んでもいまいち分からなかったので、自分で試しながら理解できた部分をメモ的に書き残しておきます。
プロパティ titleの場合
titleはDBアイテムの名称部分です。最初に一番左側に作られる項目です。
プロパティ種別にtitleと付けます。
"property":"<検索したい項目名>",
"title":{
"equals":"<検索値>"
}
プロパティ textの場合
プロパティ名がテキストなので”text”なのかと思うとひっかかる”rich_text”
"property":"<検索したい項目名>",
"rich_text":{
"equals":"<検索値>"
}
プロパティ numberの場合
NUMBERは数字項目。ダブルクォーテーションがいらない
"property":"<検索したい項目名>",
"number":{
"equals":100
}
"equals"(等しい)以外に
"does_not_equal" 等しくない
"greater_than" より大きい
"greater_than_or_equal_to" 等しいか大きい
"less_than" より小さい
"less_than_or_equal_to" 等しいか小さい
がある
プロパティ selectの場合
選択項目です。値で検索
"property":"<検索したい項目名>",
"select":{
"equals":"aaa"
}
プロパティ multi_selectの場合
複数選択項目です。値で検索
"property":"<検索したい項目名>",
"multi_select":{
"equals":"aaa"
}
プロパティ emailの場合
そのまま値で検索
"property":"<検索したい項目名>",
"email":{
"equals":"aaa@yah00.co.jp"
}
プロパティ タイムスタンプ
DBアイテムの作成時間や更新時間でも検索できます。
この項目は通常は見えません。
"property"の部分を"timestamp"にして検索
"timestamp": "created_time",
"created_time": {
"equals": "2023-12-06"
}
"created_time"(作成日時)の他に
"last_edited_time"(更新日時)
"equals"の他に
"on_or_before" 以降
"on_or_after" 以前
"before""after"がある
AND、OR条件
ANDやORも使えます。
例
$JsonBody = @"
{
"filter": {
"and": [{
"property":"USERID",
"rich_text":{
"equals":"marimo"
}
},
{
"timestamp": "created_time",
"created_time": {
"equals": "2023-12-06"
}
}
}]
,"or": [{
"property":"USERID",
"rich_text":{
"equals":"trump"
}
}
}]
}
Sort条件
抽出データのソートも出来ます
$JsonBody = @"
{
"sorts": [
{
"property": "USERID",
"direction": "ascending" #昇順
},
{
"property": "created_time",
"direction": "descending" #降順
}
]
}
NotionAPIの検索条件はバラバラなので仕様変更があるかもしれません。
#Notion #Notion使い方 #PowerShell #プログラミング学習 #プログラミング入門 #コマンドレット #NotionAPI #毎日投稿