株式会社ライブキャストロゴ 株式会社ライブキャスト

早いもので、3月11日に東北関東大震災が発生してから12日がたちました。福島第一原子力発電所の事故や、電力不足による計画停電など、まだまだ不安な情勢が続いておりますが、少しでも前進できればと、ブログの更新を控えることなく、今後も積極的に情報を発信していきたいと思います。

今、私にできること。で開発した、浦安市公式Twitterアカウント@urayasu_kohoのツイートを英訳するボット、@urayasu_kohobotは、翻訳結果が140文字以上ある場合、141文字以降を削除します。

というのは、同じ意味の文章でも、日本語では少ない文字数で表現できますが、英文では文字数が多くなる傾向があるからです。

ただ、これだと意図通りにメッセージが伝わらない可能性があり、また、メッセージにURLが含まれていた場合などには、そのURLのサイトに遷移できない場合があるので、このボットの役割を完全には果たさない結果となってしまいます。

日本語だと、比較的少ない文字数で意味ある文章を形成することができます。日本でTwitterがはやった要因の1つだとも言われています。

これを改善するために、Tumblrを利用することにしました。

TumblrはSNSの1つです。詳しくはこちらをご覧ください。
Tumblr – Wikipedia

以前は、「Twitterの次はTumblrだ!」と言われていたこともあったようです。

Tumblrでは、Twitterと連携するよう設定することができます。その際に、Tumblrへのポストが140文字を超えた場合は、140文字以内に省略してTwitterに投稿してくれます。全文はTumblrに掲載されているので、TwitterからはTumblrに遷移すれば全文を確認することができます。そのためのURLも付加されて140文字に省略されるのです。

これを利用すれば、浦安市公式Twitterアカウント@urayasu_kohoのツイートを英訳した結果が140文字以内の場合は、そのままTwitterに投稿し、141文字以上の場合には、Tumblrに投稿するようにすることで、英訳結果が欠落することを防ぐことができます。

今回はTumblrを利用しましたが、TwitLongerのような、Twitterの機能を補足するようなサービスでも構わないと思います。

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