C# QQ机器人(自动应答) (基于WebQQ)
来源:互联网 发布:js 投放联盟广告代码 编辑:程序博客网 时间:2024/05/22 09:49
QQ机器人,作用 不大,意义却不小 。此次采用轻处理方式实现,不设计QQ协议以及什么登陆加密方式等等问题研究。从web版QQ切入。
整个设计思路:用c#的webbrowser控件加载web QQ,以webQQ正常的登陆方式登陆,登陆以后,检测收到的信息(好友信息、QQ群信息)加以分析(包括分词技术),做出应答对策(搜索 特定应答库或其它网络资源)
下面是核心技术要点:
1、WebBrowser 控件
用这个控件加载http://w.qq.com/这个地址时,发现网页根本 打不开,出现版本提示
解决 办法:在Navigate这个地址前面 加个版本控制 的方法
WebBrowserVersionEmulation(); webBrowser1.Navigate("http://w.qq.com/");
WebBrowserVersionEmulation方法的具体内容如下:
private static void WebBrowserVersionEmulation() { const string BROWSER_EMULATION_KEY = @"Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION"; String appname = Process.GetCurrentProcess().ProcessName + ".exe"; // Webpages are displayed in IE9 Standards mode, regardless of the !DOCTYPE directive. const int browserEmulationMode = 9999; RegistryKey browserEmulationKey = Registry.CurrentUser.OpenSubKey(BROWSER_EMULATION_KEY, RegistryKeyPermissionCheck.ReadWriteSubTree) ?? Registry.CurrentUser.CreateSubKey(BROWSER_EMULATION_KEY); if (browserEmulationKey != null) { browserEmulationKey.SetValue(appname, browserEmulationMode, RegistryValueKind.DWord); browserEmulationKey.Close(); } }
对于winform程序来说,复杂操作通常需要使用多线程解决界面卡死的问题,但是比多线程更简便的方式是Application.DoEvents()
while(true) { //getMsg();耗时很长的操作 Application.DoEvents(); }
2、使用HtmlAgilityPack解析网页源码,获取消息
public void getMsg() { string html = webBrowser1.Document.Body.InnerHtml; HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); doc.LoadHtml(html); HtmlNode chatdiv = doc.GetElementbyId("panelBody-5"); if (chatdiv != null) { HtmlNodeCollection list = chatdiv.SelectNodes("//div[@class='chat_content_group buddy ']"); if (list != null) { string nickname = list[list.Count - 1].ChildNodes[3].InnerText.Trim(); string saywords = list[list.Count - 1].ChildNodes[5].InnerText.Trim(); if (nickname != up_nickname || saywords != up_saywords) { this.Text = nickname + " 说:" + saywords; up_nickname = nickname; up_saywords = saywords; string msg = GetMsg(nickname, saywords); if (msg.Trim() != "") { sendMsg(msg); } } } } }
3、Lucene.Net +盘古分词
public List<string> getFC(string txt) { Analyzer analyzer = new PanGuAnalyzer(); TokenStream ts = analyzer.TokenStream("",new StringReader(txt) ); List<string> wordlist=new List<string> (); Lucene.Net.Analysis.Token token = null; while ( (token=ts.Next() ) != null) { if (token.TermText().Length > 1) { wordlist.Add(token.TermText()); } } return wordlist; }
4、将接收到的QQ消息进行分词处理 ,对分词结果进行分析 ,得到相应 的应答内容,模拟发送消息。
public void sendMsg(string msg) { webBrowser1.Document.GetElementById("chat_textarea").InnerText =msg; webBrowser1.Document.GetElementById("send_chat_btn").InvokeMember("click"); }
0 0
- C# QQ机器人(自动应答) (基于WebQQ)
- C# WebQQ协议群发机器人(一)
- C# WebQQ协议群发机器人(二)
- C# WebQQ协议群发机器人(三)
- qqbot机器人 自动聊天应答 群聊
- webQQ迷你版协议(基于http://w.qq.com)
- QQ邮箱中的WebQQ
- 几天没事,写了个基于WEBQQ协议的机器人。开源喔。
- webQQ机器人(代码包括类)
- 利用webQQ实现聊天机器人。。
- 小黄鸡QQ空间自动回复机器人
- QBot:基于SmartQQ协议的QQ机器人
- 2013年7月做的一个自动应答机器人的架构
- WebQQ qq登陆 错误代码说明
- WebQQ分析|qq登陆|--不断更新
- QQ机器人
- QQ机器人
- SQL邮件自动应答
- Lintcode乱序字符串(时间过长)
- sql语句多表查询实例
- JS代码复用模式(继承,混合等)
- ubuntu网络设置
- Linux系统环境编程(系统当前时间)
- C# QQ机器人(自动应答) (基于WebQQ)
- 学习方法的思考之:“提高学习成绩的七大环节”
- C#的装箱拆箱
- code工具之git
- Ubuntu磁盘分区以及双系统启动顺序修改
- Android Studio系列教程一--下载与安装
- Scala学习笔记--Mainfest,ClassTag原理浅析
- Eclipse代码自动提示设置
- 位图法统计活跃用户