All pastes #86763 Raw Edit

Mine

public text v1 · immutable
·published 2006-07-13 05:59 UTC
rendered paste body
# -*- coding: utf-8 -*-

from httplib import HTTPConnection
from urllib import urlencode
from BeautifulSoup import BeautifulSoup
from Tkinter import *
import re

TRANS_GATE_URL = 'http://www.gojapan.com/translation/transmsg.php'
TRANS_REFERER = 'http://www.gojapan.com/translation/minitrans.html'

YOMI_GATE_URL = 'http://www.hiragana.jp/cgi-bin/trans2.cgi'
YOMI_REFERER = 'http://www.hiragana.jp/reading/query.php'

_COMMON_HEADERS = {
    'Accept'         : 'image/gif, image/x-xbitmap, image/jpeg, ' 
                       'image/pjpeg, application/vnd.ms-powerpoint, ' 
                       'application/vnd.ms-excel, application/msword, */*', 
    'Content-Type'   : 'application/x-www-form-urlencoded', 
    'Accept-Encoding': 'gzip, deflate', 
    'User-Agent'     : 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)', 
    'Cache-Control'  : 'no-cache', 
    'Connection'     : 'keep-alive', 
}

class App:
    def selectall(self, event=None):
        wz = event.widget


    def __init__(self, master):  # 생성자
        # 입력창
        frame1 = Frame(master)
        frame1.pack()
        self.scroll1 = Scrollbar(frame1)
        self.scroll1.pack(side=RIGHT, fill=Y)
        self.edit = Text(frame1, font="Arial 12", yscrollcommand=self.scroll1.set)
        self.edit.bind('<Control-a>', self.selectall)
        self.scroll1.config(command=self.edit.yview)
        self.edit.pack()

        # &#44592;&#45733;&#48260;&#53948;
        frame2 = Frame(master)
        frame2.pack()
        ## &#48264;&#50669;&#48260;&#53948;
        self.btnTranslate = Button(frame2, text=u'&#48264;&#50669;', command=self.doTranslate)
        self.btnTranslate.pack(side=LEFT)
        ## &#50836;&#48120;&#44032;&#45208;&#48260;&#53948;
        self.btnYomigana = Button(frame2, text=u'&#50836;&#48120;&#44032;&#45208;', command=self.doRuby)
        self.btnYomigana.pack(side=LEFT)

        # &#52636;&#47141;&#52285;
        frame3 = Frame(master)
        frame3.pack()
        self.scroll2 = Scrollbar(frame3)
        self.scroll2.pack(side=RIGHT, fill=Y)
        self.result = Text(frame3, font="Arial 12", yscrollcommand=self.scroll2.set)
        self.result.bind('<Control-a>', self.selectall)
        self.scroll2.config(command=self.result.yview)
        self.result.pack()

    def doTranslate(self):
        src = self.edit.get(1.0,END)
        self.result.delete(1.0, END)
        self.result.insert(INSERT,translate(src))

    def doRuby(self):
        src = self.edit.get(1.0,END).decode('utf-8','ignore')
        result = yomigana(src)
        self.result.delete(1.0, END)
        self.result.insert(INSERT, result)
        ## &#50836;&#48120;&#44032;&#45208;&#50640; &#49353;&#49345;&#51077;&#55176;&#44592;
        idx = 0
        ln = 0
        for line in result.splitlines():
            ln = ln + 1
            for pair in [(x.start(),x.end()) for x in re.finditer('\([^\)]*\)',unicode(line), re.UNICODE)]:
                idx = idx + 1
                self.result.tag_add('huri%s' % idx, '%s.%s' % (ln,pair[0]), '%s.%s' % (ln,pair[1]))
                self.result.tag_config('huri%s' % idx, foreground="red")

def translate(msg):
    result = httppost(
        TRANS_GATE_URL,
        {'data': msg.encode('utf-8')},
        {'Referer': TRANS_REFERER}
    )
    return result['content']

def yomigana(msg):
    result = httppost(
        YOMI_GATE_URL,
        {'html': '1', 'body': msg.encode('euc-jp','ignore')},
        {'Referer': YOMI_REFERER}
    )
    soup = BeautifulSoup(result['content'])
    return cleartag(''.join(map(str,soup('body')[0].contents)).replace('&lt;','<').replace('&gt;','>'))

def httppost(url, data={}, headers={}):
    protocol, host, uri = re.findall('^(https?://)([^/]+)(.*)$',url)[0]

    arr = headers.items()
    arr.extend([('Host',host)])
    arr.extend(_COMMON_HEADERS.items())
    headers = dict(arr)

    conn = HTTPConnection(host, 80)
    conn.request('POST', uri, urlencode(data), headers)
    resp = conn.getresponse()
    return {'header': dict(resp.getheaders()), 'content': resp.read()}

def cleartag(msg):
    return re.sub('<[^>]+>', '', msg.replace('<br[ /]*>','\n'))

if __name__ == '__main__':
    root = Tk()
    app = App(root)
    root.mainloop()