こんにちは、Nostr本演習をしがんでしがんでしがみたおすひゅうがです。
演習の延長戦として、ちょっとした検索ツールを作ってみました。ちゃんと動いたのが嬉しいのでわざわざ記事を書きます。


【そもそもは自分用】

そもそもは「自分の投稿を日付とキーワードで検索(というか抽出)するツール」が欲しかったんですよね。

私はTwilogで「こないだシーツ洗濯したのいつだっけ」などという日常記録を検索するのが趣味なので、Nostrにもそういうことのできる、「ノスログ」のようなものが欲しいとずっと思ってました。

しかしなかなかそういうサービスは生まれない。単純に検索するだけなら「nos.today」や「Nostr検索ポータル」があるんだけど、「自分の投稿限定」で「期間」も指定できるというのが意外にない。 (※下部に追記あり)

なので演習1-2をやった時に、「これを改造すれば自分の投稿だけ読み込むことができるな」というのはすぐ思って、ローカルで動かすやつは6月中に作ったんです。
Nostr本演習のアンチョコ(JavaScript覚え書き)~その3・延長戦~」の最後のところに、「演習1-2の延長戦」として紹介しています。


リレーを読み込む時に「author」「since」「until」のフィルターが使えるので、「自分の投稿」を「いつから」「いつまで」で抽出するのはすぐできます。(日付をUNIXタイムに変換するのがちょっと面倒ではある)
「キーワードに合致する投稿を見つける」のもすでにbotのプログラミングで経験済み。

なので比較的あっさり動かせたんですが、コマンドラインから日付やキーワードを入力するのがかなり面倒くさい
htmlと組みあわせてブラウザからサクッと入力できればなぁ。

【演習1-3を先に】

演習1-2をブラウザから動かす、というのはDonさんが雛形を作ってくださっていて、それを頑張って改造すれば「自分の投稿をブラウザからサクッと検索」できるはず。
でも先に着手したのは演習1-3の方でした。


これを使えばbotたちに自由に喋らせることができる! がんばってラジオボタンも付けました。(本の丸写し)

おかげでbotたちはまったく他のクライアントにログインすることなく運用できています。
この投稿ツールも6月中に作っていて、ラジオボタン化も7月半ばには完了。
それから1か月以上経って、やっと重い腰を上げ、1-2改造版に着手。「自分の投稿を検索する」バージョンは8月16日におおむね完成

公開鍵を入れて他の人の投稿を検索できるようにしたらさらに便利になるのでは?ということでごちゃごちゃいじって、8月18日「誰かの投稿を検索するやつ」が爆誕!

入力された「npub」形式の公開鍵をHEXに変換する方法は崇徳さんNostr井ラスト倉庫からコピペさせていただきました。崇徳さん、ありがとう。

ついでと言ってはなんだけど、元投稿のnoteIDを「note1」形式に変換して検索結果に表示するようにも改修。こうしておけばnoteIDをコピーして他のクライアントから元投稿を参照できる。

【せっかくなので公開してみた】

1-3改の方は秘密鍵が必要なので、私ごときではとても「誰もが使えるようにする」ことはできませんが、1-2改が扱うのは公開鍵のみ。ネット上に上げて誰でも使えるようにしてもそんなに問題ないはず。

たまたまNostrのNIP-05認証でCloudflarePagesを使っていたので、そこにhtmlファイルとJavaScriptのファイルを置けば、ネット上から使えるはず。

やってみました。

あっさり動きました。

ひゃー、マジか、俺すげーーーーーー。

botが動いた時も感動しましたが、botたちは私のパソコンの中だけで動いていて、私がパソコンを閉じてしまえばそれでおしまい。あくまで「ローカル」なものです。
でも今回のこの「検索するやつ」は、私がパソコンを開いていようがどうしようが関係なく、いつでも、そして誰でもがアクセス可能。

ちまちま自分でhtml書いて公開するのは1996年からやってますが、文字だけのサイトじゃなくて「何か入力すると答えを返してくる」ようなものを自分で作って公開する日が来るとは。

ありがとうノス本演習。ありがとうかすてらふぃさん、Donさん、崇徳さん!
(「自分で作った」と言っても、ほぼお三方のコピペですからね、えへへ)

【今後の課題?】

8月19日に「キーワード2つのOR検索」「検索結果件数表示」には対応したんですが、今後もしかしたらやってみるかもしれない課題について。

<結果の降順表示>
 今、古い方から表示されるんですよね。単にリレーから返ってきたものをその順番で表示してるだけなので。
 もし新しい方から表示するとしたら、読み込んだものをいったん貯めて、後ろから表示するみたいな処理を追加しないといけないと思うんだけど、検索サイトってだいたい新しい方から出てくるので、あえて「古いのが先に出てくる」の、面白いかもと思ったり。
 直近が見たいならそのように期間指定してもらえばいいし。

<URLにリンクを貼る>
 検索結果内のURLがリンクになっていて、クリック一つで移動できたら便利ですよね、便利ですよね……。

<noteIDにリンクを貼る>
 これも、リンクになってるとすぐ元投稿に飛べて便利だけど、Nostrの場合パーマリンクではなくてクライアントを介したリンクになるので、個々でユーザーが自分の愛用クライアントにnoteID貼りつけて読むのが現実的な気がします。

<検索結果をコピーするボタンをつける>
 もともと「ノスログ」のようなものが欲しい、で作ってるので、期間指定で自分の投稿を抽出して、その結果をEvernoteとか別のところにどんと貼りつけられたら便利だなぁ、と思っています。手動でコピーしてもいいけど、スクロールせずにボタン一つでコピーできたら便利よね。

<村民npubリストを作る>
 自分のnpubはまぁ、すぐ引っ張ってこられるんだけども、「誰かの」となると入力するのがとにかく面倒なので、主要Nostr民のnpubリストをリンクして、すぐコピー&ペーストできれば便利だろうなと。
 でもそんな需要ある? そもそもこのツール、私以外に誰か使うの……?

<検索対象リレーの選択>
 検索ツールと言っても、検索対象はきりのさんリレー(wss://relay-jp.nostr.wirednet.jp)だけです。きりのさんリレーに書き込んでいない人の投稿は検索することができないし、きりのさんリレーが落ちている時にも検索できません。
 私がNostrを始めたのが2月5日で、きりのさんリレーに繋いだのが2月6日。最初の日以外の投稿はきりのさんリレーで網羅できるので、私としてはOKなんだけど、例えばラジオボタンでやぶみリレー(wss://yabu.me)に切り替えられたら便利かも?

【使用上のご注意】

一応自分で検索してみて「だいたい思い通り動く」のは確かめていますが、プログラム内で入力値の検証はしておらず、入力した値によっては予期しない動きをする可能性があります。自己責任でお使いください。

【※2023/08/21追記】

・総読み込み件数がたったの500件だったのを修正しました。リレーにREQを出す時にlimit指定しないと、デフォルトが500件のようです。limit5000件指定に修正し、期間指定1か月でもおおむね正しい検索結果が出るようになりました。
 ただし、limit指定をつけると自動的に降順表示になってしまいます(データが降順で来る)。昇順表示も面白かったのにな、と思い、従来通り500件しか読み込めないけれど昇順で表示するボタンも付けてみました。
 また、結果表示エリアに「readonly」属性を付け、ユーザーが誤って何か入力してしまうのを防ぐようにしました。検索結果のコピーは可能です。

「ノスログ」のようなものとしてきりのさんリレーののぞき窓が使えます!各アカウントのプロフィールアイコンをクリックすると「ヒストリーモード」になり、アカウントの「月ごと」「日ごと」の投稿が見られます。すごい!!!(たとえば私の2023/08/20の投稿一覧ページはこんな感じ
(※さらにnostrlogs」というそのままノスログのようなツールもきりのさんの手で誕生しています!日付ごとに投稿を取ってこれる上、リンクもちゃんと付いている。神ツール!)

・また、こののぞき窓ヒストリーモードを使って過去を表示すると、きりのさんリレーにない投稿もよそから取ってきて、きりのさんリレーにコピーしてくれるという……。マジかー! おかげできりのさんリレーにないはずの2月5日の投稿も私のツールで表示できるように。本当に、きりのさんリレーそのものが「ノスログ」ですよね。ありがとうございますありがとうございます。
(※きりのさんリレーにコピーされるともれなくやぶみリレーにもコピーされるんですが、その挙動が私の検索ツールでちゃんと確かめられたの面白かったです。やぶみリレーは6月頃からしか稼働していないのに、2月5日分だけ検索に出てくるようになった。なるほどなぁ)