早いもので、3月11日に東北関東大震災が発生してから12日がたちました。福島第一原子力発電所の事故や、電力不足による計画停電など、まだまだ不安な情勢が続いておりますが、少しでも前進できればと、ブログの更新を控えることなく、今後も積極的に情報を発信していきたいと思います。
今、私にできること。で開発した、浦安市公式Twitterアカウント@urayasu_kohoのツイートを英訳するボット、@urayasu_kohobotは、翻訳結果が140文字以上ある場合、141文字以降を削除します。
というのは、同じ意味の文章でも、日本語では少ない文字数で表現できますが、英文では文字数が多くなる傾向があるからです。
ただ、これだと意図通りにメッセージが伝わらない可能性があり、また、メッセージにURLが含まれていた場合などには、そのURLのサイトに遷移できない場合があるので、このボットの役割を完全には果たさない結果となってしまいます。
これを改善するために、Tumblrを利用することにしました。
TumblrはSNSの1つです。詳しくはこちらをご覧ください。
Tumblr – Wikipedia
Tumblrでは、Twitterと連携するよう設定することができます。その際に、Tumblrへのポストが140文字を超えた場合は、140文字以内に省略してTwitterに投稿してくれます。全文はTumblrに掲載されているので、TwitterからはTumblrに遷移すれば全文を確認することができます。そのためのURLも付加されて140文字に省略されるのです。
これを利用すれば、浦安市公式Twitterアカウント@urayasu_kohoのツイートを英訳した結果が140文字以内の場合は、そのままTwitterに投稿し、141文字以上の場合には、Tumblrに投稿するようにすることで、英訳結果が欠落することを防ぐことができます。
Tumblr APIの仕様は、こちらです。
Tumblrに投稿するするAPIは「/api/write」です。
API | Tumblr
APIの仕様は非常にシンプルです。
The Write API is a very simple HTTP interface. To create a post, send a POST request to http://www.tumblr.com/api/write with the following parameters:
http://www.tumblr.com/api/writeのURLに対して、必要なパラメータをポストするだけです。
ここでは、以下のパラメータが必要です。
# email – Your account’s email address.
# password – Your account’s password.
# type – The post type.
# (content parameters) – These vary by post type.
API | Tumblrより抜粋。
- email:Tumblrにサインアップした時のメールアドレスを指定します。
- password:Tumblrにサインアップした時
にのパスワードを指定します。 - type:ポストするコンテンツの種類を示します。
- (content parameters):type毎のパラメータです。
今回は、単純に文章を投稿するだけなので、typeは「regular」となります。
# regular – Requires at least one:
* title
* body (HTML allowed)
typeが「regular」の時に指定可能な(content parameters)は、
- title:エントリのタイトルを指定します。
- body:エントリの本文を指定します。
です。
Tumblr対応で追加したソースはこちらです。
・前回作成したTwitterHandlerクラスに追加したソースコード
def write(self, post = None): if post != None: url = 'http://www.tumblr.com/api/write' opt = { 'email' :'mojamoja@example.com', 'password' :'**********', 'type' :'regular', 'title' :'', 'body' :post.encode('utf-8'), 'generator' :'urayasu_kohobot' } try: res = urllib.urlopen(url, urllib.urlencode(opt)) except urllib.error.HTTPError, e: if e.code == 200 or e.code == 201: return else: raise TumblrException(str(e)) except Exception, e: raise TumblrException(str(e))
・追加したExceptionクラス
class TumblrException: def __init__(self, msg): self._msg = msg def __str__(self): return self._msg
これに伴い、前回既存のソースを一部修正しています。英訳結果が140文字を超えていたら140文字に削っている部分を、Tumblrに投稿するように変更しました。
if len(status) > 140: self.write(status)
※ 実装にはこちらを参考にさせていただきました。
PythonでTumblrのライブラリを書いた – きちめも
PythonでTumblrに画像を投稿 – めも帖
これで英訳結果全文が読めるようになりました。Google翻訳の精度も随分あがっているようなので、日本語の全くわからない方にも十分に伝わると思います。
urayasu_kohobot (urayasu_kohobot) on Twitter