Chrome で Stylebot スタイルを Stylish 形式にエクスポートする方法はありますか?

Chrome で Stylebot スタイルを Stylish 形式にエクスポートする方法はありますか?

全体の話はこうです。私は Chrome の白い背景が嫌いで、新しいタブを開いたりリンクをクリックしたりすると画面が白くなり、目が焼けるように痛みます。Stylebot 拡張機能は、新しいタブや白い画面の読み込み時に色を変更できないようです。

Firefox に完全なダークテーマ (古いテーマ) をインストールすると、この問題は発生しません。そのため、Chrome を捨てて Firefox を使い始めたいと思います。しかし、皆さんご存知のとおり、Stylebot には Firefox バージョンがありません。

Firefox 用の Stylebot ほど優れたアドオンはまだ見つかっていません。Stylebot に近いアドオンはバグが多く、Web サイトを台無しにします。

そこで、Chrome の Stylebot でプリセットを取得して、Stylish 拡張機能スタイルにエクスポートすることを考えました。それが可能かどうかはわかりませんし、コーディングの種類についてはまったく知りません。それが何とか機能すれば、最高です!

Chrome の白い背景を変更するのは面倒だったので諦めました。白い読み込み画面にはいくつかの変更が効きましたが、新しいタブページには効きませんでした。新しいタブを他の URL に変更する拡張機能も効きませんでした。読み込みが完了する前に常に白い画面が表示されます。

それで...誰か助けてくれませんか?

答え1

私は自分でこれを調べています。Stylish は次の形式でエクスポート/インポートします。これには、userstyles.org からの 2 つの例と、私がすぐに作成した 1 つの例が含まれます。

[
  {
    "sections": [
      {
        "urls": [],
        "urlPrefixes": [],
        "domains": [
          "myjetbrains.com"
        ],
        "regexps": [],
        "code": "body.global { /*etc */}"
      }
    ],
    "url": "http://userstyles.org/styles/133921",
    "updateUrl": "https://userstyles.org/styles/chrome/133921.json",
    "md5Url": "https://update.userstyles.org/133921.md5",
    "originalMd5": "7963f3cfdce94512ebd74a0098a56b38",
    "name": "YouTrack Dark TV Style",
    "method": "saveStyle",
    "enabled": true,
    "id": 1
  },
  {
    "sections": [
      {
        "urls": [],
        "urlPrefixes": [],
        "domains": [],
        "regexps": [],
        "code": "/* 4chan - Midnight Caek */\r\n@namespace url(http://www.w3.org/1999/xhtml);"
      },
      {
        "urls": [],
        "urlPrefixes": [],
        "domains": [
          "4chan.org"
        ],
        "regexps": [],
        "code": "/* hides Captcha table row */\r\n\r\n/* body background and text color */\r\nhtml, body { /*etc */}"
      },
      {
        "urls": [],
        "urlPrefixes": [],
        "domains": [
          "dis.4chan.org"
        ],
        "regexps": [],
        "code": "body { /*etc */}"
      }
    ],
    "url": "http://userstyles.org/styles/65821",
    "updateUrl": "https://userstyles.org/styles/chrome/65821.json?ik-passtoggle=ik-No",
    "md5Url": "https://update.userstyles.org/65821.md5",
    "originalMd5": "d34520a7525de8e0c174d466697c50db",
    "name": "4chan - Midnight Caek",
    "method": "saveStyle",
    "enabled": true,
    "id": 2
  },
  {
    "method": "saveStyle",
    "name": "stackoverflow improvement",
    "enabled": true,
    "sections": [
      {
        "urls": [],
        "urlPrefixes": [],
        "domains": [
          "superuser.com"
        ],
        "regexps": [],
        "code": "body{background:#ddd;}\n"
      }
    ],
    "updateUrl": null,
    "md5Url": null,
    "url": null,
    "originalMd5": null,
    "id": 3
  }
]

Stylebot を使用すると、次の JSON 形式でスタイルをバックアップおよびエクスポートできます。

{
  "abcnews.go.com":{
    "_enabled":true,
    "_rules":{
      "div.t_callout":{
        "display":"none"
      }
    }
  },
  "boingboing.net":{
    "_enabled":true,
    "_rules":{
      "#next-post-thumbnails":{
        "display":"none"
      }
    }
  }
}

Stylebot が返した JSON をループして、Stylish 形式で CSS を生成するコードを書くのは、かなり簡単なはずです。私は実際にいつかこれに取り組み、その機会があれば自分の成果を投稿するつもりです。

答え2

注意:

変換された json を stylish/stylus にインポートする前に、まず既存の設定をバックアップしてください。エクスポートした設定でのみ検証しましたが、バグが含まれている可能性があります。


stylebot json を stylish/stylus json に変換するスクリプトを作成しました。

スクリプトを使用するには、Python 3 がインストールされている必要があります。 としてスクリプトをダウンロードしたと仮定してs2s.py、次のようにスクリプトを実行します。

python3 s2s.py stylebot.json -o stylus.json -e utf-8

および引数-o-eオプションです。

GitHub の Gist

ちょっと醜いコードだということは分かっていますが、誰が気にするでしょうか :P

import argparse
import json


def stylebot_to_stylus(source='sb.json', target='stylus.json', encoding='utf-8'):

    with open(source, encoding=encoding) as f:
        data = json.load(f)

    result_list = []
    item_id = 1
    for domain_name in data:
        item_dict = {}
        item_dict["id"] = item_id
        item_id += 1
        item_dict["enabled"] = data[domain_name]['_enabled']
        item_dict["name"] = domain_name

        # only one section for each domain (group)
        sections = []
        section0 = {}
        section0['urls'] = []
        section0['domains'] = []

        # add the domain or the group of domains
        if ',' in domain_name:
            for addr in domain_name.split(sep=','):
                section0['domains'].append(addr.strip())
        else:
            section0['domains'].append(domain_name)

        css_rule = ''

        # construct a css rule for each domain (group)
        for selector in data[domain_name]['_rules']:
            css_rule += selector + '{'
            for attr in data[domain_name]['_rules'][selector]:
                css_rule += attr + ':'
                css_rule += data[domain_name]['_rules'][selector][attr] + ';'
            css_rule += '}'
        section0['code'] = css_rule

        sections.append(section0)
        item_dict['sections'] = sections

        result_list.append(item_dict)

    with open(target, "w", encoding=encoding) as of:
        of.write(json.dumps(result_list))


if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument("source",
                        help="input json file, exported from Stylebot[Lite]")
    parser.add_argument('-o', '--output',
                        help='output json file, can be imported to Stylus')
    parser.add_argument('-e', '--encoding',
                        help='output json file, can be imported to Stylus')

    args = parser.parse_args()
    src = args.source
    out = args.output if args.output else 'stylus_output.json'
    enc = args.encoding if args.encoding else 'utf-8'

    stylebot_to_stylus(src, out, enc)

関連情報