2024-08-15

スターの多い順にブコメを並び替える

FANZAの検索結果から熟女を除外するブックマークレット がうまく動いたので、気を良くしてはてなブックマークコメント欄スター数順にソートするブックマークレット作りました

作った動機は、「注目コメントに入りきれなかったちょっといいコメント」をサクサク探したいから。結果として建設コメント順位付けモデル無効化していますが、あのアルゴリズムには特に不満は特にありません。

ブックマークレット

javascript: (async () => {
const wait = ms => new Promise(resolve => setTimeout(resolve, ms));
document.querySelector('.js-bookmarks-sort-tab[data-sort="recent"]').click();
window.scrollTo(0, document.body.scrollHeight);
await wait(1000);
window.scrollTo(0, 0);
await wait(1000);
const p = document.querySelector('.js-bookmarks-recent');
let l = Array.from(p.querySelectorAll('.entry-comment-contents'));
const g = e => {
let n = e.querySelectorAll('.hatena-star-star').length;
const c = e.querySelector('.hatena-star-inner-count');
return c ? n + Number(c.textContent) : n
};
l = l.filter(e => g(e) > 0);
l.sort((a, b) => g(b) - g(a));
p.replaceChildren(...l);
})();

ミニファイしたものコードに一部誤りがありましたので訂正しました(2024-08-16 11:47)

javascript:(async()=>{const wait=ms=>new Promise(resolve=>setTimeout(resolve,ms));document.querySelector('.js-bookmarks-sort-tab[data-sort="recent"]').click();window.scrollTo(0,document.body.scrollHeight);await wait(1000);window.scrollTo(0,0);await wait(1000);const p=document.querySelector('.js-bookmarks-recent');let l=Array.from(p.querySelectorAll('.entry-comment-contents'));const g=e=>{let n=e.querySelectorAll('.hatena-star-star').length;const c=e.querySelector('.hatena-star-inner-count');return c?n+Number(c.textContent):n};l=l.filter(e=>g(e)>0);l.sort((a,b)=>g(b)-g(a));p.replaceChildren(...l)})()

使い方

FANZAの検索結果から熟女を除外するブックマークレット 参照

コード解説

コード説明にダサイところがあったら厳しく指摘して下さい。

javascript:

ブックマークレット必要な、URLの種類を示すスキーム名です。

(async () => {
// 処理
})();

ページに元々ある変数たちとバッティングしないように、まず無名関数ラップします。処理の中で await を使いたいので async 宣言しています

const wait = ms => new Promise(resolve => setTimeout(resolve, ms));

処理の途中で待ち時間を設けるための関数です。便利。

document.querySelector('.js-bookmarks-sort-tab[data-sort="recent"]').click();
window.scrollTo(0, document.body.scrollHeight);
await wait(1000);

「新着コメント」タブをクリックし、ページの一番下までスクロールダウンしてから少し待つ動作です。新着コメントの後半部分(スクロールきっかけの遅延読み込みになっているところ)の読み込みをうながしています

window.scrollTo(0, 0);
await wait(1000);

ページの先頭に戻ってまた少し待ちます。合計2秒の待ち時間雰囲気で決めていますので、これでなければならない・これで過不足ないという値ではありません。単にコメントの読み込み完了を判定する処理を書くのがめんどうだっただけです。

const p = document.querySelector('.js-bookmarks-recent');

新着ブコメの親要素です。繰り返し呼び出すので名前をつけています

let l = Array.from(p.querySelectorAll('.entry-comment-contents'));

コメントをすべて配列に格納します。

const g = e => {
let n = e.querySelectorAll('.hatena-star-star').length;
const c = e.querySelector('.hatena-star-inner-count');
return c ? n + Number(c.textContent) : n
};

コメントはてなスター数をカウントして返す関数です。たくさんスターがついてる ★256★ みたいなやつの数字も足します。

l = l.filter(e => g(e) > 0);

ソートする前に、無スターコメントを消去しています。してもしなくてもいいことですが。

l.sort((a, b) => g(b) - g(a));

残ったコメントスター数で降順ソートします。.querySelectorAll() で収集した要素を配列に入れ直したのは、この .sort() メソッドを使いたいからです(.querySelectorAll() が返す配列風の NodeList オブジェクトは、配列共通メソッドもいくつかあるものの、大半は使えないのです)。

p.replaceChildren(...l);

親要素の内容を、並び替えの終わったコメントそっくり入れ替えて、処理完了です。画面を見ると新着コメントの中身が「スターのついたコメントのみ・スターの多い順」に並んでいます。元に戻す方法はないので、原状回復にはリロードします。ソート状態を示すフラグを立てておいてスターソート⇔日付ソートをかわりばんこに行うようにすればできそうだなと思ったけど実装しません。連打スターを省く処理を追加してUU数でソートできればもっと厳正なランキングになるなーと今思いつきましたがそれも実装しません。

記事への反応 -
  • 見たくない、欲しくないジャンル、プレイ、女優、作品を非表示にする機能が必要だ。 俺は男の娘には全く興味ないし、排泄物にも中○しにも興味ない。 ジャンルで絞り込みはできるが...

    • 興味のない作品が検索結果に混じるのは邪魔ですよね。 私は熟女モノとか人妻モノは眼中にないのですが、なぜだか最近そっち系の作品が多くて閉口しています。 しかしFANZA側の検索シ...

      • FANZAの検索結果から熟女を除外するブックマークレット がうまく動いたので、気を良くしてはてなブックマークのコメント欄をスター数順にソートするブックマークレットを作りました...

      • いいね!

      • コード解説、必要か????

      • 増田で青背景でコードを表示する方法ってどうやればいいの?

        • はてな記法をよく読め

        • 増田でコードを表示する方法を説明しますね。 記法 ふつうの投稿と違うのは以下の3点だけです。 コードは <pre> タグでくくる コード内に登場する & や < や > などの特...

          • 特殊文字は、実体参照(& や <)ではうまくいきません。数値参照を使ってください。 今初めて知ったわ!

          • ありがとう。ChatGPTに作ってもらった。数値文字参照でないといけないというのは素人には教えてもらわないとたどり着けないので感謝です。 ハイライトされた文字列を <pre> タグで...

      • MGSやAmazonでも試してみたけどFanzaしか使えないんだな

      • 最近全くの素人ながらにChatGPT使って簡単な自分用ブックマークレットを作ってもらってるけど、ちょっと複雑な機能になると何をどう命令すればいいかすら分からなくて初手で詰んでし...

      • 正規表現で何故「熟」だけにしなかったのだろうか。 こだわりがあるようだ。

        • 熟を含むけど除外したくない単語があるからだろうね。「未成熟」とか……

        • 「妻」と「人妻」は完全にダブッてるね。「妻」だけでいい。 四十路|五十路|六十路も[四五六]十路でいいし。

      • missavがあればDMMなんていらん

      • AV界は熟女モノ大盛況なのに、IV界のほうではサッパリなのはなんでだろうね。 熊田曜子(42)が意地で作品を出し続けてるけど、以外はマイナーなモデルがひとりふたりいるくらい?

      • この記事のおかげ FANZAの検索結果から熟女を除外するブックマークレット 詳しくは上記の記事を読んで。 そして、このコードをブクマに突っ込むのです。 >|| javascript: (() => {let r = ...

        • ちゃんと書こうぜ javascript:(()=>{let r=location.href;r=r.replace(/(https:\/\/www.amazon.co.jp\/).+?(dp\/..........).+?$/,'$1$2');navigator.clipboard.writeText(r);})()

    • 実名で問い合わせれば対応してくれるよ!

    • 検索タグにムチムチと爆乳を追加して欲しいわ。 どっちも幅広すぎるんだよね。目視で絞り込まなきゃいけないのがダルい。

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん