
[GAS] NotionAPIã䜿ã£ãŠãæ¥å ±ããŒãžãæ°èŠäœæãã
ã¯ããã«
ååãNotionAPI ã䜿çšããããã®æºåã«ã€ããŠãŸãšããŸããã
ä»åã¯ãGASã§Notionã«æ¥å ±ããŒãžãæ°èŠã§äœæããããšããåŠçã«ã€ããŠãŸãšããŸãã
åŠçæŠèŠ
Googleã¹ãã¬ããã·ãŒãã®ã¡ãã¥ãŒã远å ããã¡ãã¥ãŒããéžæãããããNotionã®æå®æ¥ã®ããŒãžãäœæããåŠçãå®è¡ããŸãã

äœæããããŒãžã«ã¯ãäžèšã®ããããã£ãæ¬æãèšå®ããŸãã
ããããã£
ã¢ã€ã³ã³ãæå®ïŒä»åã¯ããwriting handããæå®ïŒ
ã¿ã€ãã«ïŒãã®æ¥ã®æ¥ä»ïŒäŸïŒ2022/02/18ïŒ
ClientïŒSelectã¿ã€ãã§ç¹å®ã®ååãæå®
æ¬æ
èŠåºã1ïŒHeading1ïŒã«ãèŠåºãæååãèšå®ïŒä»åã¯ããäœæ¥äžèЧããšèšå®ïŒ
ç®æ¡æžããªã¹ãïŒbulleted listïŒã2è¡ããè¡ãèšå®

ããŒãžã®æ§æ
Notion APIã®å ¬åŒããã¥ã¡ã³ããããããŒãžã³ã³ãã³ãã®æäœã«ã€ããŠèšè¿°ãããŠããããŒãžã確èªããŸãã
Notionã®ããŒãžã¯ãäžèšã®2ã€ã®èŠçŽ ããæ§æãããŠããŸãã
Page properties
Page content

Page propertiesã¯ãããŒãžäžéšã«é 眮ãããããŒã¿ããŒã¹å ã®ããŒãžã«å ±éããæ å ±ã§ãã
Page contentã¯ãããŒãžããšã«èªç±ã«èšè¿°ãããæ å ±ã§ãã
å®è£
å®è£ æã«å¿ èŠã«ãªãã®ã¯ãäžèš2ã€ã«ãªããŸãã
Internal Integration Token
ããŒãžã远å ããDBã®ID
å šäœã®åŠçã¯ãäžèšã§ãã
const NOTION_DB_ID = 'xxxxxxxxxxxxxxxxxx';
/**
* Notion 仿¥ã®æ¥å ±ããŒãžãäœæãã
*/
function createDairyPageToNotion() {
const today = new Date();
const pageObj = createDairyPage_(today);
const props = PropertiesService.getScriptProperties();
const token = props.getProperty('NOTION_TOKEN');
const notionApiManager = new NotionApiManager(token);
const response = notionApiManager.createPage(obj);
const json = response.getContentText();
const data = JSON.parse(json);
console.log(data);
}
/**
* æ¥å ±çšããŒãžãªããžã§ã¯ããäœæãã
* @param {Date} today - äœæãã Date ãªããžã§ã¯ã
* @param {string} format - æ¯èŒãããã©ãŒããã
* @return {object}} äœæããããŒãžãªããžã§ã¯ã
*/
function createDairyPage_(today) {
const obj = {
"parent": {
"database_id": NOTION_DB_ID
},
"icon": {
"type": 'emoji',
"emoji": 'âïž'
},
"properties": {
"Name": {
"title": [
{
"text": {
"content": Utilities.formatDate(today, "JST", "yyyy/MM/dd")
}
}
]
},
"Date": {
"type": "date",
"date": {
"start": Utilities.formatDate(today, "JST", "yyyy-MM-dd"),
"end": null
}
},
"Client": {
"select": {
"name": "xxx"
}
}
},
"children": [
// h1ã¿ã°ã®ãããã¯
{
"type": "heading_1",
"heading_1": {
"rich_text": [
{
"type": "text",
"text": {
"content": "äœæ¥äžèЧ"
}
}
]
}
},
// Listã®ãããã¯
{
"type": "bulleted_list_item",
"bulleted_list_item": {
"rich_text": [{
"type": "text",
"text": {
"content": " ",
"link": null
}
}],
}
},
// Listã®ãããã¯
{
"type": "bulleted_list_item",
"bulleted_list_item": {
"rich_text": [{
"type": "text",
"text": {
"content": " ",
"link": null
}
}],
}
}
]
};
return obj;
}â äœæããããŒãžã®ãªããžã§ã¯ããçæ
createDairyPage_颿°ã§ãäœæããããŒãžãªããžã§ã¯ããäœæããŠããŸããããŒãžãªããžã§ã¯ãã®è©³çްã¯ãäžèšããåç §ãã ããã
âparentâããããã£ã§ãããŒãžãäœæãããDBã®IDãæå®ããŸãã
âiconâããããã£ã§ãããŒãžã«è¡šç€ºããã¢ã€ã³ã³ãæå®ããŸãã
âpropertiesâããããã£ã§ã¯ãããŒãžäžéšã«é
眮ããããããã£ãæå®ããããšãã§ããŸãã
ä»åã¯ãNameãDateãClientã®3ã€ã®properitesãããããæå®ããŠããŸãã
次ã«ãâchildrenâããããã£å
ã§ãããŒãžæ¬æã®ããããã£ãèšå®ããŠãããŸãã
ä»åã¯ãèŠåºã1ãç®æ¡æžããªã¹ãïŒHeading1ãbulleted listïŒã2ã€äœæãããããé
åã§ãªããžã§ã¯ããå®çŸ©ããŸãã
ããããã£ãªããžã§ã¯ãã®èšå®ã¯ãäžèšã«è©³çŽ°èª¬æããããŸãã
â¡NotionAPIçšã®ã¯ã©ã¹ãæºå
NotionAPIãåŒã³åºãåŠçã¯ãäžèšã®ããã«å®è£ ããŠããŸãã
const notionApiManager = new NotionApiManager(token);
const response = notionApiManager.createPage(obj);NotionAPIçšã®ã¯ã©ã¹ãäœæããŸãããã¯ã©ã¹ã¯äžèšã®ããã«å®è£ ããŠããŸãã
class NotionApiManager{
/**
* Notion APIã«é¢ããã³ã³ã¹ãã©ã¯ã¿
* @constructor
*/
constructor(token){
this._token = token;
this._notionVersion = this._getNotionAPIVersion();
}
/**
* ããŒãžãäœæããã¡ãœãã
* @param {object} payload - ããŒãžãªããžã§ã¯ã
* @return {HTTPResponse} fetchã®response
*/
createPage(payload){
const endpoint = this._getEndpointPage();
const options = this._postOption(payload);
const response = UrlFetchApp.fetch(endpoint, options);
return response;
}
/**
* NotionAPI ã®VersionãååŸãããµãã¡ãœãã
* @param {string} guestId - ã¢ããªã®åå
* @return {string} version - NotionAPIã®ããŒãžã§ã³
*/
_getNotionAPIVersion(){
const url = "https://developers.notion.com/reference/versioning"
const reg = /"default".*?<\/script>/g;
const htmldata = UrlFetchApp.fetch(url).getContentText("utf-8");
const version = htmldata.match(reg)[0].match(/([0-9]{4}-[0-9]{2}-[0-9]{2})/g)[0];
return version;
}
/**
* ããŒãžçšãšã³ããã€ã³ããååŸãããµãã¡ãœãã
* @return {string} endpoint - ãšã³ããã€ã³ã
*/
_getEndpointPage() {
return 'https://api.notion.com/v1/pages/'
}
/**
* POSTããæã®ãªãã·ã§ã³ãäœæãããµãã¡ãœãã
* @param {Object} payload - payload
* @return {Object} option - option
*/
_postOption(payload) {
const options = {
method: 'post',
headers: {
'Content-Type': 'application/json',
'Notion-Version': this._notionVersion,
'Authorization': "Bearer " + this._token
},
payload: JSON.stringify(payload)
};
return options;
}
}ã¯ã©ã¹ã®å®è£ ã«ã€ããŠã説æããŸãã
ã³ã³ã¹ãã©ã¯ã¿ã®åŠç
ä»®åŒæ°ã§æž¡ãããtokenãä¿æããŠããŸãã
ãŸãã_getNotionAPIVersion颿°ã§ãNotionAPIã®ããŒãžã§ã³ãååŸããŠããŸãã
NotionAPIã®ã³ãŒã«ããéãããŒãžã§ã³ãæå®ããå¿ èŠããããŸãã
仿¥çŸåšã®ææ°ã¯ãã2022-02-22ãã§ãã
äžèšã®ãµã€ãã«ãŠãèªåã§ååŸããæ¹æ³ã玹ä»ãããŠããŸããã®ã§ãåèã«ãããŠããã ããŸãããããããšãããããŸããïŒ
createPageã¡ãœãã
ããŒãžäœæããããã®ãšã³ããã€ã³ãããªãã·ã§ã³ãæå®ããŠãHTTPãªã¯ãšã¹ããå®è¡ããŸãã
ãã¡ããå®è¡ããHTTPãªã¯ãšã¹ãã®çµæããã°åºåãããšãäžèšã®ããã«ãªããŸãã

äœæããããŒãžã®ããŒãžãªããžã§ã¯ããè¿åŽãããŠããŸããããŒãžã®IDãããŒãžã®URLãè¿ã£ãŠããŠããããšã確èªã§ããŸããã
以äžã§å®æã§ãïŒ
ãŸãšã
ä»åã¯ãGASã§NotionAPIã䜿ã£ãŠãæ¥å ±ããŒãžãäœæããå®è£ ã«ã€ããŠãŸãšããŸããã
ãã®ããŒã«ãéçšããŠçŽ1ãæã»ã©äœ¿çšããŠããŸããéäžã§ãããŒãžã§ã³ã¢ãããå ¥ã£ãããšã§ãååãŸã§åäœããŠããåŠçããšã©ãŒãšãªããä¿®æ£ããåæããããŸããã
ã玹ä»ããå®è£
ã§ãšã©ãŒãåºãããšããããããããŸããã®ã§ããã®éã«ã¯Notion APIã®å
¬åŒããã¥ã¢ã«ã®ããŒãžãã確èªãã ããã
è±èªã§èšèŒãããŠã¯ããŸãããéåžžã«èªã¿ãããã§ãã