LoginSignup
10
2

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-10-19

transQiita(作ったもの)

transQiita は、Qiita API v2 、googletrans を利用したコマンドラインアプリケーションです。コマンドラインから実行することでインタラクティブ(または非インタラクティブ)に、Qiita 上の記事を自動で英訳し、 Qiita へ投稿することができます
また、Qiita の GitHub 連携と Twitter 連携を利用して、gist/Twitter への同時投稿ができます(オプション)。

GitHub リポジトリ: tm-tech/transQiita

さっそくデモ!

transQiita-demo.gif

元記事:
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 投稿となります。デバッグ不足なところが多々あると思いますので、不具合がございましたらご報告いただけますと幸いです!(小声)

10
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
2