Closed7

NotionAPIを利用してそのページがWebで公開されているかどうか確認できるプロパティを探してます。

eisukeeisuke

知りたいこと


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かどうかの上の当たりにありそうだけど、、、

eisukeeisuke

HTMLの中でweb公開とそうでない場合で変化があると考えた

html内部で何か変化があるか確認

eisukeeisuke

GPT4様による回答

Notion APIでは、ページがウェブに共有されているかどうかを確認するために、ページのpropertiesではなく、ページのis_public属性を確認する必要があります。ただし、Notion APIの現行バージョン(2021年9月時点)では、is_public属性にアクセスすることができません。そのため、現在のAPIを使用してウェブへの共有状態を直接確認することはできません。

eisukeeisuke

スクレイピングして。。

CSSの変化から判別するという力業もあるかもという提案

eisukeeisuke

単純にURLを叩くのがシンプルだという結論に至りました

非公開ページだとログインページに移るのでそこで判別するという感じで行きます!

ミドラボというコミュニティを立ち上げていてそこでいろいろ相談に乗って即解決できました!!
気になったらDMくださーい

まだ検証できていないので解決ではなかったです!

eisukeeisuke

検証してみた

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
eisukeeisuke

ここで違和感発生

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にクローズされました