Tumblrへの投稿メール文字化け対策

Tumblrをメモ代わりに使おうかなと思った。

Tumblrはメール投稿のための送信先アドレスを発行してくれるのだけど、日本語が文字化けする。
なので別アドレスで中継してAPIにPOSTするスクリプトを書いた。誰かすでに作ってそうだが・・・。
POSTできるのはとりあえず通常のテキストのみ。PHSをカメラつきの機種に買い換えたら画像にも対応してみるかも。

さくらのレンタルサーバに置いてる。

/home/username/Mailbox/mailuser/.mailfilter

to "| /usr/local/bin/python /home/username/bin/post_tumblr.py"
exit

/home/username/bin/post_tumblr.py

import urllib, urllib2

post_regular_url = "http://www.tumblr.com/api/write"

class Tumblr(object):

    def __init__(self, email, password):
        self.email = email
        self.password = password

    def write_regular(self, title, body):
        params = urllib.urlencode({"email": self.email,
                                   "password": self.password,
                                   "type":"regular",
                                   "title":title.encode("UTF-8"),
                                   "body": body.encode("UTF-8")})
        try:
            urllib2.urlopen(post_regular_url, params)
        except urllib2.HTTPError:
            pass # めんどくさいからパス


import sys
from email import Header, Parser

user = "" # 自分の携帯メールアドレス
tumblr_email = ""
tumblr_password = ""

mailstr = sys.stdin.read()
parser = Parser.Parser()
message = parser.parsestr(mailstr)

from_addr = message.get("from")
if not user in from_addr: sys.exit(0) # 気休め程度にチェック

subject_data = Header.decode_header(message.get("subject"))
subject_strings = []
for str, charset in subject_data:
    if charset:
        str = unicode(str, charset)
    subject_strings.append(str)
subject = "".join(subject_strings)
body_charset = "iso-2022-jp" # 手抜き
body = unicode(message.get_payload(), body_charset)

tumblr = Tumblr(email=tumblr_email, password=tumblr_password)
tumblr.write_regular(subject, body)

1ファイルにまとめちゃった。
当然ながら中継アドレスも他人に知られてはいけない。

なんか成功のステータスが201の仕様でHTTPErrorってことになってしまう。