NotionのDBにページを自動作成するスクリプトをGitHub Actionsで組んでいましたが、使わなくなったのでここに供養します。
今回供養するスクリプトの概要としては、「毎日、日報を書くページを作る」ようなスクリプトです。
スクリプトの大まかな流れとしては、
- 指定したDBのIDに対してページを作成する
- 作成するページのタイトルを担当者名にし、日付にスクリプトが実行された日を入れる
というシンプルな流れです。
require 'active_support/all' require_relative './notion_client.rb' class Health DATEBASE_ID = ENV['DB_ID'] def daily current = Time.now.in_time_zone('Asia/Tokyo').to_date create '太郎', current create '次郎' current end private def create(name, date) cli.create_page(DATEBASE_ID, { Name: { title: [ { text: { content: name } } ] }, "日付": { date: { start: date } } }) end def cli @cli ||= NotionClient.new(ENV['NOTION_API_KEY']) end end
読み込んでいるnotion_client.rb
は、自作の薄いラッパーですが、以下のようなものです。
require 'uri' require 'json' require 'faraday' # FYI: https://developers.notion.com/reference class NotionClient BASE_URL = 'https://api.notion.com/' CLIENT_VERSION = '2021-05-13' def initialize(api_key) @api_key = api_key end def create_page(database_id, properties = {}) body = { parent: { database_id: database_id }, properties: properties } Faraday.post( File.join(BASE_URL, 'v1/pages'), JSON.dump(body), request_headers, ) end def list_pages(database_id, filter: {}, sort: {}) body = {} body[:filter] = filter unless filter.empty? body[:sort] = sort unless sort.empty? Faraday.post( File.join(BASE_URL, 'v1/databases', database_id, 'query'), JSON.dump(body), request_headers, ) end private def request_headers { "Content-Type": "application/json", "Notion-Version": CLIENT_VERSION, "Authorization": "Bearer #{@api_key}" } end end
これを書いた当初は、まだAPIの一般公開もされておらず、Gemなどもなかったので軽いラッパーみたいなスクリプトを書いていました。
今から新規にAPI叩くのであれば、Gemを使った方がいいかなと思っています。