本文出处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. [JavaEE] DWR框架实现Ajax

    Ajax是时下比较流行的一种web界面设计新思路,其核心思想是从浏览器获取XMLHttp对象与服务器端进行交互. DWR(Direct Web Remoting)就是实现了这种Ajax技术的一种web ...

  2. [JavaEE] DWR框架简介

    DWR框架简介 DWR框架是一个可以允许你去创建AJAX WEB站点的JAVA开源库.它可以让你在浏览器的JavaScript代码中调用Web服务器的Java代码,就像Java代码在浏览器中一样.DW ...

  3. [HTML5] 让IE支持HTML5的方法

    越来越多的站点开始使用 HTML5 标签,但是目前的情况是还有很多人在使用IE6.IE7.IE8.为了让所有浏览者都可以正常的访问,解决方案有下面两个: 1.为网站创建多套模板,通过程序对User-A ...

  4. mysql 操作提示 1366 Incorrect string value

    一.报错说明 数据库此字段的字符集与整理字符集是否与SQL语句传递数据的字符集相同:不相同则会引发MySQL1366错误. 二.产生原因 windows 安装MySql 的时候选择的是默认的编码,创建 ...

  5. 10-XML

    今日知识 1. xml * 概念 * 语法 * 解析 xml概念 1. 概念:Extensible Markup Language 可扩展标记语言 * 可扩展:标签都是自定义的. <user&g ...

  6. Jquery 重置表单

    1.重置表单回初始状态 $('#fromid')[0].reset(); 此方法一步到位,不需要一个个的去赋值为空

  7. 洛谷P1208 [USACO1.3]混合牛奶 Mixing Milk(贪心)

    题目描述 由于乳制品产业利润很低,所以降低原材料(牛奶)价格就变得十分重要.帮助Marry乳业找到最优的牛奶采购方案. Marry乳业从一些奶农手中采购牛奶,并且每一位奶农为乳制品加工企业提供的价格是 ...

  8. AI:**消灭程序员需要一百年吗?

    这篇博文真的很长,不过挺有意思.关于智能机器人的发展前景还是很广的,因为每一步都异常艰难,而什么时候可以终止还无法预料,所以程序员没办法失业啊! 转自于图灵社区:http://www.ituring. ...

  9. UVa340(Master-Mind Hints)未完成

    #include<stdio.h> int main() { int num,a[100],i,j,b[100]; while(scanf("%d",&num) ...

  10. 我的C++笔记(函数部分)

    #include <iostream> #include <cmath>//C++的数学函数库 using namespace std; class Point{ public ...