iPhoneのショートカットからNotionのAPIをコールしてみた。そして見つけたクソ仕様。
やりたかったこと
iphoneのショートカットからNotionのAPIをコールしてメモ用のデータベースにメモをためていく。
できたもの
ショートカットを起動するとテキストが要求されて・・・
メモを入力して完了を押すとNotionに送信。
1行目がタイトル、2行目以降が本文に書き込まれる。
ロジック
とりあえずPythonで組んでから、ショートカットに書き起こすことにした。
import requests
import json
# 定数を定義
TOKEN = "secret_XXXXXXXXXXXXXXXXXXXXXXXX"
AUTHORIZATION = "Bearer " + TOKEN
DATABASE_ID = "YYYYYYYYYYYYYYYYYYYYYYYYY"
NOTION_VERSION = "2022-06-28"
URL = "https://api.notion.com/v1/pages"
# テキストを取得
input_text = """ここがタイトル
改行するとここから本文
テキスト
ああああ"""
# text_list = input_text.split("\r\n")
text_list = input_text.split("\n")
title_text = text_list[0]
body_text = "\n".join(text_list[1:])
print(title_text)
print(body_text)
# APIをコール
url = URL
header = {
'Authorization': AUTHORIZATION,
'Content-Type': 'application/json',
'Notion-Version': NOTION_VERSION,
}
data = json.dumps({
"parent": { "database_id": DATABASE_ID },
"properties": {
"Title": {
"id": "title",
"type": "title",
"title": [
{
"type": "text",
"text": {
"content": title_text,
},
},
]
}
},
"children": [
{
"paragraph": {
"rich_text": [
{
"text": {
"content": body_text
}
}
]
}
},
]
})
response = requests.post(url, headers=header, data=data)
print(response.text)
実装
クソ仕様
リクエストのbody(data)の深い階層に変数を設定すると、それまで入力していた階層情報が消える
※実際の処理では残っているので動作はする
上の画像の本文を要求の値の部分は、pythonでいうところの以下のデータ構造になるようにポチポチと入力していたのですが、変数を設定するとそれまで入力していた情報が消えます。
= 変数を削除するとkey : valueの入力に戻ってしまう
data = json.dumps({
"parent": { "database_id": DATABASE_ID },
"properties": {
"Title": {
"id": "title",
"type": "title",
"title": [
{
"type": "text",
"text": {
"content": title_text,
},
},
]
}
},
"children": [
{
"paragraph": {
"rich_text": [
{
"text": {
"content": input_text
}
}
]
}
},
]
})
クソクソクソクソーーーーーーーー
ダウンロードはこちらからどうぞ
https://www.icloud.com/shortcuts/793a55f17a274612b9b9dfc9e9842cc8
※作成したデータベースのタイトル列を「Title」にしないと動かないかもしれません。
※自身のtokenとdatabase_idに書き換えてください。
参考文献
APIの初期設定など
POSTするデータは公式ドキュメント
それでは、さようなら。
クソクソクソクソーーーーーーーー
この記事が気に入ったらサポートをしてみませんか?