今まではコメント30件、いいね10件、ブクマ5件までしか表示できなかった。それを全件表示する方法を実装した。

対象ページ

他のページにはまだ実装しない。しばらくテストやリファクタリングもしたいので。

修正内容一覧

  • コメント種別とリンクを追加した
  • リンクのtarget属性値を_blankにした
  • コメントのページネーションを追加した(末端までスクロールすると残りを取得する)
  • 出欠確認となるrsvpを追加した(未テスト)
  • いいね、ブクマ、出欠確認のアイコンや数をクリックするとモーダルダイアログが表示され、残りのユーザをすべて表示する(未テスト)
メンション種別 初期最大表示数
いいね 10
ブクマ 5
出欠確認 5
コメント(返信,再投稿,メンション) 30

テストデータを作るのが面倒だったので、テストしていない。というか、どんなデータが返ってくるか実物でテストしたい。ので、自然に集まるまで待ちます。よろしければ、いいね等リアクションしていただけると助かります。

知ったこと

rsvp

メンションの種類にはいいね!やブクマのほかにrsvpというのがある。これは出欠確認するものらしい。

``https://webmention.io/api/count?APIの戻り値となるJSONオブジェクトがもつcount.type`の中にあるプロパティは以下。

count.type 意味
rsvp-yes 参加する
rsvp-maybe たぶん参加する
rsvp-interested 興味がある
rsvp-no 参加しない

https://webmention.io/api/mentions.jf2?APIの戻り値であるwm-propertyrsvpである。rsvpというプロパティもあり、その値のパターンは次の通り。

rsvp 意味
yes 参加する
maybe たぶん参加する
interested 興味がある
no 参加しない

webmention API のバグ?

webmention APIのうち、引数wm-property[]で複数指定するAPIが期待どおりに動作しなかった。メモしておく。

以下のようにwm-property[]キーにメンション種別を指定すると、それだけを取得してくれる。と私は思っている。以下はin-reply-to,mention-of,repost-ofの3種だけ取得することを期待した。

https://webmention.io/api/mentions.jf2?target=https://ytyaru.github.io/&wm-property[]=in-reply-to&wm-property[]=mention-of&wm-property[]=repost-of

ところが、結果はゼロ件だった。6件返ってくるはずなのに。

一件ずつやると期待どおりに取得できる。私はこの3つが結合したものを期待している。これらをコメント欄に出力させたい。3回リクエストすればいいことはわかっているのだが、1回のリクエストで済ませたい。

https://webmention.io/api/mentions.jf2?target=https://ytyaru.github.io/&wm-property[]=in-reply-to
https://webmention.io/api/mentions.jf2?target=https://ytyaru.github.io/&wm-property[]=mention-of&
https://webmention.io/api/mentions.jf2?target=https://ytyaru.github.io/&wm-property[]=repost-of

今度は2つのパラメータで試したら、意味不明な結果になった。in-reply-tomention-ofを組合せた。なぜか順序を変えただけで結果が変わった。しかもそのどちらも期待値ではない。前者はmention-ofだけが返され、後者はゼロ件だった。私はin-reply-tomention-ofの両方入ったやつを期待してたのですが。

https://webmention.io/api/mentions.jf2?target=https://ytyaru.github.io/&wm-property[]=in-reply-to&wm-property[]=mention-of
https://webmention.io/api/mentions.jf2?target=https://ytyaru.github.io/&wm-property[]=mention-of&wm-property[]=in-reply-to

少なくとも、順番が変わったら結果が変わるのはバグだと思う。それとも私が何か勘違いしているのか?

よくわからなかったので、wm-propertyでの絞り込みをやめて、全件取得することにした。これだと中身にlike-of(いいね!)なども含まれてしまう。いいねはその性質上、テキスト内容がないため、コメント欄として表示するものではない。返されるデータにも、content.htmlが存在しない。それでも一緒くたになって返されてしまう。よって仕方なく、返されたJSONのうちcontent.htmlを持っている要素だけを得るようfilterにかけた。じつは今までもこうして絞り込んでいたのだが、今回はAPIを調べて改善してやろうと思っていたのに、このザマだよ。

所感

ところで、これって個人ブログで書くべきことなんじゃなかろうか……。モナコインのモの字も出てこないし。まあいいや。モナレッジのコンテンツを増やして表出させる機会を増やせば、モナコインだって盛り上がるはず。それにしても個人的かつニッチすぎて貢献できなそうな記事。