三步轻松打造微信聊天机器人(附源码)

摘要:
最近,微信公众平台的发展很受欢迎,我也和冯做了一个陪伴公众号。然而,尽管遵循了这一趋势,我们也应该反映出一些差异。我搜索了一个英语聊天机器人的网站:http://www.pandorabots.com/pandora/talk?这只是三个简单的步骤。不过,在这样做之前,你最好了解微信消息的沟通过程。这个html代码非常简单。最后一行是可以提取的对话内容。

    最近微信公众平台开发是热门,我也跟风做了一个陪聊的公众号。

      其实类似的自动回话程序早就有了,比如前一阵很火的小黄鸡(还是小黄鸭来着?)。但尽管是跟风,也要体现一些不同。别人做的都是中文陪聊,咱就来做个英语陪聊。

      不管是中文还是英文,做起来都一样,都是利用网络上的接口。或者你也可以试着自己开发一个陪聊程序。

      随便在网上搜了一个英语聊天机器人的网址:http://www.pandorabots.com/pandora/talk?botid=f5d922d97e345aa1   咱们就利用这个网址来做微信公众平台。只需简单三步便轻松搞定。不过在此之前你最好先了解一点微信消息的通信过程。

第一步:处理用户发来的消息

 三步轻松打造微信聊天机器人(附源码)第1张

      如图,微信服务器将用户发来的消息以这种形式发给你的服务器,首先你要对这段xml进行处理,提取出用户发送的消息,也就是<Content></Content>中的内容,很简单,用到的是System.Xml类。

第二步:将消息POST到上述网址,获取返回的消息

     得到用户发来的消息之后,将它POST到上述网址之后,得到的是网站返回的html代码,如下图:

复制代码
 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
 2 <HTML><HEAD>
 3 <style type="text/css">
 4 @import "http://alicebot.org/all.css"; 
 5 <!-- liberally borrowed style from http://glish.com/css/7.asp -->
 6 </style>
 7 <SCRIPT>
 8 <!--
 9 function sf(){document.f.input.focus();}
10 // -->
11 </SCRIPT>
12 </HEAD>
13 <BODY lang="en-US" bgColor="#AAAAAA" onload="sf()">
14 
15 
16 <b>
17 
18 A.L.I.C.E. and  judge
19 </b>
20 <br/><br/>
21 
22 <b>You said:</b> What's the weather today<br/>
23 <b>A.L.I.C.E.:</b> Cloudy.<br/>
24 
25 <br/>
26 <form name="f" action="" method="post">
27 <input type="hidden" name="botcust2" value="9b25a3b2de04bab2"> 
28 <P><font face="arial"><b>You say:</b></font> 
29 <!--
30 <input type="text" size="60" name="input" x-webkit-speech />
31 -->
32 <input type="text" size="60" name="input"/> 
33 <input type="submit" value="Say"/>
34 </P>
35 </form>
36  
37 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
38 <em>
39 <a href="http://alicebot.org/join.html" target="_new">
40 Listen to two bots talking to each other!
41 </a>
42 </em>
43 
44 <HR/>
45 <b>Conversation Log:</b>
46 <br/> 
47              <br>  judge:  What's the weather today <br>  ALICE:  Cloudy.
复制代码

     你需要处理这段html,从中找出要回给用户的内容。对于这段html代码来说很简单,最后一行就是对话内容,将它提取出来即可。

整个过程代码如下:

复制代码
 1         public static string Chat(string s)
 2         {
 3             string result = string.Empty;
 4             try
 5             {
 6               string padata = "botcust2=8eb5abf08e04e9fc&input=" + s;
 7               string url = "http://sheepridge.pandorabots.com/pandora/talk?botid=b69b8d517e345aba&skin=custom_input";//请求登录的URL
 8               byte[] byteArray = Encoding.UTF8.GetBytes(padata); // 转化
 9               HttpWebRequest webRequest2 = (HttpWebRequest)WebRequest.Create(url);  //新建一个WebRequest对象用来请求或者响应url
10               webRequest2.Referer = "http://sheepridge.pandorabots.com/pandora/talk?botid=b69b8d517e345aba&skin=custom_input";
11               webRequest2.Method = "POST";                                          //请求方式是POST
12               webRequest2.ContentType = "application/x-www-form-urlencoded";       //请求的内容格式为application/x-www-form-urlencoded
13               webRequest2.ContentLength = byteArray.Length;
14 
15               Stream newStream = webRequest2.GetRequestStream();           //返回用于将数据写入 Internet 资源的 Stream。
16             
17 newStream.Write(byteArray, 0, byteArray.Length); //写入参数 18 newStream.Close(); 19 HttpWebResponse response2 = (HttpWebResponse)webRequest2.GetResponse(); 20 StreamReader sr = new StreamReader(response2.GetResponseStream(), Encoding.Default); 21 string text = sr.ReadToEnd(); 22 result = text.Substring(text.LastIndexOf(':') + 3); 23 } 24 catch(Exception ex) 25 { 26 WriteLog(ex.Message); 27 } 28 return result; 29 }
复制代码

第三步:将消息包装后发送

三步轻松打造微信聊天机器人(附源码)第6张      与接收到的消息类似,你需要将消息包装成上图的xml格式发回给微信服务器,用户便能够收到。

     到这里,聊天机器人就做好了。咱们来看看效果:

三步轻松打造微信聊天机器人(附源码)第7张

     才疏学浅,不足之处请大家多多指正。我的第一篇博客,希望大家多多支持。

     这个是公众号,有兴趣的朋友可以去聊几句哦。

三步轻松打造微信聊天机器人(附源码)第8张

免责声明:文章转载自《三步轻松打造微信聊天机器人(附源码)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇svg.js教程及使用手册详解(一)oracle-查询执行速度慢的sql下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

深入浅出Node.js(上)

(一):什么是Node.js Node.js从2009年诞生至今,已经发展了两年有余,其成长的速度有目共睹。从在github的访问量超过Rails,到去年底Node.jsS创始人Ryan Dalh加盟Joyent获得企业资助,再到今年发布Windows移植版本,Node.js的前景获得了技术社区的肯定。InfoQ一直在关注Node.js的发展,在今年的两次...

Android 实现异步加载图片

麦洛开通博客以来,有一段时间没有更新博文了.主要是麦洛这段时间因项目开发实在太忙了.今天周六还在公司加班,苦逼程序猿都是这样生活的. 今天在做项目的时候,有一个实现异步加载图片的功能,虽然比较简单但还是记录一下吧.因为麦洛之前实现异步加载图片都是使用了AsynTask这个API,继续这个类,实现起来非常简单也很方便.在doInBackground()方法里...

android: 记录app运行过程中产生的log

有时在解决问题时,经常需要借助logcat才能分析定位问题,这里写了一个小工具,能够记录app运行期间的log, 这样测试人员在反馈bug时,只需要把logcat发给我们就可以了。具体代码如下: import android.content.Context; import android.content.Intent; import android.net...

Java编程:根据给定的日期,计算两个日期之间的时间差

计算两个Date之间的时间差,基本思路为把Date转换为ms(微秒),然后计算两个微秒时间差。 时间的兑换规则如下: 1s秒 = 1000ms毫秒 1min分种 = 60s秒 1hours小时 = 60min分钟 1day天 = 24hours小时   package com.qiyadeng.date; import java.text.SimpleDa...

ClickHouse学习系列之五【系统库system说明】

背景   之前介绍过ClickHouse相关的系列文章,现在ClickHouse已经能正常使用起来了,包括副本和分片。因为ClickHouse已经可以提供服务了,现在需要关心的就是服务期间该数据库的各项性能指标的情况,如CPU、内存、查询等等。其实在安装完ClickHouse之后,有个内置的数据库system,该库下保存了很多需要的信息,类似于MySQL中...

40.lombok在IntelliJ IDEA下的使用

转自:https://www.cnblogs.com/yjmyzz/p/lombok-with-intellij-idea.html lombok是一款可以精减java代码、提升开发人员生产效率的辅助工具,利用注解在编译期自动生成setter/getter/toString()/constructor之类的代码。代码越少,意味着出bug的可能性越低。 官...