基于QQ云输入法,用python实现的输入法(demo 版)
2011-12-25 16:58
791 查看
#!/bin/env python # -*- coding:utf-8 -*- # 基于QQ云输入法,用python实现的输入法 (demo版) # by jinxing 2011-12-25 """ QQ云输入法调用说明 1.获取一个 key URL: http://ime.qq.com/fcgi-bin/getkey?cb=PIME.keyback 将返回如下内容: 参数说明: cb=PIME.keyback 回调函数名 返回内容: PIME.keyback({"key":"9850f1051db25a1528883048c58cbe0c","ret":"suc"}) key 用于以后的输入法请求中 ret suc,成功 2.利用开放接口解析输入 URL(五笔输入法): http://ime.qq.com/fcgi-bin/gwb?key=9850f1051db25a1528883048c58cbe0c&cb=window.QQWebIME.callback885&q=w&p=1&pg=5 参数说明: key 之前获取到的key cb 回调函数 q 查询的字符串 p 当前为查询字符口串的第几页候选字,可不设置,默认为1 pg 每页显示多少候选字,可不设置,默认为5,且仅支持 5、9 两个值,其他值按5处理 返回内容: window.QQWebIME.callback885({"is_end":"0","md":"1","p":"1","pg":"5","q":"w","ret":"suc","rs":["人","八","但","你","从","个","会","他","他们","公司"],"rsc":["","","jg","q","w","h","f","b","bwu","cng"],"rscnt":"10"}) is_end 是否为最后一页 md (只有五笔输入法有些值返回,md=1,表示是使用五笔输入法?) p 第几页(同请求中的参数) pg 一页应该显示多少个候选字(同请求中的参数) q 查询的字符串(同请求中的参数) ret suc,成功 rs 返回的候选字列表,如果pg为5,该值一般会是10,如果pg为9,该值一般为9 rsc 对应 rs 中要输出某个候选字还应输入的字符(如:要直接输出"但",对比发现你还应该输入jg(五笔输入法)) rscnt 返回的rs的数量 URL(拼音输入法): http://ime.qq.com/fcgi-bin/getword?key=9850f1051db25a1528883048c58cbe0c&cb=window.QQWebIME.callback885&q=c 参数说明: 同五笔输入法 返回内容: window.QQWebIME.callback885({"is_end":"0","p":"1","pg":"5","q":"c","ret":"suc","rs":["才","错","次","从","草","菜","猜","擦","踩","惨","存","村","操","此","词","层","催","藏","凑","粗"],"rscnt":"20","rsn":["1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1"]}) """ #""" #import urllib,urllib2 from urllib2 import urlopen import sys,os class PIME(object): @staticmethod def keyback(kw): if kw.get('ret',None) != 'suc': raise '获取 key 出错:' + str(kw) else : return kw.get('key',None) @staticmethod def queryback(kw): ## 查询回调函数,只负责返回字典对象交由 parse_ret 处理 return kw #IME 输入法,wb 五笔,py 拼音 # pg,一页显示多少字 # callback 回调函数名 def __init__(self,IME='wb',pg=5,callback='PIME.queryback'): self.pg=pg self.callback=callback self.key=self.getKey() if IME == 'wb': self.URLpre='http://ime.qq.com/fcgi-bin/gwb?' + self.key else : self.URLpre='http://ime.qq.com/fcgi-bin/getword?' + self.key # 获取 key def getKey(self): fb=urlopen('http://ime.qq.com/fcgi-bin/getkey?cb=PIME.keyback') return eval(fb.read()) # p,查询第几页 def sQuery(self,q=None,p=1): if not q: return None #elif self.retJSON.get('q',None) == q and int(self.retJSON['rscnt']) >= (pg * p): #print int(self.retJSON['rscnt']) , (pg*p) #print '############ got it' ## #debug #self.retJSON['p']=p # return self.parse_ret(self.retJSON) else : qurl=[] ## self.URLpre='http://ime.qq.com/fcgi-bin/gwb?key=9850f1051db25a1528883048c58cbe0c' qurl.append(self.URLpre) qurl.append('cb='+str(self.callback)) qurl.append('pg='+str(self.pg)) qurl.append('p='+str(p)) qurl.append('q='+str(q)) qurl='&'.join(qurl) try: fb=urlopen(qurl) self.retJSON=eval(fb.read()) except: import traceback traceback.print_exc() return None #print self.retJSON ## #debug return self.parse_ret(self.retJSON) def parse_ret(self,kw): if kw.get('ret',None) != 'suc': return '查询出错:' + str(kw.get('ret',None)) is_end=int(kw.get('is_end',0)) p=int(kw.get('p',0)) pg=int(kw.get('pg',0)) rscnt=int(kw.get('rscnt',0)) md=int(kw.get('md',0)) rs=kw.get('rs','') rsc=kw.get('rsc','') #for index,val in enumerate(rs): retList=[] if md == 1: ## 五笔输入法 for index in xrange(0, pg): if index >= rscnt : break retList.append((rs[index],rsc[index])) else: for index in xrange(0, pg): if index >= rscnt : break retList.append((rs[index],'')) return retList def lPrint(list): if type(list) != type([]): return None for val in list: print val[0]+','+val[1], print ',', def main(): wubi = PIME('py') #lPrint(wubi.sQuery('jkr')) #lPrint(wubi.sQuery('jkr',3)) while True: qs=sys.stdin.readline() qs=qs.strip('\n') if qs == '/exit': break for i in xrange(1,3): lPrint(wubi.sQuery(qs,i)) print '' if __name__ =='__main__': main()
执行效果:
相关文章推荐
- python基于protobu+websocket+tornado实现多种二进制协议消息的接收发送和解析demo
- 基于Tensorflow+Python实现降噪自动编码器(DAE)
- 基于python的scikit-learn库实现决策树、贝叶斯、K近邻
- python基于xmlrpc实现二进制文件传输的方法
- 基于Visual C++实现输入法拦截
- 在安卓下控制基于树莓派的小车 皆用python实现
- Photoshop中磁力套索的一种简陋实现(基于Python)
- Python基于更相减损术实现求解最大公约数的方法
- Python基于QRCode实现生成二维码的方法【下载,安装,调用等】
- Python之——实现自动抢火车票(基于Python3.6+splinter)
- 基于Tkinter用50行Python代码实现简易计算器
- 基于python的Tkinter实现一个简易计算器
- 中文分词的python实现-基于HMM算法
- 基于 canvas 实现的一个截图小 demo
- Python基于select实现的socket服务器
- 基于Python、PyQuery实现的一个网络爬虫实例
- 【知识发现】基于物品的协同过滤推荐算法python实现
- Python基于matplotlib实现绘制三维图形功能示例
- python基于selenium+PhantomJS实现搜索交互案例
- Python中的callable是基于什么样的机制实现的