本文出处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. 基本的Mysql语句

    操作文件夹(库) 增 create database db1 charset utf8; 查 # 查看当前创建的数据库 show create database db1; # 查看所有的数据库 sho ...

  2. C# 常用代码片段

    一.从控制台读取东西代码片断: using System; class TestReadConsole { public static void Main() { Console.Write(Ente ...

  3. Hadoop MapReduce编程 API入门系列之二次排序(十六)

    不多说,直接上代码. -- ::, INFO [org.apache.hadoop.metrics.jvm.JvmMetrics] - Initializing JVM Metrics with pr ...

  4. 第5章分布式系统模式 在 .NET 中使用 DataSet 实现 Data Transfer Object

    要在 .NET Framework 中实现分布式应用程序.客户端应用程序需要显示一个窗体,该窗体要求对 ASP.NET Web Service 进行多个调用以满足单个用户请求.基于性能方面的考虑,我们 ...

  5. Codeforces Round #453

    Visiting a Friend Solution Coloring a Tree 自顶向下 Solution Hashing Trees 连续2层节点数都超过1时能异构 Solution GCD ...

  6. 安装android驱动解决device not found

    安装android驱动,解决device not found 0.1问题环境 windows10,android studio /eclipse,sdk ,jdk(其他windows也可用) 1.0  ...

  7. 获取 Windows Phone 的 User-Agent 字符串

    这个是简单介绍一下如何在wp开发中获取 Windows Phone 的 User-Agent 字符串,更多wp移动开发就去那个wp教程网吧.http://wp.662p.com 使用方法 public ...

  8. 谷歌C++编程为何禁止缺省参数

    C++的缺省参数尽量不要使用,结果可能出乎我们的意料,下面的程序大家看看输出结果是多少? )                  cout << num << endl;     ...

  9. Segment公司--整合数据进行分析

    YC毕业生Segment获得1500万美元A轮融资 现在收集数据是每一个公司的必修课了,而且是从各种不同 API 上收集数据,但是你还要把这些数据整合起来才能发挥作用,Segment就能帮你整合各个平 ...

  10. PCL:PCL与MFC 冲突总结

    (1):max,min问题 MFC程序过程中使用STL一些类编译出错,放到Console Application里一切正常.比如: void CMyDialog::OnBnClickedButton1 ...