transQiita(作ったもの)
transQiita は、Qiita API v2 、googletrans を利用したコマンドラインアプリケーションです。コマンドラインから実行することでインタラクティブ(または非インタラクティブ)に、Qiita 上の記事を自動で英訳し、 Qiita へ投稿することができます。
また、Qiita の GitHub 連携と Twitter 連携を利用して、gist/Twitter への同時投稿ができます(オプション)。
GitHub リポジトリ: tm-tech/transQiita
さっそくデモ!
元記事:
https://qiita.com/speaktech/items/fa9dd70024865bff90f0
↓
スクリプトで自動投稿された英訳記事:
https://qiita.com/speaktech/items/99d1530950987019e7d4
必要なもの
- googletrans(9/20時点で動作不良を起こすバグが発生しているようですが、こちらの記事で解決策が提示されています)
- Qiita のアクセストークン(環境変数 QIITA_ACCESS_TOKEN として登録、またはオプションで直接指定)
e.g.
$ pip install googletrans
$ export QIITA_ACCESS_TOKEN='YOUR QIITA ACCESS TOKEN'
コマンドラインでの実行例
$ python transQiita.py [-h] [--gist] [--tweet] [--private] [--auto] [--token TOKEN]
オプション引数
-h, --help ヘルプ
--gist GitHub 連携していれば、gist へコードブロック部を投稿
--tweet Twitter 連携していれば、投稿を Tweet
--private 記事を限定共有投稿
--auto インタラクティブな実行をせず、自動実行(スケジュール実行時に利用)
--token TOKEN 環境変数を利用しない場合、Qiita のアクセストークンを指定
制限事項
- コードブロック部を翻訳処理するとインデントが崩れるため、コードブロック部は翻訳しません。
- 翻訳処理をすると記号と文字の間にスペースが挿入されるため、「 ** 」や「 ~~ 」等のマークダウン装飾が機能しません。
参考にさせていただいた記事
- Qiita API v2 を使って自身の全投稿をエクスポートする Python スクリプトを書いた
- pythonでGoogle翻訳が使えるモジュール
- Pythonでコマンドラインアプリケーションを作るときの雛形
あとがき
-
データベースを使わず更新処理ができるように、英訳版記事に印として「元記事のIDを含むバナー」を付けています。
元記事が更新された際には、元記事IDのバナーを持つ英訳記事を見つけて更新するようにしています。
データベースで元記事と英訳記事の関係性を管理してもよいのですが、それだけのためにデータベースを準備すると汎用性がなくなると考えたため、多少冗長なコードになろうとデータベースレスな設計を目指しました。
(定期的なバッチ処理で使用することを想定していたため、多少処理が重くなろうと構いませんでした) -
マークダウンが崩壊する致命的な制限事項については、正規表現で修正しようと試みましたが、「※」が「*」に翻訳されたりとイレギュラーな装飾記号の出現があるため、挫折しました。(解決策を思案中)
-
最後に余談ですが
インフラ屋さんの私にとって、初めての Python 投稿となります。デバッグ不足なところが多々あると思いますので、不具合がございましたらご報告いただけますと幸いです!(小声)