本文出处http://blog.csdn.net/zhujunxxxxx/ 如需转载请注明出处!

接着上一篇http://blog.csdn.net/zhujunxxxxx/article/details/38931287我讲的内容

假设有人须要源代码能够联系我 qq: 10588690。可是不是无偿提供,请大家理解。

上面实现的都是与群操作相关的

接下来是获取好友信息的方法

/// <summary>
/// 获取好友列表信息
/// </summary>
public void GetFriendList()
{
Dictionary<string, Object> r = new Dictionary<string, Object>();
r.Add("h", "hello");
r.Add("hash", this.hash);
r.Add("vfwebqq", this.vfwebqq);
Dictionary<string, Object> data = new Dictionary<string, Object>();
data.Add("r", JsonConvert.SerializeObject(r));
string postdata = Tool.MakePostData(data); HttpItem item = new HttpItem()
{
URL = "http://s.web2.qq.com/api/get_user_friends2",
Method = "POST",
IsToLower = false,
Timeout = 100000,
Postdata = postdata,
Host = HOST[1],
Referer = REFERER[1],
UserAgent = "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36",//用户的浏览器类型。版本号,操作系统 可选项有默认值
ContentType = "application/x-www-form-urlencoded",
ResultType = ResultType.String
};
HttpResult result = http.GetHtml(item);
JObject ret = (JObject)JsonConvert.DeserializeObject(result.Html);
JObject retjson = (JObject)ret["result"];
//有备注的好友
foreach (JToken jk in retjson["marknames"])
{
this.friendlist.Add(jk["uin"].ToString(), jk["markname"].ToString());
}
//无备注名的好友
foreach (JToken jk in retjson["info"])
{
if (!this.friendlist.ContainsKey(jk["uin"].ToString()))
this.friendlist.Add(jk["uin"].ToString(), jk["nick"].ToString());
}
}

这种方法能够获取到好友的信息,分为两部分一部分是有备注名的好友信息,一部分是无备注名的好友信息

把这部分信息保存下来以后实用

获取一个详细好友的信息(自己的信息也是通过这个获取)

 public void GetFriendInfo(string tuin)
{
string url = "http://s.web2.qq.com/api/get_friend_info2?tuin={$tuin}&verifysession=&code=&vfwebqq={$vfwebqq}&t=1402534798024";
url = url.Replace("{$vfwebqq}", vfwebqq);
url = url.Replace("{$tuin}", tuin); HttpItem item = new HttpItem()
{
URL = url,
Encoding = System.Text.Encoding.GetEncoding("utf-8"),
Method = "get",
IsToLower = false,
Timeout = 100000,
ReadWriteTimeout = 30000,
Host = HOST[1],
Referer = REFERER[1],
UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0",//用户的浏览器类型,版本号。操作系统 可选项有默认值
ContentType = "application/x-www-form-urlencoded",
ResultType = ResultType.String,
};
HttpResult result = http.GetHtml(item);
}

接下来是向某一个好友发送信息

public void SendPersonMsg(string tuin,string msg)
{
string style = "\"{content}\"";
string temp = "";
temp += style.Replace("{content}", msg) + ",";
temp = temp.Substring(0, temp.Length - 1);
Random rd = new Random();
int msg_id = (rd.Next(100000) + 100000);
string content = "[{$msg},\"\",[\"font\",{\"name\":\"宋体\",\"size\":\"10\",\"style\":[0,0,0],\"color\":\"000000\"}]]";
content = content.Replace("{$msg}", temp); Dictionary<string, Object> r = new Dictionary<string, Object>();
r.Add("to", tuin);
r.Add("face", 561);
r.Add("content", content);
r.Add("msg_id",msg_id);
r.Add("clientid", this.clientid);
r.Add("psessionid", this.psessionid);
Dictionary<string, Object> data = new Dictionary<string, Object>();
data.Add("r", JsonConvert.SerializeObject(r));
data.Add("clientid", this.clientid);
data.Add("psessionid", this.psessionid);
string postdata = Tool.MakePostData(data); HttpItem item = new HttpItem()
{
URL = "http://d.web2.qq.com/channel/send_buddy_msg2",
Accept = "*/*",
Method = "POST",
IsToLower = false,
KeepAlive = true,
Timeout = 100000,
Postdata = postdata,
Host = HOST[0],
Referer = REFERER[0],
UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2041.4 Safari/537.36",
ContentType = "application/x-www-form-urlencoded",
ResultType = ResultType.String
}; HttpResult result = http.GetHtml(item);
JObject ret = (JObject)JsonConvert.DeserializeObject(result.Html);
}

好了,这篇和上一篇文章就基本上实现了WebQQ的基本功能,

为了保持QQ一直在线我们比方一定时间向server发送心跳请求。心跳请求的返回值就是我们收到的消息。这个是非常重要的所以想对群消息进行处理的话都须要在这里处理它

 public void HeartBreak()
{
/*
Dictionary<string, Object> r = new Dictionary<string, Object>();
r.Add("clientid", this.clientid);
r.Add("psessionid", this.psessionid);
r.Add("key", 0);
r.Add("ids", "[]");
Dictionary<string, Object> data = new Dictionary<string, Object>();
data.Add("r", JsonConvert.SerializeObject(r));
data.Add("clientid", this.clientid);
data.Add("psessionid", this.psessionid);
string postdata2 = Tool.MakePostData(data);
*/
string postdata = "r=%7B%22clientid%22%3A%22{$clientid}%22%2C%22psessionid%22%3A%22{$psessionid}%22%2C%22key%22%3A0%2C%22ids%22%3A%5B%5D%7D&clientid={$clientid}&psessionid={$psessionid}";
postdata=postdata.Replace("{$clientid}",this.clientid);
postdata = postdata.Replace("{$psessionid}", this.psessionid);
HttpItem item = new HttpItem()
{
URL = "http://d.web2.qq.com/channel/poll2",
Method = "POST",
IsToLower = false,
Timeout = 100000,
Postdata = postdata,
Host = HOST[0],
Referer = REFERER[0],
UserAgent = "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36",//用户的浏览器类型。版本号,操作系统 可选项有默认值
ContentType = "application/x-www-form-urlencoded",
ResultType = ResultType.String
};
HttpResult result = http.GetHtml(item);
JObject ret = (JObject)JsonConvert.DeserializeObject(result.Html);
JObject retjson = (JObject)ret["result"][0];
if (retjson["poll_type"].ToString() == "group_message")
{
JObject msg = (JObject)retjson["value"];
ProcessMsg(msg);
}
Thread.Sleep(2000); }

在发送信息的上面另一些能够拓展的,比方图片等,我这一部分还没有研究,假设有谁做过的话希望分享一下咯

C# WebQQ协议群发机器人(二)的更多相关文章

  1. C# WebQQ协议群发机器人(一)

    原创性申明 本文地址 http://blog.csdn.net/zhujunxxxxx/article/details/38931287 转载的话请注明出处. 之前我也写过一篇使用python来实现的 ...

  2. 一步一步来做WebQQ机器人-(二)(第一次登陆)

    // 预计会有这些步骤,当然某些步骤可能会合并: 验证码 第一次登陆 第二次登陆 保持在线和接收消息 获取好友和群列表 发送消息 变成智能的(*゚∀゚*) webqq的登陆,分为2步,本文主要讲第一次 ...

  3. MingQQ v1.0高仿版开源了,使用WebQQ协议实现了QQ客户端基本的聊天功能...

    MingQQ v1.0高仿版开源了,使用WebQQ协议实现了QQ客户端基本的聊天功能... MingQQ目前支持的功能如下:1.支持普通方式登录.验证码方式登录.注销.保持在线.改变在线状态.2.支持 ...

  4. Robots协议(爬虫协议、机器人协议)

    Robots协议(也称为爬虫协议.机器人协议等)的全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓 ...

  5. webqq协议分析之~~~~登陆

    最近好几个新项目积一起了,比较忙,所以博客迟迟未更新,还请各位见谅!下面来继续分析webqq协议,本章将说明如何实现登陆 1:输入QQ号和密码登陆,检测HTTP请求url如下,这是第一次登陆 http ...

  6. 用Qt写了一个qq客户端,采用webqq协议,发出来和大家分享一下---大神请无视

    首先做以下声明: 本程序基于腾讯公司的webqq协议开发,所有相关版权归腾讯公司所有.此程序只用于技术交流和学习,不得用于其他方面. ---开发者:雨后星辰,转载请注明出处:http://www.cn ...

  7. http协议进阶(二)URL与资源

    一.URL的语法  URL是互联网资源的标准化名称 URL提供了一种定位互联网上任意资源的手段,但这些资源要通过不同方案(协议:比如http.ftp.smtp)来访问,因此URL语法会略有差异 大部分 ...

  8. http协议的补充二

    一,浏览器到服务器request 1.1,浏览器里面的内容 请求(浏览器->服务器) GET /day09/hello HTTP/1.1 Host: localhost:8080 User-Ag ...

  9. HTTP协议扫盲(二)HTTP协议的请求方法、请求头和响应头

    一.HTTP请求方法 Http协议定义了很多与服务器交互的方法,最基本的有4种,分别是GET,POST,PUT,DELETE. 一个URL地址用于描述一个网络上的资源,而HTTP中的GET, POST ...

随机推荐

  1. MyBatis输出执行的SQL到控制台

    src\main\resources\application.properties 或者src\main\resources\application.yml 在你的application.proper ...

  2. java中字符串比较==和equals

    1 总体来说java中字符串的比较是==比较引用,equals 比较值的做法.(equals 对于其他引用类型比较的是地址,这是因为object的equals方法比较的是引用),但是不同的声明方法字符 ...

  3. fastJson解析复杂对象时碰到的问题

    碰到map对象无法解析出来,发现问题是缺少有get/set方法,否则无法解析. 对象转json字符串 JSON.toJSONString(module) json字符串转对象(必须是pojo) mod ...

  4. asp.net的TextBox回车触发指定的按钮事件

    一;             event.returnValue = false;             document.all[button].click();         }    }   ...

  5. java8 Stream 笔记

    stream的定义:对一个源中的一系列元素进行聚合操作. 一系列元素:stream对一组有特定类型的元素提供了一个接口.但是stream并不真正存储元素,元素根据需求被计算出来. 源:stream可以 ...

  6. 关于HTTPS通信机制的笔记

    一次安全可靠的通信--HTTPS原理 转自:腾讯开放社区raphealguo文章

  7. 【Oracle】管理还原数据(undo)

    1. 查看undo相关参数 SYS@LGR> show parameter undo NAME TYPE VALUE ------------------------------------ - ...

  8. Websphere 手动模拟删除应用操作

    Websphere  手动模拟删除应用操作 切记:不要在程序还在运行的时候,直接的remove掉应用程序,不然,会发生意外的错误.       最近,在项目中,不小心手动移除了正在运行的应用,发现se ...

  9. spring中quatz的多定时任务配置图文详解

    近来公司让用quatz框架做定时功能,而且还是执行多定时任务,真是苦恼. 虽然从网上搜了很多资料,但是写法上不太尽如人意,最后还是请教了螃蟹大神,给的配置建议就是简单啊,现在拿来分享下: 这里我们需要 ...

  10. Online ML那点事>-

    一:译自wiki:    KeyWord:标签反馈; Survey: online machine learning is a model of induction that learns one i ...