一个生词本的实现
我有一个习惯是在本地搭建一个HTTP服务器,然后建立一个index.html文件里面存储一些常用链接。然后在hosts里面添加一个 `127.0.0.1 gw` 映射。这样我只要输入gw:8080就可以跳到index.html页面(chrome还会存储历史记录,所以时间长了,只要键入gw就可以看到),非常方便。
然后为了方便查找单词,我通常会将chrome settings里面的默认搜索引擎设置成为“金山词霸”。这样如果有不懂单词的话,只要选中右键即可查询。
昨天突发奇想,为什么不将这些查询单词记录下来。以后可以定期复习这些单词,也算是学习单词的一种好办法。结合上面两个做法,一个idea很快就形成了。首先将默认搜索引擎切换到 `gw:8080` 上,我可以修改服务器代码,将查询单词记录下来,然后再交给金山词霸。看上去效果像是这样的。
首先修改默认搜索引擎到 `gw:8080` 上,分配一个固定的path.
然后选中右键点击就就是这样了
修改后的服务器代码如下,启动命令为 `python local_server.py 8080`. 代码是仿照SimpleHTTPServer.py写的,继承了它的Handler然后改写send_head方法。
#!/usr/bin/env python
#coding:utf-8
#Copyright (C) dirlt
import BaseHTTPServer
from SimpleHTTPServer import SimpleHTTPRequestHandler
import os
try:
from cStringIO import StringIO
except ImportError:
from StringIO import StringIO
import datetime
dict_prefix = '/dict?q='
redirect_page = """<meta http-equiv="refresh" content="0; url=http://www.iciba.com/%s/" />"""
home_path = os.environ['HOME']
dict_query_history = home_path + '/.dict_query_history.txt'
def hook_getcwd():
return home_path
os.getcwd = hook_getcwd
class CustomSimpleHTTPRequestHandler(SimpleHTTPRequestHandler):
def ack(self, page):
self.send_response(200)
self.send_header("Content-type", "text/html; charset=%s" % "UTF-8")
self.send_header("Content-Length", str(len(page)))
self.end_headers()
def send_head(self):
if self.path.startswith('/dict?q='):
query = self.path[len(dict_prefix):]
now = datetime.datetime.now()
date = now.strftime('%Y-%m-%d %H:%M:%S')
with open(dict_query_history, 'a') as fh:
fh.write(date + ' ' + query + '\n')
page = redirect_page % query
self.ack(page)
f = StringIO()
f.write(page)
f.seek(0)
return f
return SimpleHTTPRequestHandler.send_head(self)
def test(HandlerClass = CustomSimpleHTTPRequestHandler,
ServerClass = BaseHTTPServer.HTTPServer):
BaseHTTPServer.test(HandlerClass, ServerClass)
if __name__ == '__main__':
test()
最后会在~/.dict_query_history.txt里面存下查询单词记录. 除了查询单词之外,还会记录查询时间。