Skip to content

Instantly share code, notes, and snippets.

@murakmii
Created February 9, 2023 11:39
Show Gist options
  • Save murakmii/8624f0f03a2c868460a4268181856d36 to your computer and use it in GitHub Desktop.
Save murakmii/8624f0f03a2c868460a4268181856d36 to your computer and use it in GitHub Desktop.
[Nostr] nocommentコンパチな偽劣化はてなブックマークを考える

nocommentコンパチな偽劣化はてなブックマーク作れる気がしてきたのでアイデアをメモしておく。
nocommentとは任意のページに、そのページに言及しているNostr上の一連のノートを埋め込めるJavaScriptライブラリである。
https://github.com/fiatjaf/nocomment

このライブラリは内部でr-tagを利用し当該ノートを引っ張っている。 Nostrのプロトコル的に書くと、

{
    "kinds": [1],
    "#r": ["<nocomment embed page url>"]
}

という感じのフィルタに一致するノートを引っ張っている。 https://github.com/fiatjaf/nocomment/blob/f1b91fb3195ff2a84e9ae5cbef9dec49a44f73f1/src/NoComment.jsx#L51

このようなノートを作ることは簡単で誰でも自由に行える。 そのためnocomment以外からnocommentの対象となるノートを作成することは簡単に思いつくが、 それだけでは面白くないので、このノートにさらにオンラインブックマーク的機能を持たせたい。

分かりやすさのため、そのようなブックマーク機能を持ったWebサイト https://nostr-bookmark.murakmii.dev を作ることを考える(以下、ブックマークサイト)。 例えば https://bbs-on-nostr.vercel.app 上のnocommentのコメントにもなりブックマークサイト上ではブックマークにもなる、 という性質のノートは以下のように作成できる(要点のみ抜粋)

{
    "pubkey": "npubBOOKMARKSITEUSER",
    "content": "このページまじでアレ!!!",
    "kind": 1,
    "tags": [
        ["r", "https://bbs-on-nostr.vercel.app"],
        ["r", "https://nostr-bookmark.murakmii.dev"],
    ]
}

このノートは["r", "https://bbs-on-nostr.vercel.app"]によりnocommentから補足される。 そしてブックマークサイトからは["r", "https://nostr-bookmark.murakmii.dev"]及びpubkeyがユーザーのものとなっているノートをリレーから取得することで、 「自分のブックマーク」として表示することが可能である。ブックマークとして取得する際のプロトコル上のフィルタとしては、

{
    "kinds": [1],
    "#r": ["https://nostr-bookmark.murakmii.dev"],
    "authors": ["npubBOOKMARKSITEUSER"]
}

となる。この条件にマッチしたノートのtagには当然ブックマーク対象(nocommentコメント対象)のURLが入っているため、 それをブックマーク一覧として見せることができる。

また、ブックマーク一覧だけではブックマークサイトとして寂しい場合、
authorsの条件を外すことで「最近行われたブックマーク」というような見せ方をすることも可能である。
(リレーは返すイベントの順序を規定していないため、正しく日付順になるとは限らない。ただリレーのイベント保持日数には限りがあるため、かね最近行われたブックマークとして見ることが可能のはず)

補足として、このように「あるサービスに関連するノート」を定義する方法としてr-tagが適切かどうかは考慮する必要がある。
個人的には、各ブックマークには NIP-33 Parameterized Replaceable Events で作ったイベントをe-tagで参照させるのが適切な気もする。

補足: Nostr上ではノートは消えてしまうため、これをブックマークと呼んでいいのかどうか怪しいので「偽劣化」と書いた

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment