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上ではノートは消えてしまうため、これをブックマークと呼んでいいのかどうか怪しいので「偽劣化」と書いた