Notion(非公開)APIで画像をアップロードする
まだここらへんのAPIが一般公開されていないので、従来型の勝手に非公開APIを叩くやつで上げるしかない。が、手順がまとまっていなかったのでまとめる。
notion-py
この記事ではさらにそのフォークを使用している
後述するupload_file_binのパッチをあてている
code:sh
pip3 install git+git://github.com/neneka/notion-py.git
ページの取得
code:py
from notion.client import NotionClient
def main():
# 調べて
client = NotionClient(token_v2="your tokenv2")
# 今回はコレクションの列に対するアップロードなのでコレクションになっているページを想定
print(page.title)
main()
アップロード操作
画像のアップロードではnotion.block.ImageBlockを使用する。ファイルを上げたければnotion.block.FileBlock。
code:py
from notion.block import ImageBlock
row = page.collection.add_row()
# Blockとして追加する
image = row.children.add_new(ImageBlock)
image.upload_file("./path/to/image.png")
print(image.source)
code:res
アップロード操作(2)
neneka/notion-pyにはFileBlockにupload_file_binを生やしてあるので、bytesのままアップロードできる。
code:py
import requests
from notion.block import ImageBlock
r.raise_for_status()
row = page.collection.add_row()
# Blockとして追加する
image = row.children.add_new(ImageBlock)
image.upload_file_bin(r.content, "shikaruneko.png", "image/png")
print(image.source)
余談:ページのプロパティとして追加する(できない)
notion-pyではブロックの追加以外の方法としての画像アップロードに対応していないが、実際のNotionではプロパティのタイプをファイル/メディアにすることによってアップロードが可能である。
しかしnotion-pyで模倣できない。いかに失敗例を示す
1. row.TARGETCOLUMNに当てる
code:py
失敗
signed urlがうまく生成されない
2. row.TARGETCOLUMN.append(image.source)
同上