見出し画像

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 #毎日投稿

この記事が気に入ったらサポートをしてみませんか?