2005
Apr
27th
昨日書いたgoodicライブラリを使って、メールを送ることでgoo辞書を引けるようにしてみる。なんでそんな回りくどいことをするかというと、これができたら携帯電話(確かに僕のはウィルコムだから携帯では(以下略))から辞書が引けるのです。と言っても、端末自体がそういう辞書機能を持ってるのもあるし、ある程度ウェブが参照できる端末だったら要らないかもですが。
さておきその方法。使い方としては、それぞれの引きたい辞書によって次のアドレスを宛先にします。
さておきその方法。使い方としては、それぞれの引きたい辞書によって次のアドレスを宛先にします。
英和: ej@matatabi.homeip.net 和英: je@matatabi.homeip.net 国語: jn@matatabi.homeip.netで、引きたい語をメールのサブジェクトにして、本文には何も書かないでメールを送信します。したら、辞書を引いた結果がメールで送られてくるというわけです。
これはまず、以下のようなスクリプトを用意します。
これを適当なところに適当な名前(例えば"/usr/local/bin/goodicmail.py")で保存して、実行属性をつけて保存します。
次にrootで"/etc/aliases"を編集して、
これで上記のアドレスにメールを送ることで、辞書引き結果のメールが返ってくるというわけです。
#/usr/bin/env python
# -*- coding: euc-jp -*-
import sys, re, smtplib, goodic
###
# リストの中から正規表現にマッチする部分を返す
###
def get_pat(pat, lines):
for line in lines:
m = pat.match(line)
if m:
return m.group(1).strip()
###
# 送られてきたメールからFromとSubjectを抜き取る
###
def parse_mail(recv_mail):
addr = ''
word = ''
addrpat = re.compile(r'^From:(.*?)$', re.IGNORECASE)
wordpat = re.compile(r'^Subject:(.*?)$', re.IGNORECASE)
addr = get_pat(addrpat, recv_mail)
word = get_pat(wordpat, recv_mail)
word = unicode(word, "euc-jp", "ignore")
return (addr, word)
###
# 辞書引きの結果をメールで送信
###
def send_mail(headword, meaning, addr):
headword = headword.encode("iso-2022-jp", "ignore")
meaning = meaning.encode("iso-2022-jp", "ignore")
msg = "From: dic@matatabi.homeip.net\r\n"
msg += "To: %s\r\n" % addr
msg += "Subject: %s\r\n\r\n" % headword
msg += "%s" % meaning
server = smtplib.SMTP("localhost")
server.sendmail("dic@matatabi.homeip.net", addr, msg)
server.quit()
###
# main
###
if __name__ == "__main__":
recv_mail = sys.stdin.readlines()
addr, word = parse_mail(recv_mail)
kind = sys.argv[1]
headword, meaning = goodic.search(kind, word)
send_mail(headword, meaning, addr)
これを適当なところに適当な名前(例えば"/usr/local/bin/goodicmail.py")で保存して、実行属性をつけて保存します。
次にrootで"/etc/aliases"を編集して、
ej: "| nkf -e | /usr/local/bin/goodicmail.py ej" je: "| nkf -e | /usr/local/bin/goodicmail.py je" jn: "| nkf -e | /usr/local/bin/goodicmail.py jn"を追加して、newaliasesコマンドを実行。
これで上記のアドレスにメールを送ることで、辞書引き結果のメールが返ってくるというわけです。
Posted by setomits at 08:38 |
Comments: 0