NotionでのIntegrationの扱いがアップデートで色々変更されており、以前の操作で上手くいかないときに焦るこの頃です。
ブラウザ上でページロックを掛けると、ロックを解除するまで更新が掛けられなくなります。が、このロック指定はNotionAPIには記述がありません。となると気になるわけです。APIからは無視できるのだろうかと。
DataBase更新手続きについてはコードサンプルも見かけるようになったものの、ページへのブロック要素追加、特にGASを用いたケースがあまり見当たらず、ロックへの影響確認ついでに実際にどんな感じでコードを組むのかを試してみました。
UrlFetchAppでのブロック追加
DataBase更新と同じく、ページに対してIntegrationで追加したアプリのコネクトは必須です。
追加したら以下のコードをGASに貼り付けてみます。tokenはIntegraionのトークンで更新しておきます。pageIdはコネクトしたページのURLからIDを指定します。
const pageId = 'XXXXXXXXXXXXXXXXXXXXXXXXXX'
const token = 'secret_XXXXXXXXXXXXXXXXXXXXXXXXX'
function appendBlock() {
let data = {
'children':[
{
"object": "block",
"type": "paragraph",
"paragraph": {
"rich_text": [{ "type": "text", "text": { "content": "Test", "link": { "type": "url", "url": "https://twitter.com/NotionAPI" } } }]
},
}]
}
var result = sendRequest(
Utilities.formatString('https://api.notion.com/v1/blocks/%s/children', pageId), 'PATCH', data)
Logger.log(result)
}
function sendRequest(url, method, data=null) {
let headers = {
'content-type' : 'application/json',
'Authorization': 'Bearer ' + token,
'Notion-Version': '2022-06-28',
'accept': 'application/json'
};
var options ={
'method': method,
'headers': headers,
'payload': JSON.stringify(data),
"muteHttpExceptions" : true,
}
let notion_data = UrlFetchApp.fetch(url, options);
notion_data = JSON.parse(notion_data);
return notion_data;
}
実行する毎に、該当ページにTestというリンクテキストにてTwitterのNotionAPIアカウントへのリンクを差し込むだけの処理です。
LockしたページへのAPIによる更新
ロックを掛けた後に実行してみると、問題なくページに更新がかかります。あくまでも手作業でのフェイルセーフ目的ということでしょう。
ポイントは、公式ヘルプからはAPIを使った時の挙動が読み取れないところです。
あとがき
ロックを掛けた状況でも更新はできるので、基本的にAPIからのみ更新したい場合は常にロックしておくとトラブルは減りそうです。