自分の Qiita 記事を自動英訳して Qiita/gist/Twitter へ投稿する Python スクリプトを作成してみた


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 のアクセストークンを指定

制限事項

  1. コードブロック部を翻訳処理するとインデントが崩れるため、コードブロック部は翻訳しません。
  2. 翻訳処理をすると記号と文字の間にスペースが挿入されるため、「 ** 」や「 ~~ 」等のマークダウン装飾が機能しません。

参考にさせていただいた記事

あとがき

  • データベースを使わず更新処理ができるように、英訳版記事に印として「元記事のIDを含むバナー」を付けています
    元記事が更新された際には、元記事IDのバナーを持つ英訳記事を見つけて更新するようにしています。
    データベースで元記事と英訳記事の関係性を管理してもよいのですが、それだけのためにデータベースを準備すると汎用性がなくなると考えたため、多少冗長なコードになろうとデータベースレスな設計を目指しました。
    (定期的なバッチ処理で使用することを想定していたため、多少処理が重くなろうと構いませんでした)

  • マークダウンが崩壊する致命的な制限事項については、正規表現で修正しようと試みましたが、「※」が「*」に翻訳されたりとイレギュラーな装飾記号の出現があるため、挫折しました。(解決策を思案中)

  • 最後に余談ですが
    インフラ屋さんの私にとって、初めての Python 投稿となります。デバッグ不足なところが多々あると思いますので、不具合がございましたらご報告いただけますと幸いです!(小声)