GASでnotionAPIを叩いて何かつくるための材料を集めよう
どうも
前回いきなりnotionAPIをGASで叩いてみたtmdです。
データが取れることがわかったので何か作ろうと思います。
…何作ろう。これは具体的に何が取れるかを探ってる記事です。
■前回の記事
前回[console.log(notionData)]と書いて出力された情報
{ object: 'list',
results:
[ { object: 'page',
id: 'hogehogehogehoge',
created_time: '2023-05-02T10:00:00.000Z',
last_edited_time: '2023-05-02T10:00:00.000Z',
created_by: [Object],
last_edited_by: [Object],
cover: null,
icon: null,
parent: [Object],
archived: false,
properties: [Object],
url: 'https://www.notion.so/hogehogehogehoge' } ],
next_cursor: null,
has_more: false,
type: 'page',
page: {} }
今回何か作るために調べたこと
Objectの中身は???
リファレンスに書いてあるんじゃないかと思うのだけれど、[Object]の中身を自分の目で確認したいので、以下をコードに書き足す
for(var i=0;i<notionData["results"].length;i++){
console.log(notionData["results"][i])
}
これはresultsの中に表の行数の分だけ値ができていたため、「変数名[項目名].長さ(要素数)で要素数をだし、行数分for文でループする感じ。
取れたデータを1回でババーンって出すんじゃなくて、1行ずつ出してるだけですな。
それで出たのがこんな感じ
※全種類ではありません。イメージのために書き足したから並び順が同じかわかりません。
{ object: 'page',
id: 'hogehogehogehoge',
created_time: '2023-05-02T10:00:00.000Z',
last_edited_time: '2023-05-02T10:00:00.000Z',
created_by: { object: 'user', id: 'piyopiyouser' },
last_edited_by: { object: 'user', id: 'piyopiyouser' },
cover: null,
icon: null,
parent:
{ type: 'database_id',
database_id: 'データベースのID' },
archived: false,
properties:
{ 'テキストの項目名': { id: '0000', type: 'rich_text', rich_text: [] },
'セレクトの項目名': { id: '0000', type: 'select', select: null },
'タグの項目名': { id: '0000', type: 'multi_select', multi_select: [] },
URLの項目名: { id: '0000', type: 'url', url: null },
'ユーザーの項目名': { id: '0000', type: 'people', people: [] },
'チェックボックスの項目名': { id: '0000', type: 'checkbox', checkbox: false },
'マルチセレクトの項目名': { id: '0000', type: 'multi_select', multi_select: [] },
'ステータスの項目名': { id: '0000', type: 'status', status: [Object] },
'名前': { id: 'title', type: 'title', title: [] } },
url: 'https://www.notion.so/hogehogehogehoge' }
ステータスの中身は?
同じ要領でステータスを調べると、コードはこうなる
notionData["results"][i]["properties"]
そしてObjectの中身はこうなってる。
'ステータスの項目名':
{ id: '0000',
type: 'status',
status:
{ id: 'foobar',
name: 'Not started',
color: 'default' } },
例えばだけど、表の中で進捗が「Not started」かを判定し、該当すれば処理をしたい場合は、こう書けばいいわけか。
if(notionData["results"][i]["properties"]["ステータスの項目名"]["status"]["name"]=="Not started"){
//処理
}
日付の中身は?
同じような感じで日付を見ていこう。
日付に関しては1つの日付に対して以下が含まれるっぽい
日時(開始日)
日時(終了日)
タイムゾーン
これは、notion側で時間、終了日、タイムゾーンの変更ができるからだと思う。
日付だけを呼ぶときは上にかいたforの中でこれを書くイメージ
notionData["results"][i]["properties"]["日付の項目名"]
Objectの中身がこんな感じ。
{ id: '0000',
type: 'date',
date:
{ start: '2023-05-08T00:00:00.000+09:00',
end: '2023-05-17T00:00:00.000+09:00',
time_zone: null } }
日付という項目の中に開始日と終了日がある場合で、終了日と比較したい場合だと、こうなるかしら。
notionData["results"][i]["properties"]["日付の項目名"]["date"]["end"]);
一応終了日がnullの場合がある前提でif文を以下のように入れると安心。
if(notionData["results"][i]["properties"]["日付の項目名"]["date"]){
//処理
};
さて、何作ろう。。。
それとも次は書き込むほうを確認するべきだろうか