Closed7
NotionAPIを利用してそのページがWebで公開されているかどうか確認できるプロパティを探してます。
知りたいこと
Webで公開
の状態をapi経由で受け取りたい
ありそうだと考えた場所
- ページやDBの持つ属性、プロパティの中
公式から引用
ページの持つ
{
"object": "page",
"id": "be633bf1-dfa0-436d-b259-571129a590e5",
"created_time": "2022-10-24T22:54:00.000Z",
"last_edited_time": "2023-03-08T18:25:00.000Z",
"created_by": {
"object": "user",
"id": "c2f20311-9e54-4d11-8c79-7398424ae41e"
},
"last_edited_by": {
"object": "user",
"id": "9188c6a5-7381-452f-b3dc-d4865aa89bdf"
},
"cover": null,
"icon": {
"type": "emoji",
"emoji": "🐞"
},
"parent": {
"type": "database_id",
"database_id": "a1d8501e-1ac1-43e9-a6bd-ea9fe6c8822b"
},
"archived": true,
"properties": {
"Due date": {
"id": "M%3BBw",
"type": "date",
"date": {
"start": "2023-02-23",
"end": null,
"time_zone": null
}
},
"Status": {
"id": "Z%3ClH",
"type": "status",
"status": {
"id": "86ddb6ec-0627-47f8-800d-b65afd28be13",
"name": "Not started",
"color": "default"
}
},
"Title": {
"id": "title",
"type": "title",
"title": [
{
"type": "text",
"text": {
"content": "Bug bash",
"link": null
},
"annotations": {
"bold": false,
"italic": false,
"strikethrough": false,
"underline": false,
"code": false,
"color": "default"
},
"plain_text": "Bug bash",
"href": null
}
]
}
},
"url": "https://www.notion.so/Bug-bash-be633bf1dfa0436db259571129a590e5"
}
ぱっと見なさそう
隠れてるとすれば
},
"archived": true,
"properties": {
Archiveかどうかの上の当たりにありそうだけど、、、
HTMLの中でweb公開とそうでない場合で変化があると考えた
html内部で何か変化があるか確認
GPT4様による回答
Notion APIでは、ページがウェブに共有されているかどうかを確認するために、ページのpropertiesではなく、ページのis_public属性を確認する必要があります。ただし、Notion APIの現行バージョン(2021年9月時点)では、is_public属性にアクセスすることができません。そのため、現在のAPIを使用してウェブへの共有状態を直接確認することはできません。
スクレイピングして。。
CSSの変化から判別するという力業もあるかもという提案
単純にURLを叩くのがシンプルだという結論に至りました
非公開ページだとログインページに移るのでそこで判別するという感じで行きます!
ミドラボというコミュニティを立ち上げていてそこでいろいろ相談に乗って即解決できました!!
気になったらDMくださーい
まだ検証できていないので解決ではなかったです!
検証してみた
import requests
def is_public_notion_page(url):
response = requests.get(url, allow_redirects=False)
# Notionの非公開ページは、ログインページにリダイレクトされるため、
# ステータスコードが302になります
if response.status_code == 404:
return False
elif response.status_code == 200:
return True
else:
raise Exception(f"Unexpected status code: {response.status_code}")
public_page = "https://midra-lab.notion.site/test-3baa0d46c9c645a6aaa719d825c4e6fe" #webで公開から取得したリンク
private_page = "https://midra-lab.notion.site/Riptaide-9575cdc50f3a43b7924fb895a85d8bfc"
print(f"Public page: {is_public_notion_page(public_page)}")
print(f"Private page: {is_public_notion_page(private_page)}")
実行結果
> python main.py
Public page: True
Private page: False
ここで違和感発生
public_page = "https://midra-lab.notion.site/test-3baa0d46c9c645a6aaa719d825c4e6fe" #webで公開から取得したリンク
private_page = "https://midra-lab.notion.site/Riptaide-9575cdc50f3a43b7924fb895a85d8bfc"
DBからはどのリンクが取得できるのか
ペーストしてみた
public_page = "https://www.notion.so/midra-lab/test-3baa0d46c9c645a6aaa719d825c4e6fe" #リンクをコピーから取得したリンク
public_page = "https://midra-lab.notion.site/test-3baa0d46c9c645a6aaa719d825c4e6fe" #webで公開から取得したリンク
最初の方が全然違うということに気が付いた。
リンクからコピーのURLで先ほどのコードを試したところfalse
になったので
取得したときに無理やりwww.notion.so/midra-lab
ここをmidra-lab.notion.site
に置き換える必要があるということに気づいた
これで解決かな?
このスクラップは2023/04/19にクローズされました