見出し画像

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"]){
  //処理
};

さて、何作ろう。。。
それとも次は書き込むほうを確認するべきだろうか

いいなと思ったら応援しよう!