752 Words
⚠️

「存在しないブコメ」にはてなスターを付けるのはスパム行為なのか?

この件。

最近モチベーション下がっていたこともあり「とりあえずネタひとつみっけ」ということで対応してみた。

Satena - はてなブックマーククライアント, はてブビューア

Satena - はてなブックマーククライアント, はてブビューア

すいはん無料posted withアプリーチ

「あなたへのお知らせ」を取得するAPI

はてなのページ右上にある「あなたへのお知らせ」は、ログイン情報を付加(cookieにrkを設定)して https://www.hatena.ne.jp/notify/api/pull をGETすることでJSONで取得することができる。

通常の中身がどんなものか詳細は省くとして、今回の件のスパムからきた通知は次のようになる。

{
    "created": 1579831251,
    "object": [
        {
            "color": "yellow",
            "user": "bibibi260"
        }
    ],
    "verb": "star",
    "subject": "https://b.hatena.ne.jp/suihan74/2020124#bookmark-4680412377476457090",
    "metadata": {
        "subject_title": "はてなブックマーク - 2020124に関するsuihan74のブックマーク"
    },
    "modified": 1579831251,
    "user_name": "suihan74"
}

このスターが付けられたブクマは無言ブックマークである。

冒頭の増田でも言及されているように、無言ブクマの場合に限り subject_title を正規表現なりで判定してやれば良さそう。ということで(雑に)やった。

package com.suihan74.satena.scenes.entries.notices

import com.suihan74.HatenaLib.Notice

private val spamRegex = Regex("""はてなブックマーク\s*-\s*\d+に関する.+のブックマーク""")

/** スパムからのスターの特徴に当てはまるか確認する */
fun Notice.checkFromSpam() =
    spamRegex.matches(this.metadata?.subjectTitle ?: "")

コメント付きの場合、subject_title 部分に自分のブコメが入る。(なお、入らない場合もある。はっきり検証していないが、最初に無言ブクマをして後からコメントを書き直した場合?あとで分かったら追記する)

そのため先述の方法では判別できないので、さてどうしたものかと思っている。

スパムユーザーはプロフィールとか見れば一発でそれと分かりそうな感じなのだけど、取得した通知分全員のプロフィールを取ってくるのも無駄な感じするしなあ。