Notion APIパブリックベータ版をつかう
Notion APIをさわってみた。 前回、GitHub Acitonsを使って、特定のラベルがついたissueをスプレッドシートに自動でPOSTする処理を書いたので、それをアレンジして投稿先をNotionにしようと思った。
Notion APIのつかいかた
とにかく、かんたんに使い始めることができる。
Getting Startedのページを参照すると、curlをつかった一番シンプルな形のPOSTはすぐにできる。 以下、試しにcurlでいろいろなパラメータをPOSTしたときの手順。
Integrationを登録する
Notionのアカウントは持っている前提。また基本的なページ作成、データベース作成については言及しない。
左メニューのSetting > Integrations > Develop your own Integrations と選択すると、Integrationの新規設定画面が表示される。 必要事項を入力するだけで新規Integrationが登録できる。
登録できたら、一覧画面に表示される。
詳細画面ではTOKENが確認できる。権限設定もここで変更可能。
データベースにIntegrationをひもづける
自分のワークスペースでAPIにひもづけたいデータベースを作成して、左上のShareメニューから先程作成したIntegrationを選択してひもづける。
これで、POSTする準備が整った。
テスト用のコマンドはGetting Startedのページにのってるので、それをそのまま実行してみるとなんなく成功する。
1curl -X POST https://api.notion.com/v1/pages \
2 -H "Authorization: Bearer {MY_NOTION_TOKEN}" \
3 -H "Content-Type: application/json" \
4 -H "Notion-Version: 2021-05-13" \
5 --data '{
6 "parent": { "database_id": "{DATABASE_ID}" },
7 "properties": {
8 "Name": {
9 "title": [
10 {
11 "text": {
12 "content": "Yurts in Big Sur, California"
13 }
14 }
15 ]
16 }
17 }
18 }'
これで最初のテストデータの投稿が完了した。
もう少しいろいろなパラメータをPOSTする
Notionのデータベースでは、いわゆるレコードにあたる各行はそれぞれ独立したページとして存在する。データベースの状態でみたときに、カラムに相当するものは、各ページのpropatyと呼ばれるオブジェクトとして表現されている。
先程登録したパラメータはtitleという特殊なpropatyで、そのままページのタイトルになる部分。このあたりの説明はこちらに詳しい。
今度は、他のpropaty(カラム)にもデータを登録できるようにしたい。Postmanのワークスペースも公開されているので参考にしながらすすめる。
とりあえずNumber、Text、Date、Selectのpropatyに対して投稿できることを確認した。
前回作ったActionsから投稿してみる。
以下がActionsのYAMLファイル。 curlで叩くためにヒアドキュメントにしたけど、これだと変数展開されないので、複雑なJSONをPOSTするならjsで書いたほうが良い。
1name: labels-actions
2 on:
3 issues:
4 types:
5 ['labeled', 'unlabeled']
6
7 jobs:
8 labeled-actions:
9 runs-on: ubuntu-latest
10 if: |
11 (github.event.label.name == '対応中') || (github.event.label.name == '依頼中')
12 name: Recording label's add or remove time
13 steps:
14 - name: Checkout
15 uses: actions/checkout@v2
16 - name: POST Comment
17 env:
18 GITHUB_TOKEN: ${{ secrets.ACCESS_TOKEN }}
19 LABEL_NAME: ${{ github.event.label.name }}
20 TITLE: ${{ github.event.issue.title }}
21 run: |
22 curl -X POST -H "Authorization: token $GITHUB_TOKEN" -d "{\"body\": \"ラベルが付きました\nラベル: $LABEL_NAME\nタイトル: $TITLE\"}" ${{ github.event.issue.comments_url }}
23 data=$(cat <<EOF
24 {
25 "parent": { "database_id": "dfc2cdc260ae476c8f2f5d4065f9a94a" },
26 "properties": {
27 "Name": {
28 "type": "title",
29 "title": [{ "text": { "content": "POST Data" } }]
30 },
31 "Tags": {
32 "type": "rich_text",
33 "rich_text": [{ "text": { "content": "actions" } }]
34 },
35 "Price": {
36 "type": "number",
37 "number": 500
38 },
39 "Date": {
40 "type": "date",
41 "date": { "start": "2021-05-11" }
42 },
43 "Status": {
44 "select": {
45 "name": "complete"
46 }
47 }
48 }
49 }
50 EOF
51 )
52 curl -X POST "https://api.notion.com/v1/pages" \
53 -H "Authorization: Bearer ${{ secrets.MY_NOTION_TOKEN }}" \
54 -H "Content-type: application/json" \
55 -H "Notion-Version: 2021-05-13" \
56 -d "$data"
上記を実行すると、GitHubの該当issue上にもコメントが追加される。