python实现电子词典


Posted in Python onApril 23, 2020

本文实例为大家分享了python实现电子词典的具体代码,供大家参考,具体内容如下

# -*- coding: utf-8 -*-
#youdanTest.py
import urllib
import json
 
# 设置一个退出程序的出口
isOut = False
 
# 不断调用爬取翻译页面的功能
# 直到isOut被设置为True,退出程序
 
 
def query(keys):
 while True:
  if isOut == True:
   break
 
  # 假定用户输入“CloseMe”,则退出
  key = keys
  if key == "CloseMe":
   isOut = True
   continue # 回到循环开始处,然后结果条件满足退出
 
  # 做真正的查询操作
  url = "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=null"
 
  # 构造headers
  headers = {"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36",
     "X-Requested-With": "XMLHttpRequest",
     "Accept": "application/json, text/javascript, */*; q=0.01",
     "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8"
     }
 
  # 把form数据转规范化,然后post给服务端
  formdata = {
   "i": key,
   "from": "AUTO",
   "to": "AUTO",
   "smartresult": "dict",
   "client": "fanyideskweb",
   "salt": "1523933959290",
   "sign": "248f5d216c45a64c38a3dccac0f4600d",
   "doctype": "json",
   "version": "2.1",
   "keyfrom": "fanyi.web",
   "action": "FY_BY_REALTIME",
   "typoResult": "false"
  }
  data = bytes(urllib.parse.urlencode(
      formdata),
      encoding="utf-8")
  # 给服务器发送post请求
  req = urllib.request.Request(url,
          data,
          headers,
          method="POST")
  response = urllib.request.urlopen(req)
  info = response.read().decode("utf-8")
  jsonLoads = json.loads(info)
  return jsonLoads['translateResult'][0][0]["tgt"]

服务端

#!/usr/bin/python3
# coding=utf-8
 
 
from signal import *
from socket import *
import pymysql
from time import *
import sys
import os
from youdaoTest import query
 
def do_child(connfd, db):
 while True:
  msg = connfd.recv(128).decode()
  print("msg : ", msg)
 
 
  if msg[0] == 'R':
   do_register(connfd, msg, db)
 
 
  if msg[0] == 'L':
   do_login(connfd, msg, db)
 
 
  if msg[0] == 'Q':
   do_query(connfd, msg, db)
 
 
  if msg[0] == 'H':
   do_history(connfd, msg, db)
 
 
  if msg[0] == 'E':
   connfd.close()
   sys.exit(0)
 return
 
def do_register(connfd, msg, db):
 print("in register.......")
 cursor = db.cursor()
 s = msg.split(' ')
 name = s[1]
 passwd = s[2]
 
 
 sql = "select * from user where name = '%s'" % name
 cursor.execute(sql)
 data = cursor.fetchone()
 print(data)
 
 
 if data != None:
  connfd.send("FALL".encode())
  return
 
 
 sql = "insert into user values ('%s','%s')" % (name, passwd)
 
 
 try:
  cursor.execute(sql)
  db.commit()
  connfd.send('OK'.encode())
 except:
  connfd.send("FALL".encode())
  db.rollback()
  return
 else:
  print("register OK !")

 
def do_login(connfd, msg, db):
 print("in login.......")
 cursor = db.cursor()
 s = msg.split(' ')
 name = s[1]
 passwd = s[2]
 
 
 try:
  sql = "select * from user where name = '%s' and passwd = '%s'" % (
   name, passwd)
  cursor.execute(sql)
  data = cursor.fetchone()
  print(data)
 except:
  pass
 if data == None:
  connfd.send("FALL".encode())
 else:
  connfd.send('OK'.encode())
 return
 
def do_query(connfd, msg, db):
 print("in query.......")
 start = time()
 cursor = db.cursor()
 s = msg.split(' ')
 words = s[1]
 name = s[2]
 msg = query(words)
 connfd.send(msg.encode())
 insert_history(db, words, name)
 
def do_history(connfd, msg, db):
 print('in history...')
 s = msg.split(' ')
 name = s[1]
 cursor = db.cursor()
 sql = 'select * from history where name = "%s"' % name
 try:
  cursor.execute(sql)
  data = cursor.fetchall()
  connfd.send('OK'.encode())
 except:
  connfd.send('FALL'.encode())
 sleep(0.1)
 for msg in data:
  name = msg[0]
  word = msg[1]
  time = msg[2]
  sleep(0.01)
  connfd.send(('%s %s %s' % (name, word, time)).encode())
 sleep(0.1)
 connfd.send('over'.encode())
 
def insert_history(db, words, name):
 time = ctime()
 cursor = db.cursor()
 sql = 'insert into history values ("%s","%s","%s")' % (name, words, time)
 try:
  cursor.execute(sql)
  db.commit()
 except:
  print('into history failed')
  db.rollback()
 
def main():
 signal(SIGCHLD, SIG_IGN)
 db = pymysql.connect('localhost', 'root', '123456', 'dict')
 
 
 HOST = sys.argv[1]
 PORT = int(sys.argv[2])
 sockfd = socket()
 sockfd.bind((HOST, PORT))
 sockfd.listen(5)
 
 while True:
  try:
   connfd, addr = sockfd.accept()
   print("connect addr : ", addr)
  except KeyboardInterrupt:
   raise
  except:
   continue
 
  pid = os.fork()
  if pid < 0:
   print("create child process failed")
   connfd.close()
   continue
  elif pid == 0:
   sockfd.close()
   do_child(connfd, db)
  else:
   connfd.close()
   continue
 
 db.close()
 sockfd.close()
 sys.exit(0)
 
if __name__ == "__main__":
 main()

电子词典客户端

#!/usr/bin/python
# coding=utf-8
 
from signal import *
from socket import *
from time import *
import sys
import os
 
 
def do_register(sockfd, msg):
 name = input("input your user name >>")
 passwd = input("input your user passwd >>")
 msg = 'R %s %s' % (name, passwd)
 
 sockfd.send(msg.encode())
 msg = sockfd.recv(128).decode()
 
 if msg[0:2] == 'OK':
  return 0
 else:
  return -1
 
 
def do_login(sockfd, msg):
 name = input("input your user name >>")
 passwd = input("input your user passwd >>")
 msg = 'L %s %s' % (name, passwd)
 
 sockfd.send(msg.encode())
 msg = sockfd.recv(128).decode()
 
 if msg[0:2] == 'OK':
  return name
 else:
  return -1
 
 
def do_query(sockfd, msg, name):
 while True:
  word = input("input word >>")
 
  if word == '##':
   return
 
  msg = 'Q %s %s' % (word, name)
 
  sockfd.send(msg.encode())
  msg = sockfd.recv(128).decode()
 
  if msg[0:2] == 'OK':
   msg = sockfd.recv(1024).decode()
   if msg == " ":
    print("not found this word")
   print(msg)
   # elif msg[:11] == 'found error':
   #  print('found error')
   #  continue
 
  else:
   print("fail to query")
   continue
 
 
def do_history(sockfd, msg, name):
 
 msg = 'H %s' % name
 sockfd.send(msg.encode())
 msg = sockfd.recv(128).decode()
 
 if msg[0:2] == 'OK':
  while True:
   data = sockfd.recv(1024).decode()
   if data == 'over':
    break
 
   print(data)
 else:
  print("fail to history")
  return -1
 
 
def main():
 HOST = sys.argv[1]
 PORT = int(sys.argv[2])
 msg = None
 
 sockfd = socket()
 
 sockfd.connect((HOST, PORT))
 
 def login(name):
  while True:
   print('''
   ==========query commend=========
   ---1:查词 2:历史记录 3:退出---
   ================================
   ''')
   try:
    cmd = int(input("Input commend >> "))
   except:
    print("Input error!")
    continue
 
   if cmd not in [1, 2, 3]:
    print("input error!")
    sys.stdin.flush()
    continue
 
   if cmd == 1:
    do_query(sockfd, msg, name)
   if cmd == 2:
    do_history(sockfd, msg, name)
   if cmd == 3:
    break
  return
 
 while True:
  print('''
  =============Welcome=============
  ----1: 注册 2: 登陆 3: 退出----
  =================================
  ''')
  try:
   cmd = int(input("Input command >> "))
  except:
   print("Input error")
   continue
 
  if cmd not in [1, 2, 3]:
   print("input error!")
   sys.stdin.flush()
   continue
 
  if cmd == 1:
   if do_register(sockfd, msg) == 0:
    print("register OK!")
   else:
    print("register FALL")
  if cmd == 2:
   name = do_login(sockfd, msg)
   if name != -1:
    print("login OK!")
    login(name)
   else:
    print("register FALL")
  if cmd == 3:
   msg = 'E'
   sockfd.send(msg.encode())
   sockfd.close()
   sys.exit(0)
 
 
if __name__ == "__main__":
 main()

查词时将单词发送到网络上,从有道中查询出单词翻译再返回给客户端。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现删除文件但保留指定文件
Jun 21 Python
Python简单遍历字典及删除元素的方法
Sep 18 Python
go和python变量赋值遇到的一个问题
Aug 31 Python
有趣的python小程序分享
Dec 05 Python
使用Python实现windows下的抓包与解析
Jan 15 Python
PyQt5每天必学之弹出消息框
Apr 19 Python
在CMD命令行中运行python脚本的方法
May 12 Python
python多进程实现文件下载传输功能
Jul 28 Python
Python使用线程来接收串口数据的示例
Jul 02 Python
python交易记录链的实现过程详解
Jul 03 Python
Nginx+Uwsgi+Django 项目部署到服务器的思路详解
May 08 Python
python 安全地删除列表元素的方法
Mar 16 Python
python中cPickle用法例子分享
Jan 03 #Python
使用python获取CPU和内存信息的思路与实现(linux系统)
Jan 03 #Python
Python群发邮件实例代码
Jan 03 #Python
python切换hosts文件代码示例
Dec 31 #Python
使用Python进行稳定可靠的文件操作详解
Dec 31 #Python
python连接mongodb操作数据示例(mongodb数据库配置类)
Dec 31 #Python
python连接mysql数据库示例(做增删改操作)
Dec 31 #Python
You might like
PHP两种实现无级递归分类的方法
2017/03/02 PHP
js常见表单应用技巧
2008/01/09 Javascript
Javascript 鼠标移动上去小三角形滑块缓慢跟随效果
2013/04/26 Javascript
解决jquery中美元符号命名冲突问题
2014/01/08 Javascript
jQuery的$.proxy()应用示例介绍
2014/04/03 Javascript
浅谈javascript中字符串String与数组Array
2014/12/31 Javascript
jQuery性能优化技巧分析
2015/02/20 Javascript
浅谈JavaScript中的Math.atan()方法的使用
2015/06/14 Javascript
javascript数组去重小结
2016/03/07 Javascript
jQuery使用$.each遍历json数组的简单实现方法
2016/04/18 Javascript
Angularjs 实现一个幻灯片示例代码
2016/09/08 Javascript
layui获取多选框中的值方法
2018/08/15 Javascript
Koa日志中间件封装开发详解
2019/03/09 Javascript
微信小程序之onLaunch与onload异步问题详解
2019/03/28 Javascript
js时间戳转yyyy-MM-dd HH-mm-ss工具类详解
2019/04/30 Javascript
Vue.js实现大屏数字滚动翻转效果
2019/11/29 Javascript
微信小程序完美解决scroll-view高度自适应问题的方法
2020/08/08 Javascript
[01:05:56]2018DOTA2亚洲邀请赛3月29日 小组赛A组 Newbee VS VG
2018/03/30 DOTA
python搭建虚拟环境的步骤详解
2016/09/27 Python
Python实现的微信公众号群发图片与文本消息功能实例详解
2017/06/30 Python
Python3 实现随机生成一组不重复数并按行写入文件
2018/04/09 Python
解决pandas中读取中文名称的csv文件报错的问题
2018/07/04 Python
python读取excel指定列数据并写入到新的excel方法
2018/07/10 Python
使用matplotlib中scatter方法画散点图
2019/03/19 Python
selenium+python环境配置教程详解
2019/05/28 Python
django 扩展user用户字段inlines方式
2020/03/30 Python
如何通过命令行进入python
2020/07/06 Python
浅析Python 简单工厂模式和工厂方法模式的优缺点
2020/07/13 Python
将不规则的Python多维数组拉平到一维的方法实现
2021/01/11 Python
意大利独特而优质的家居用品:Fazzini
2018/12/05 全球购物
美国婴儿服装购物网站:Gerber Childrenswear
2020/05/06 全球购物
竞选学生会演讲稿
2014/04/25 职场文书
市场拓展计划书
2014/05/03 职场文书
暑期教师培训方案
2014/06/07 职场文书
2014年党员发展工作总结
2014/12/02 职场文书
导游词之寿县报恩寺
2020/01/19 职场文书