4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

TampermonkeyでX(旧Twitter)の画像擬態系スパムURLを消す

Posted at

はじめに

10月くらい?にTwitter/Xの仕様変更により、URLを含むポスト(ツイート)のURLのテキストが表示されなくなり、代わりにサムネイル画像にリンクが貼られる形になりました。これにより画像に見せかけた誘導リンクを仕掛ける輩が出没しております。
本当の画像ポストとは違って左下にURLが記載されているので注意していれば目視で回避できますが、とうとう本日踏んでしまったため抜本的な対策を取ることと相成りました。

リンク自体は短縮URLで作られてるためかミュートワードに追加しても消えなかったので、Tampermonkeyを使って非表示にします。

↓こういうスパムリンク付きのポスト(ツイート)を表示させないようにします。
spamimic.png

実際のスクリプト

Tampermonkeyに書いたスクリプトです。

// ==UserScript==
// @name Remove Image-Mimicking Spam URL Replies
// @namespace http://tampermonkey.net/
// @version 0.1
// @description This script eliminates replies containing spam URLs that mimic images on Twitter/X.
// @author MeowMauPaws
// @match https://twitter.com/*
// @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant none
// ==/UserScript==

(function () {
    'use strict';
    let currentURL = "";
    let isRewritedHeader = false;
    // URLブロックリスト
    const blockedURLs = [
        'fanlink.to',
        'n9oi1.app.link',
        // 他のスパムURLあれば追加
    ];

    function containsBlockedURL(tweet) {
        const links = tweet.querySelectorAll('a');
        return Array.from(links).some(link => {
            const ariaLabel = link.getAttribute('aria-label');
            return blockedURLs.some(url => ariaLabel && ariaLabel.includes(url));
        });
    }

    const observer = new MutationObserver(() => {
        if (currentURL == "") {
            currentURL = location.href;
        } else if (currentURL != location.href) {
            currentURL = location.href;
            isRewritedHeader = false;
        }

        document.querySelectorAll('[data-testid="cellInnerDiv"]').forEach(tweet => {
            if (containsBlockedURL(tweet)) {
                tweet.style.display = 'none';
            }
        });
    });

    observer.observe(document.body, { childList: true, subtree: true });
})();

スパムリンクは短縮URLで書かれていることがほとんどなので、aria-labelを見て非表示対象かどうか判断するようにしています。

補足:Tampermonkeyの導入方法(簡易説明)

初めてTampermonkey使うよ、という人向けに一応簡易手順書いておきます。
多分、以下の手順で行けると思います。(ダメだったらすみませんが、その時は各自ちゃんとした情報を調べてもろて…)

  1. Tampermonkeyをブラウザ拡張機能で追加してください

  2. ブラウザ上部の拡張機能が表示されているところからTampermonkeyをクリック -> ダッシュボード
    image.png

  3. +アイコンをクリック
    image.png

  4. ↑の方で書いた"実際のスクリプト"を丸ごとコピペして、保存(Ctrl + S)
    image.png

終わりに

もう誰か対策してるかとも思いましたが、軽く調べた限りではこういう対策をしている例は見つからなかったため作りました。
課題としてはfanlink.toを含むURLは必ずしもスパムというわけではないのですが、今回のスクリプトはその辺りは無差別に非表示にします。個人的には問題ないのでこのまま使っていますが、もし使う人いましたらその点はご了承ください。
もっとシンプルだったり効果的な対策ご存じの方いらっしゃいましたら教えてもらえるとありがたいです。
追加すべきスパムURLの情報とかも提供いただけるととても助かります

4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?