Pythonでブックマークインポート用HTMLを自動生成するツールを作った(for Firefox)

公開日:2019-01-22
最終更新:2019-05-06

はじめに

Firefoxのブックマークマネージャーが使いにくいです。
Google Chromeと比べたら圧倒的に使いやすいけれど、でもまだまだ面倒。

私が理想とするのは、プレーンテキストで記述された簡単な設定ファイルをVimで編集するというものです。
…うん。私だけだなこんなこと思う人。

ということで、文句言わずに自分でなんとかしました。

できたもの

JSONで記述したデータをPythonで読み込み、HTMLを生成。それをFirefoxにインポートする、という方針にしました。
Webブラウザ拡張機能をわざわざ作るのは骨が折れるので。
まぁPythonも初心者なんですが。

ディレクトリ構造

├── data  
│   ├── bookmarks.json  
│   └── ex  
│       ├── bookmarklet.js  
│       └── hoge.html  
└── master.py  

ブックマークのデータはdataディレクトリに入っています。

bookmarks.jsonに基本的なブックマークを記述します。

[  
    { "name": "Google", "key": "gg", "uri": "https://www.google.com/" },  
    { "name": "Google", "key": "gg:", "uri": "https://www.google.com/search?q=%s" },  
    { "name": "Bookmarklets", "key": "bm", "uri": "ex://let/bookmarklet.js" },  
    { "name": "適当なHTML", "key": "hoge", "uri": "ex://base64/hoge.html" },  
]  

nameが名前、keyがキーワード(ニックネーム)、uriがブックマークのURIです。

1つ目のデータは普通のブックマークです。特記事項なし。
2つ目のデータは検索エンジンです。uriに検索語句を%sに置換したURIを登録します。

3つ目と4つ目のuriex://から始まっています。
これは、External、外部にURIを記述する形式です(作った)。
Pythonを見てもらったほうが速いですね。

template = '<a href="%(uri)s" shortcuturl="%(key)s">%(name)s</a>'  

import os  
from json import loads as jsonLoads  
from base64 import b64encode  
from urllib.parse import urlparse  
# pip install jsmin  
from jsmin import jsmin  

html = (  
    '<!DOCTYPE html>'  
    '<meta charset="utf-8">'  
)  

os.chdir(os.path.dirname(__file__) or './')  

with open('./data/bookmarks.json') as f:  
    bookmarks = jsonLoads(f.read())  

for bookmark in bookmarks:  
    parsedURI = urlparse(bookmark['uri'])  

    if parsedURI.scheme == 'ex':  
        with open('./data/ex/' + parsedURI.path) as f:  
            externalStr = f.read().strip()  

        if parsedURI.netloc == 'str':  
            bookmark['uri'] = externalStr  
        elif parsedURI.netloc == 'base64':  
            bookmark['uri'] = 'data:text/html;base64;charset=utf-8,' + b64encode(externalStr.encode('utf-8')).decode('utf-8')  
        elif parsedURI.netloc == 'let':  
            bookmark['uri'] = 'javascript:(()=>{' + jsmin(externalStr) + '})()'  

    html += template % bookmark  

with open('./bookmarks.html', mode='w') as f:  
    f.write(html)  

JSONを読み込み、ブックマークをaタグに変換します。
uriをパースし、スキームがexだった場合には、外部のファイルを参照しています。
参照する外部ファイルは、uripathで指定しています。
urinetloc(ドメイン)でモードを指定し、そのモードに従って外部のファイルを加工しています。

  • strモード
    • ただの文字列と解釈し、ファイルの中身をURIとして扱います
  • base64モード
    • ファイルの中身をbase64でエンコードし、その結果をData URIとして埋め込みます
    • HTMLをブックマークに埋め込みます
    • 詳しくはこの記事参照
  • letモード
    • ブックマークレットモード
    • ファイルの中身をJSとしてMinifyし、ブックマークレットとして使えるようにjavascript:などを与えています

おわりに

Firefox専用です。
Google Chromeはニックネーム非対応で使えませんし、Vivaldiはインポート・エクスポートに非対応ですし。
(早くVivaldi対応しないですかねー)。

記事が少しでもいいなと思ったらクラップを送ってみよう!
18
+1
@okayuの大して技術的ではないブログ

よく一緒に読まれている記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる

技術ブログをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

技術ブログを開設する

Qrunchでアウトプットをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

Markdownで書ける

ログ機能でアウトプットを加速

デザインのカスタマイズが可能

技術ブログ開設

ここから先はアカウント(ブログ)開設が必要です

英数字4文字以上
.qrunch.io
英数字6文字以上
ログインする