[テンプレート] アカウンタビリティ・チャート DB

ソースコード

require "net/http"
require "uri"
require "json"
require "date"

MY_NOTION_TOKEN=ENV["TOKEN"]
DATABASE_ID=ENV["DATABASE_ID"]
TZ="+09:00"

def send_notion(title)
  t = DateTime.now
  s = t.strftime("%Y-%m-%d %H:%M:%S") + TZ
  e = (t + Rational(30, 24 * 60)).strftime("%Y-%m-%d %H:%M:%S") + TZ

  uri = URI.parse("<https://api.notion.com/v1/pages>")
  request = Net::HTTP::Post.new(uri)
  request.content_type = "application/json"
  request["Authorization"] = "Bearer #{MY_NOTION_TOKEN}"
  request["Notion-Version"] = "2021-05-13"
  request.body = JSON.dump({
    "parent" => {
      "database_id" => "#{DATABASE_ID}"
    },
    "properties" => {
    # title (プロパティ名)
      "title" => {
        "title" => [
          {
            "text" => {
              "content" => "#{title}"
            }
          }
        ]
      },
      "行動予定日" => {
        "date" => {
          "start" => s,
          "end" => e
        }
      }
    }
  })

  response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
    http.request(request)
  end

  code = response.code
  # print "#{title}\\t#{datetime}...#{code}\\n"
  unless code == "200"
    # エラーの時だけエラーを表示する
    STDERR.print "Error!\\n#{response.body}\\n"
  end
end

send_notion(ARGV[0])