Open1
Notion APIをApps Scriptでゴニョゴニョする
概要
もちろんApps Script専用のSDKなんてないので、UrlFetchAppを使っていく。
APIを呼ぶためのヘルパー関数を作って、それを元に各エンドポイントを呼ぶイメージ。
1. トークンを作る
詳細は割愛。
2. トークンをScript Propertyに保存する
これも詳細は割愛。とりあえず、1で作ったトークンはScript Propertyに保存しておく。
この例では、NOTION_TOKEN
と命名する。
3. APIを呼ぶための関数を書く
雑にこんな感じ。
/**
* 任意のNotion APIエンドポイントを呼ぶための関数
*
* @param {string} endpoint - The API endpoint to call.
* @param {("GET"|"POST"|"PATCH"|"DELETE")} method - The HTTP method to use for the request
* @param {Object} payload - Non-stringified payload to include in the request.
* @returns {GoogleAppsScript.URL_Fetch.HTTPResponse} - The HTTP response object returned from the API call.
*/
const callNotionApi_ = (endpoint, method, payload) => {
const token = PropertiesService.getDocumentProperties().getProperty(`NOTION_TOKEN`), // save your Notion API token in the script property as "NOTION_TOKEN"
baseUrl = "https://api.notion.com/v1/",
notionVersion = "2022-06-28";
try {
const params = {};
Object.assign(params, payload);
for (const [key, value] of Object.entries(params)) {
if (typeof value === "object") {
params[key] = value;
}
}
const url = `${baseUrl}${endpoint}`;
const options = {
method: method,
headers: {
"Content-Type": "application/json",
"Notion-Version": notionVersion,
Authorization: `Bearer ${token}`,
},
payload: JSON.stringify(params),
};
const response = UrlFetchApp.fetch(url, options);
Logger.log(`Notion API (${endpoint}) OK`);
return response;
} catch (error) {
Logger.log(`Notion API ${error}`);
return null;
}
};
これで、callNotionApi_()
を使えば、任意のエンドポイントを呼ぶことができる
使用例
例えば、Notionのページを呼びたいとする。
その場合は、こんな感じでページをページIDで取得するヘルパー関数を用意しておく。
/**
* 任意のpage IDをもとに、ページを呼ぶための関数
*
* @param {string} id - The unique identifier of the page to retrieve.
* @returns {Object} - The page data retrieved from the Notion database.
* @throws {Error} If an error occurs during the request or response parsing, it is logged, and the function returns undefined.
*/
function getNotionPageById_(id) {
const endpoint = `pages/${id}`;
try {
const response = callNotionApi_(endpoint, "GET"); //ここで3で書いた関数を使う
if (!response) {
throw new Error("Empty response received from Notion API");
}
return JSON.parse(response);
} catch (error) {
Logger.log("Failed to retrieve page: " + error);
return null;
}
}
これで、getNotionPageById_()
を使ってページを呼ぶことができる。
使い方は、こんな感じ。
/**
* Page IDを元にページを取得して、そのあとは好きなように調理する
* See https://developers.notion.com/reference/retrieve-a-page
*/
function getPageAndDoSomething() {
const pageId = "some_page_id"
let data = getNotionPageById_(pageId) //data is return as page object as defined here: https://developers.notion.com/reference/page
//do whatever you want with that page data
Logger.log(data.created_by.id) // this would return the user ID of whoever created the page
}
雑に書いたけど、多分コピペで他のエンドポイントにも使えるはず。
Gistもあります