NotionのAPIを触ってみてます。締め切りが今週中の何か... といった情報を抜き出したいときがあるのですが、その辺のメモです。
日付でソート
提出期限などでソートします。
const response = await notion.databases.query({
database_id: dbId,
sorts:[
{
"property": "提出期限",
"direction": "descending"
}
]
});
console.log(response);
エラー: body failed validation. Fix one:\\nbody.sorts[0].direction should be
\"ascending\"or
\"descending\"`
なかなか融通が効かないパターンで
sorts:[
{
"property": "提出期限",
"direction": "descending"
}
]
これはOKですが。以下だとエラーになります。
sorts:[
{
"property": "提出期限",
"direction": "Descending"
}
]
descending
orascending
で全部小文字じゃないとダメみたいです。
日付で検索
こんな感じの指定で、今日(today)から6日後(in6days)の間に提出期限があるものを検索できます。
これをAPIで触るとこんな感じ
filter: {
and: [
{
property: '提出期限',
date: {
on_or_after: today
}
},
{
property: '提出期限',
date: {
on_or_before: in6days
}
}
],
},
dayjsで実装
npm i dayjs
const { Client, APIErrorCode } = require("@notionhq/client")
const dayjs = require('dayjs');
const utc = require('dayjs/plugin/utc');
const timezone = require('dayjs/plugin/timezone');
// dayjsにプラグインを適用
dayjs.extend(utc);
dayjs.extend(timezone);
const dbId = process.env.NOTION_KADAI_DBID;
const getKadaiInfo = async () => {
try {
// 日本のタイムゾーンで現在の日時を取得し、ISO 8601形式に変換
const today = dayjs().tz('Asia/Tokyo').format();
// const tomorrow = dayjs().tz('Asia/Tokyo').add(1, 'day').format();
// const in2days = dayjs().tz('Asia/Tokyo').add(2, 'day').format();
// const in3days = dayjs().tz('Asia/Tokyo').add(3, 'day').format();
// const in4days = dayjs().tz('Asia/Tokyo').add(4, 'day').format();
// const in5days = dayjs().tz('Asia/Tokyo').add(5, 'day').format();
const in6days = dayjs().tz('Asia/Tokyo').add(6, 'day').format();
const notion = new Client({auth: process.env.NOTION_TOKEN});
const response = await notion.databases.query({
database_id: dbId,
sorts:[
{
"property": "提出期限",
"direction": "descending"
}
],
filter: {
and: [
{
property: '提出期限',
date: {
on_or_after: today
}
},
{
property: '提出期限',
date: {
on_or_before: in6days
}
}
],
},
});
console.log(response.results);
} catch (error) {
if (error.code === APIErrorCode.ObjectNotFound) {
//
// For example: handle by asking the user to select a different database
//
} else {
// Other error handling code
console.error(error)
}
}
}
期間内に締め切りが来るデータが取得できました。