python写机器人程序_用Python写的一个多线程机器人聊天程序

本人是从事php开发的, 近来想通过php实现即时通讯(兼容windows)。后来发现实现起来特别麻烦, 就想到python。听说这家伙在什么地方都能发挥作用。所以想用python来做通讯模块。。。所以主要学习pythonn的多线程和tcp连接。

但是没有用过python, 所有在学习python的同时写个小小的程序 -》 和机器人聊天

本程序机器人由【图灵机器人 http://www.tuling123.com】提供, 把编写的例子发了出来供初学python的朋友们学习和熟悉。

注意:python版本必须为3.x +, 不兼容2.x版本的python

文件列表:

main_server.py: 服务端程序,用于接收客户端的信息, 并返回Jinko回答的话

# tcp server

import socket;

import time;

import threading;

from JinkoRobot import *;

#应用程序入口类

class ApplicationServer:

#构造函数初始化 socket

def __init__(self, host="localhost", port=8005):

self.connList = [];

self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM);

self.socket.bind((host, port));

self.socket.listen(100);

print("我是Jinko, 我来自[图灵机器人:http://www.tuling123.com]");

print("");

print("赶紧打开客户端和我聊天吧!");

self.accept();

#多线程接受用户请求

def accept(self):

while True:

connection, address = self.socket.accept();

# print('connect')

thread = ChatThread(connection);

thread.start();

#聊天线程

class ChatThread(threading.Thread):

def __init__(self, conn):

threading.Thread.__init__(self);

self.__connection = conn;

def run(self):

while True:

try:

recv = self.__connection.recv(8192);

except:

break;

# print("收到:" + recv.decode('utf-8'))

rebot = JinkoRobot();

rebot.listenFor(recv.decode('utf-8'));

answer = rebot.answer();

# print('say:' + answer)

self.__connection.send(answer.encode('utf-8'));

ApplicationServer();

main_client.py: 客户端程序, 用于和Jinko发起聊天

import socket;

import time;

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM);

print("正在和Jinko连线...");

sock.connect(('localhost', 8005));

print("");

while True:

speak = input("和Jinko说点什么:");

if speak == "quit":

break;

if speak == "":

continue;

# print("发送中..." + "("+ speak +")")

sock.send(speak.encode('utf-8'));

# print("已发送")

print("Jinko在思考...");

answer = sock.recv(8192);

print("Jinko回复你:" + answer.decode('utf-8'));

print("");

sock.close();

JinkoRobot.py: 它就是Jinko啦啦啦~~

#Jinko Robot

import json;

import urllib.request;

import urllib.parse;

class JinkoRobot:

__answer = '';

def __init__(self):

pass;

#倾听话语

def listenFor(self, string):

self.__answer = self.thinking(string);

# 思考着

def thinking(self, string):

says = urllib.parse.quote_plus(string);

f = urllib.request.urlopen("http://www.tuling123.com/openapi/api?key=4bc32d41c10be18627438ae45eb839ac&info=" + says);

json_str = f.read();

thinkdata = json.loads(json_str.decode('utf-8'));

f.close();

if(thinkdata['code'] > 40000 and thinkdata['code'] < 40010):

return "今天Jinko被你问得有点累了, 过会再问吧!";

if(thinkdata['code'] == 200000):

return thinkdata['text'] + ", 猛戳这里>>" + thinkdata['url'];

if(thinkdata['code'] == 302000) :

info = thinkdata['text'];

for content in thinkdata['list']:

info += "\n\n>" + content['article'] \

+ " 来源于" + content['source'] \

+ " 详细信息请猛戳这里>>" + content['detailurl'];

return info;

if(thinkdata['code'] == 305000):

info = thinkdata['text'];

for key in thinkdata['list']:

info += "\n\n>" + key + ": 车次>" + content['trainnum'] \

+ " 从" + content['start'] + "到" + content['terminal'] \

+ " 发车时间:" + content['starttime'] \

+ " 到达时间:" + content['endtime'] \

+ " 详细信息请猛戳这里>>" + content['detailurl'];

return info;

return thinkdata['text'];

#和你交流回答

def answer(self):

return self.__answer;

运行效果图:

最后我想说下, 我只是python的初学者,没啥python经验哈

我最近用Python写了一个算法,不需要写任何规则就能自动识别一个网页的内容

我最近用Python写了一个算法,不需要写任何规则就能自动识别一个网页的内容,目前测试了300多个新闻网站的新闻页,都能准确识别

用Python写了一个postgresql函数,感觉很爽

用Python写了一个postgresql函数,感觉很爽 CREATE LANGUAGE plpythonu; postgresql函数 CREATE OR REPLACE FUNCTION myfu ...

使用itchat实现一个微信机器人聊天回复功能

近看到好多群里都有一个@机器人的功能,挺有趣的,想自己也玩下,就通过百度一点点实现,在这总结一下整个从无到有的过程. 首先,要知道itchat,它是Python写的,所以想要实现这个机器人的功能,需要 ...

python写的一个集合

起因:原本打算用python写一个抢火车票的脚本.在那 期间遇见各种浏览器驱动失败的节奏....打算先缓一下 然后就去写集合了. 0x01 源码: # -*- coding:'utf-8' -*- # ...

试着用c写了一个多线程的同步

在Java中写多线程相关的程序简单很多,在多线程中需要同步的时候,使用synchronized就行了. 最近学习c的多线程与同步,感觉实现起来,要写的代码比较多一些,这也许是因为java封装的比较好吧 ...

python socket编程 实现简单p2p聊天程序

目标是写一个python的p2p聊天的项目,这里先说一下python socket的基础课程 一.Python Socket 基础课程 Socket就是套接字,作为BSD UNIX的进程通信机制,取后 ...

socket实例C语言:一个简单的聊天程序

我们老师让写一个简单的聊天软件,并且实现不同机子之间的通信,我用的是SOCKET编程.不废话多说了,先附上代码: 服务器端server.c #include #incl ...

使用Python写的第一个网络爬虫程序

今天尝试使用python写一个网络爬虫代码,主要是想訪问某个站点,从中选取感兴趣的信息,并将信息依照一定的格式保存早Excel中. 此代码中主要使用到了python的以下几个功能,因为对python不 ...

10分钟用Python告诉你两个机器人聊天能聊出什么火花

欲直接下载代码文件,关注我们的公众号哦!查看历史消息即可! 现在不是讲各种各样的人工智能嘛,AI下棋,AI客服,AI玩家--其实我一直很好奇,两个AI碰上会怎样,比如一起下棋,一起打游戏-- 今天做个 ...

随机推荐

PRINCE2风险模块

我们前几个节学习了PRINCE2七大主题的商业论证.组织.质量和计划,今天我们开展对于风险模块的讲解. 风险:目的是识别.评估和控制不确定性,从而提高项目的成功率.PRINCE2对风险登记册进行了详细 ...

sqlserver同步后在不重新初始化快照的情况下新增表

在已有事务复制中,时长需要新增表.索引,这些变更时不会同步到从库中.如果采用默认的设置,每次都需要重新初始化快照,从库重新应用快照和未执行的同步命令,这显然是无法在线上实践的方法.另一种 ...

&lpar;一&rpar;win7下cocos2d-x 21 &plus; vs2010

1.下载SDK http://cocos2d.cocoachina.com/download,我下载2.1版本,cocos2d-2.1rc0-x-2.1.2-hotfix.zip @ Apr.08, ...

MVC - 布局

布局类似于APSX视图的母版页 用的是Razor的语法 创建布局 布局页面默认放在Shared目录 有几个自动生成的cshtml文件 删除它们 然后创建一个视图 命名为MyLayOut 取消勾选使用母 ...

css-文本及其他

css7-文本和其他 text-align行内元素对齐方式,值为 左/中/右 对齐:left/right/center.test{text-align:cen ...

ArrayList与LinkedList时间复杂度之对比

package ArrayList; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections ...

getReadableDatabase 和 getWritableDatabase的区别

(1)getWritableDatabase()方法以读写方式打开数据库.一旦数据库的磁盘空间满了,数据库就只能读而不能写,此时用getWritableDatabase()打开数据库就会出错. (2) ...

Linux系统一些常用命令(持续增加)

这些命令什么的全是从网上找的,防止忘记,留下来备忘 1.linux服务器如何从另一台服务器拷东西:可以用scp命令scp user@remote.machine:/remote/path /local ...

2018&quot&semi;百度之星&quot&semi;程序设计大赛 - 资格赛hdu6349三原色(最小生成树)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6349 题目: 三原色图 Time Limit: 1500/1000 MS (Java/Others)  ...

golang string int int64转换

#string到int int,err:=strconv.Atoi(string) #string到int64 int64, err := strconv.ParseInt(string, 10, 6 ...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/259989.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[转] 前端中的MVC

MVC是一种设计模式&#xff0c;它将应用划分为3个部分&#xff1a;数据&#xff08;模型&#xff09;、展现层&#xff08;视图&#xff09;和用户交互&#xff08;控制器&#xff09;。其中&#xff1a; M - MODEL&#xff08;模型&#xff09; V - VIEW&#xff08;视图&…

ipoo3可以用鸿蒙,iqooneo3支持无线充电吗_iqooneo3可以无线充电吗

iqoo neo3在不高的价格上还保证了自己的品质&#xff0c;有很高的性能&#xff0c;很不错的屏幕。那么这款手机可以支持无线充电吗&#xff1f;小编为大家介绍关于iqoo neo3的充电方面。1.iqoo neo3可以支持无线充电吗iQOO Neo3 配备了 44W 超级闪充&#xff0c;属于小刀&#…

红帽Linux故障定位技术详解与实例(1)

红帽Linux故障定位技术详解与实例(1) 2011-09-28 14:26 圈儿 BEAREYES.COM 我要评论(0) 字号&#xff1a;T | T在线故障定位就是在故障发生时, 故障所处的操作系统环境仍然可以访问&#xff0c;故障处理人员可通过console, ssh等方式登录到操作系统上&#xff0c;在shell上执行…

u2020 华为_华为5G网管U2020常用MML命令(很实用)

激活小区ACT NRCELL:;ACT NRDUCELL:;去激活小区DEA NRCELL:;DEA NRDUCELL:;查询小区静态信息LST NRCELL:;LST NRDUCELL:;查询小区动态信息DSP NRCELL:;DSP NRDUCELL:;修改帧偏置MOD GNODEBPARAM:FRAMEOFFSET70728;修改子帧配比、时隙结构MOD NRDUCELL:NRDUCELLID0,DUPLEXMODECE…

Struts2中过滤器,拦截器,监听器他们之间有什么区别?

1、拦截器是基于java反射机制的&#xff0c;而过滤器是基于函数回调的。2、过滤器依赖与servlet容器&#xff0c;而拦截器不依赖与servlet容器。3、拦截器只能对Action请求起作用&#xff0c;而过滤器则可以对几乎所有请求起作用。4、拦截器可以访问Action上下文、值栈里的对象…

pdf在html中加载不出来,在网页中打开显示PDF

在这里呢&#xff0c;本站仅为大家讲解在网页中显示PDF文件的简单方法&#xff0c;注意&#xff0c;是简单方法&#xff0c;同时&#xff0c;本站已验证过如下的相关代码&#xff0c;测试已通过。当然&#xff0c;有的朋友可能会问&#xff0c;是否能达到像百度文库那样在网页中…

hikaril连接sql2000_hikari连接池解析(版本:HikariCP-2.5.1.jar)

maxLifetime参数maxLifetime参数必须小于数据库的time_wait,默认是1800000&#xff0c;即30分钟。如果设置为0&#xff0c;表示存活时间无限大。如果不等于0且小于30秒则会被重置回30分钟。HikariConfig类中有该参数的校验规则。HikariPool类中&#xff0c;当我们初始化连接池的…

app开发历程————Android程序解析服务器端的JSON格式数据,显示在界面上

上一篇文章写的是服务器端利用Servlet 返回JSON字符串&#xff0c;本文主要是利用android客户端访问服务器端链接&#xff0c;解析JSON格式数据&#xff0c;放到相应的位置上。 首先&#xff0c;android程序的布局文件main.xml 1 <LinearLayout xmlns:android"http://s…

Android IOS WebRTC 音视频开发总结(八十七)-- WebRTC中丢包重传NACK实现分析

Android IOS WebRTC 音视频开发总结&#xff08;八十七&#xff09;-- WebRTC中丢包重传NACK实现分析 本文主要介绍WebRTC中丢包重传NACK的实现&#xff0c;作者&#xff1a;weizhenwei &#xff0c;文章最早发表在编风网&#xff0c;微信ID&#xff1a;befoio 支持原创&#x…

如何去除TD之间的空隙

table{border-collapse:collapse;}转载于:https://www.cnblogs.com/passer1991/archive/2013/02/27/2935967.html

android切换到上个页面,Android 返回上一个界面刷新数据

有些界面需要返回上一个界面刷刷新数据,再此做个记录.首先startActivityForResult进行Actvity进行跳转,这是跳转前的界面.// 通过 startActivityForResult() 启动 ActivityBIntent intent new Intent(getActivity(), NoticeActivity.class);startActivityForResult(intent, 1)…

composer设置代理_composer 设置代理

Docker registry V2部署私有Docker Registry 搭建 Insecure Registry 修改Registry server上的Docker daemon的配置,为DOCKER_OPTS增加–insecure ...css中的position&colon;relative和absolute 属性语法: position : static | absolute | fixed | relative 取值: static :…

为网格布局图片打造的超炫 CSS 加载动画

今天&#xff0c;我想与大家分享一些专门为网格布局的图像制作的很酷的 CSS 加载动画效果。您可以把这些效果用在你的作品集&#xff0c;博客或任何你想要的网页中。设置很简单。我们使用了下面这些工具库来实现这个效果&#xff1a; Normalize.css 来替代传统的 CSS 复位&…

HTML多选框滚动条,《HTM单选.doc

《HTM单选1. 下面标记中&#xff0c;( )在标记的位置添加一个回车符。【选择一项】A. B. C. D. 2. 要实现以下功能&#xff1a;在网页中插入一个图片joke11.gif,使用者通过单击该图片&#xff0c;连接到joke11.htm上去。下面的HTML代码&#xff0c;( )是正确的。【选择一项】A…

python时间处理模块有哪些_Python模块之时间处理

time 模块>>> import time>>> dir(time)[__doc__, __name__, __package__, accept2dyear, altzone, asctime, clock, ctime, daylight, gmtime, localtime, mktime, sleep, strftime,strptime, struct_time, time, timezone, tzname]包含的变量:timezone -- …

wel

欢迎来到mathant.com 这个网站是什么 这个网站是我搭建在阿里云vps上的个人网站。目前的用途是充当个人博客和云存储&#xff0c;当然它的功能不止如此。我会在以后的日子里完善他&#xff0c;希望他能变得更好。目前我在主机上只搭建了这个个人博客和一个ftp服务器。这个网站采…

php 安装rabbitmq扩展无报错版

需要安装rabbitmq-c&#xff0c;rabbitmq-c是一个用于C语言的&#xff0c;与AMQP server进行交互的client库。下载了v0.5.2版本(https://github.com/alanxz/rabbitmq-c/releases/download/v0.5.2/rabbitmq-c-0.5.2.tar.gztar xvf rabbitmq-c-0.5.2.tarcd rabbitmq-c-0.5.2autor…

ImageMagick 打水印支持透明度设置

convert 35021021120924162418300.jpg DD.png -geometry 60002048 -compose dissolve -define compose:args50 -composite -quality 95 35021021120924162418300_res.jpg转载于:https://www.cnblogs.com/mfryf/archive/2013/03/04/2943209.html

spring mvc使用html页面,使用Spring MVC的纯HTML页面应用程序

在Spring MVC所有的请求经过FrontController - DispatcherServlet的有你需要告诉Spring allowe JSP和HTML都在你的情况例dispatcher-servlet.xml:xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns:p"http://www.springframework.org/schema/p"x…

python win+r时不成功_Win与R(不使用Anaconda的情况下)

配置R的路径信息&#xff1a;Path&#xff1a;添加R.dll的路径 如&#xff1a;E:\software\R\R-3.5.1\bin\x64R_HOME:R的安装路径 如&#xff1a;E:\software\R\R-3.5.1\binR_USER:R的使用路径 如&#xff1a;E:\software\R\R-3.5.1\bin\x64pip install rpy2在win下安装失败&am…