早いもので、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クラスに追加したソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | def write( self , post = None ): if post ! = None : 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クラス
1 2 3 4 5 6 | class TumblrException: def __init__( self , msg): self ._msg = msg def __str__( self ): return self ._msg |
これに伴い、前回既存のソースを一部修正しています。英訳結果が140文字を超えていたら140文字に削っている部分を、Tumblrに投稿するように変更しました。
1 2 | if len (status) > 140 : self .write(status) |
※ 実装にはこちらを参考にさせていただきました。
PythonでTumblrのライブラリを書いた – きちめも
PythonでTumblrに画像を投稿 – めも帖
これで英訳結果全文が読めるようになりました。Google翻訳の精度も随分あがっているようなので、日本語の全くわからない方にも十分に伝わると思います。
urayasu_kohobot (urayasu_kohobot) on Twitter