Windows環境で拡張子が.urlのインターネットショートカットがあるが、これをPythonからブラウザーに開かせたいなと思った。
urlファイルの中身をテキストエディター等で見ると、次のようなiniファイル形式をしている(最小限の記述での例)。
[InternetShortcut]
URL=https://qiita.com/
Pythonでiniファイルを扱うにはconfigparser
を使用することができる。また、ブラウザーを扱うにはwebbrowser
を使用した。
Python 3.6, 3.9で使用できるので、最近のバージョンなら問題なさそう。
Windows 10 + Edge, Ubuntu 20.04 + firefoxで確認したところ、どちらも期待通りに動作した。
import webbrowser
import configparser
# インターネットショートカットファイルパス
filename = 'some.url'
# ini形式でファイルを開く。interpolation=Noneの指定は本文参照。
url_file = configparser.ConfigParser(interpolation = None)
url_file.read(filename)
# URLを読んでデフォルトのブラウザーで表示する。
url = url_file['InternetShortcut']['URL']
webbrowser.open(url)
Pythonでは様々な形式のiniファイルを扱えるよう、ConfigParserの引数で指定するinterpolationオプションで変換方式を決めている。ここで、標準だと%
を特殊な記号として解釈するようになっている。
しかし、インターネットショートカットでは%2f
のようにURL中の記号や日本語などエンコードすることがあり、このままでは解釈エラーで例外を出してしまう。これを防止するために、interpolation = None
を指定して変換を無効にしている。
まとめ
Pythonから拡張子が.urlのインターネットショートカットをブラウザーに表示させる方法を調べた。中身がini形式のファイルなのでconfigparser
で読み込み、webbrowser
でブラウザーを開くことで実現した。