🦁

機械翻訳サイトの除外リストを基に、Safariのスタイルシートを生成するスクリプト

2021/01/26に公開

概要

下記で公開されているStack Overflowの機械翻訳サイトの除外用フィルタを基にして、PyhonでSafariの除外用のCSSファイルを生成します。
https://github.com/arosh/ublacklist-stackoverflow-translation

できること

生成されたCSSファイルは、Safariの設定でスタイルシートをアタッチすることで反映されます。

反映後問題無ければ以下のようにdisplay: noneが反映されます。
検索本文をまるごと消したかったのですが、本文は指定のaタグの親要素->別の子要素にある為、CSSファイルだけでは実現できませんでした。
親要素にCSSを反映できる:has()を使えばできるかもしれないですが、どのブラウザにも実装されていない為、実質不可と思われます。

内容

まずは上記のOSSをフォークし、スクリプトを追加しました。
Pythonは3.9.1を使用していますが、f文字列を使用している為、3.6以上なら実行可能かと思われます。
下記にフォークしたリンクを貼っておきます。
https://github.com/KaitakuShiba/ublacklist-stackoverflow-translation

#!/usr/bin/env python3

import tempfile
import os
import re

def convert():
    with open('./uBlacklist.txt') as f:
        current_dir = os.getcwd()
        with tempfile.NamedTemporaryFile("w+", dir=current_dir, delete=False, suffix='.css') as tmpf:
            for url in f.read().splitlines():
                # ext: *://code-examples.net/* -> code-examples.net
                matched_url = re.search('((?<=\*:\/\/\*\.)\w.+|(?<=\*:\/\/)\w.+)', url).group()[:-2]
                style = f'a[href*="{matched_url}"]{{display:none;}}'
                tmpf.write(style)
            os.rename(tmpf.name, os.path.join(current_dir, 'uBlacklist.css'))

if __name__ == '__main__':
    convert()

以上のスクリプトを実行すると、カレントディレクトリにuBlacklist.cssが生成されます。
GitHub Actionsのscheduled eventsで新たにリストが反映されたら実行というフローもいいかもしれません。

以上です、ありがとうございました!

Discussion