つらねの日記

プログラムの進捗やゲームをプレイした感想などを書き連ねる日記。

python で excite 翻訳をしてみた。改

前置き

turanegaku.hateblo.jp

以前 python で excite 翻訳を試みたが、さすがに英語翻訳だけでは耐えられず、
相互翻訳機能を付けたものを基本的に使っていた。(とはいえ 翻訳したいときというのは調べ物をしているときなので cygwin よりも、translate.google.com の方が瞬時に開けたので使う機会で言えば後者の方が多かった気もするが)

しかしながら当時はaliasをはったとはいえ、いちいち実行してから変換語句を入力する点、
オプションとして-jをつけたら日本語、-eをつけたら英語としていた点において面倒極まりなかった。

それを気が向いたので改良した。

こんな感じ。
f:id:turane_gaku:20150707044933p:plain

二航戦を正しく翻訳してくれないらしい。コレクトのスペルを完全に度忘れしてしまったのは気のせいだと思う。

excitrans.py
from optparse import OptionParser
import urllib, urllib2
import re

url = "http://www.excite.co.jp/world/"

def trans(s):
	wb_lp = 'ENJA'

	if isinstance(s, str):
		s = unicode(s, "utf-8")
	for c in s:
		if ord(c) > 255:
			wb_lp = 'JAEN'
			break
	s = s.encode("utf-8")

	values = {
		'before' : s,
		'wb_lp' : wb_lp
	}

	data = urllib.urlencode(values)
	req = urllib2.Request(url, data)
	req.add_header("User-Agent", "Mozilla/5.0")

	try:
		response = urllib2.urlopen(req)
	except urllib2.HTTPError, e:
		e.code, e.msg
		exit()
	except urllib2.URLError, e:
		print e.reason
		exit()

	html = response.read()

	m = re.search(r'<textarea id="after".*?name="after">(.+?)</textarea>', html)
	return m.group(1)


if __name__ == '__main__':
	(options, args) = OptionParser().parse_args()

	print trans(' '.join(args))

感想

オプションを使うためにoptparseを導入したが、最終的にオプションを全く使わない展開になったため、sys.argv でよかったかもしれない。

python を触り初めたころはわけがわからないつらいと思っていたが、最近は最高に神と思えるようになってきたので今後も積極的に使っていきたい。