Python3 + Selenium (FireFox) on Windows / MacOS / Ubuntu (headless)
requests, lxml, beautifulsoup4, Mako, tqdm, seleniumなどのライブラリが実行に必要のためインストールしてください。Windowsの場合は、py -m pip に読み替えてください。
pip3 install -r requirements.txt
加えてSeleniumを動かすために以下のツールが実行に必要です。
sudo apt install python3-pip firefox xdg-utils
sudo pip install selenium
注意:翻訳処理は非常に時間がかかります。1個のRFCを翻訳するのに短いものは5分、長いものは30分〜1時間程度かかります。 開発初期には複数のインスタンスを起動して同時並行で24時間回し続けたのを半年くらいしていました。
取得・翻訳・生成
python3 main.py --rfc 1234 # RFC1234を翻訳する(取得+翻訳+HTML生成)
python3 main.py --rfc 1234 --fetch # RFCの取得だけ
python3 main.py --rfc 1234 --trans # RFCの翻訳だけ
python3 main.py --rfc 1234 --make # HTMLの生成だけ
python3 main.py --begin 2220 --end 10000 # RFC2220〜10000を翻訳する
python3 main.py --make --begin 2220 --end 10000 # RFC2220〜10000のHTMLを生成する
python3 main.py --begin 8000 --only-first # RFC8000以降の未翻訳RFCを1つ選択して翻訳する
トップページの生成
htmlフォルダ内に存在するRFCファイルの一覧から、トップページを作成します。
python3 main.py --make-index # インデックス(目次)ページの作成
RFCのステータス・WGの一覧作成
RFCのステータス・WGの一覧を作成して、JSONに保存するためのコマンドです。
python3 main.py --fetch-status
RFC Draftの翻訳
例えば、TLS Encrypted Client Hello (Draft版) である https://datatracker.ietf.org/doc/draft-ietf-tls-esni/ を翻訳したい場合は、以下のコマンドを実行します。
python3 main.py --draft draft-ietf-tls-esni-14
python3 main.py --make-index-draft # インデックスページの作成
生成物:
ファイルパス | 説明 | 生成元プログラム |
---|---|---|
html/data-rfc-list.json | 廃止RFC・WGの一覧 | fetch_wg.py (取得) |
data/N000/rfcNXXX.json | 段落区切りの文書 | fetch_rfc.py(取得) |
data/N000/rfcNXXX-trans.json | 各文章の翻訳を付与した情報 | trans_rfc.py(翻訳) |
html/rfcNXXX.html | 原文と翻訳を並べて表示するHTML | make_html.py(生成) |
html/index.html | トップページの生成 | make_index.py (生成) |
data/draft/draft-*.json | 段落区切りの文書 | fetch_rfc.py(取得) |
data/draft/draft-*-trans.json | 各文章の翻訳を付与した情報 | trans_rfc.py(翻訳) |
html/draft/draft-*.html | RFCドラフトの原文と翻訳を並べて表示するHTML | make_html.py(生成) |
html/draft/index.html | RFCドラフト一覧のトップページHTML | make_html.py(生成) |
ローカルで成果物の確認:
python3 -m http.server
# localhost:8000/htmlにアクセス
python3 -m unittest discover -s tests -p "test_*.py"
特定のテストのみ実施したい場合
python3 -m unittest tests.test_fetch_rfc.TestFetchRfcSectionTitle.test_section_title
find data/draft -name '*' -type f -exec /bin/bash -c '/opt/homebrew/bin/python3 main.py --draft $(basename {} -trans.json) --make' \;
python main.py --make-index-draft
RFCを解析した結果、本来プログラムとして解釈すべき部分を文章として解釈してしまった場合、プログラムのインデントを削除してJSON化するツール: https://tex2e.github.io/rfc-translater/html/format.html