任何事物都有双面性。

WebQQ作为一个跨平台的一站式QQ体验,继承了PC版QQ的很多优点,因此,也越来越受到营销行业人士的青睐。批量群发消息,省去很多重复性的工作。但是,众所周知的,由于群发所需的技术门槛极低,网上充斥着很大一部分的垃圾信息和骚扰广告,给很多QQ用户都带来了困扰,增加了其对群发消息的厌恶感。TX为了和谐聊天环境,采取了对WebQQ的诸多限制。本文试图从营销行业QQ群发的技术层面讨论一下,怎么样突破群发限制,并非鼓噪大家群发扰民!

1.什么是WebQQ群发?

WebQQ群发包括了对QQ好友和陌生批量性发送消息,以及QQ群群聊批量性发送消息到多个群。

2.WebQQ有哪些限制?

     发送给好友的消息,发送端显示正常发送,好友却并没有收到;

字数有限制,无法发送TX内定的屏蔽字词;

发送图片数量以及不能重复发送的限制

3. WebQQ群发的C#实现

本文假定您已经完成了WebQQ的二次登录,我们要实现的是对QQ好友信息的发送,以及多线程批量发送,QQ群消息发送,QQ群内成员消息发送。

假设您已经获取了登录所带过来的Cookie,装在了一个全局变量QQGlobal.ACCountManager[this.Uin].CookieContainer里(其中QQGlobal是我设定的一个专门装载全局变量的公有类,AccountManager是一个字典Dictionary<string,Client>变量,用于盛放所有登录的QQ数据(格式为:uin,Client))为了能批量操作,我把每个登录的QQ都装载一个单独的类中,以免变量互相干扰,思维混乱。

  对QQ好友的信息发送

     下面一段代码中,uin是指的要发送的QQ号码,content是发送的消息正文,Msg_Id是我随机指定的一个int型变量,初值我设为50000(这个随便设置),没发送一次消息就加1,ClientId和PSessionId都是从登录过程中提取出来的参数,这些参数都可以在网上找到,如果没弄明白怎么来的,可以在后面关注我并留言。至于 HttpHelper.GetHtml(url)怎么来的,这个请看我前面一片文章“HttpWebRequest简单实用封装应用类”,里面详细讲到了封装的过程,也可以用大家自个封装好的。

View Code

 /// <summary>/// 发送消息给好友/// http://www.cnblogs.com/uu102/archive/2012/09/16/2687391.html /// </summary>/// <param name="uin">好友QQ</param>/// <param name="content">消息内容</param>/// <returns></returns>public string send_buddy_msg2(string uin, string content){string html = "";string url = "http://d.web2.qq.com/channel/send_buddy_msg2";   //发送消息this.Msg_Id++;if (string.IsNullOrEmpty(content)) content = " ";content = content.Replace("\n", "\\n");string r = string.Format("{{\"to\":{0},\"face\":{1},\"content\":\"[{2}[\\\"font\\\",{{\\\"name\\\":\\\"{3}\\\",\\\"size\\\":\\\"{4}\\\",\\\"style\\\":[0,0,0],\\\"color\\\":\\\"{5}\\\"}}]]\",\"msg_id\":{6},\"clientid\":{7},\"psessionid\":\"{8}\"}}",uin,QQGlobal.FreindsList[this.Uin].freindInfos[uin].Face,content,this.Font_Name,this.Font_Size,this.Color,this.Msg_Id,this.ClientId,this.PSessionId);string postString = string.Format("r={0}&clientid={1}&psessionid={2}", HttpUtility.UrlEncode(r, Encoding.UTF8), this.ClientId, this.PSessionId);html = HttpHelper.GetHtml(url, postString, QQGlobal.ACCountManager[this.Uin].CookieContainer);return html;}

上面的代码中一些莫名其妙冒出来的变量大家比划着理解就是了,因为这篇文章是我写好代码之后完成的,很多变量都牵扯到别的类中,所以可能会看起来一头雾水。
      QQ群的信息发送

 

接下来,陌生人发送以及图片发送都先跳过去,单独作为一篇。来讲讲群发送。

QQ群发送和QQ发送非常类似,因此只介绍一下变量代表的含义。ucode是从前面登录之后的一个请求提取出来的,具体请求页面以及怎样提取,暂时略过吧,以后有时间再说。代码就在下面列出。

View Code

    public string Send_qun_msg(string ucode, string content){string url = "http://d.web2.qq.com/channel/send_qun_msg2";string r=string.Format("{{\"group_uin\":{0},\"content\":\"[\\\"{1}\\\",[\\\"font\\\",{{\\\"name\\\":\\\"\\\\u5b8b\\\\u4f53\\\",\\\"size\\\":\\\"10\\\",\\\"style\\\":[0,0,0],\\\"color\\\":\\\"000000\\\"}}]]\",\"msg_id\":{2},\"clientid\":\"{3}\",\"psessionid\":\"{4}\"}}",ucode,content,this.Msg_Id,this.ClientId,this.PSessionId);string postString = string.Format("clientid={0}&psessionid={1}&r={2}", this.ClientId, this.PSessionId,HttpUtility.UrlEncode(r, Encoding.UTF8));string html = HttpHelper.GetHtml(url, postString, QQGlobal.ACCountManager[this.Uin].CookieContainer);return html;}

上述群消息的发送都省略图片发送这一段了,直接发到将来的一篇文章单独介绍。
     QQ群成员信息批量发送

QQ群成员首先要从群信息里提取出来,这是群成员发送的第一步。QQ群成员对应一个跟好友一样的临时号码,这个号码将用于发送等操作,而这些号码都要经过下面这一个Http请求才能返回提取。

View Code

 public Dictionary<string, string> GetGroupMemeber(string gcode){Dictionary<string, string> dic = new Dictionary<string, string>();string html = "";string url = string.Format("http://s.web2.qq.com/api/get_group_info_ext2?gcode={0}&vfwebqq={1}&t=1341726562812", gcode, QQGlobal.ACCountManager[this.Uin].Vfwebqq);html = HttpHelper.GetHtml(url, QQGlobal.ACCountManager[this.Uin].CookieContainer);MatchCollection matches = new Regex(@"""nick"":""(?'nick'[^""]+)"",""province"":""(?'province'[^""]+)"",""gender"":""(?'gender'[^""]+)"",""uin"":(?'uin'[^,]+),""country"":""中国"",""city"":""(?'city'[^""]+)""", RegexOptions.IgnoreCase).Matches(html);for (int i = 0; i < matches.Count; i++){dic.Add(matches[i].Groups["uin"].Value, matches[i].Groups["nick"].Value);}return dic;}

这些参数我想都不用解释了,纯粹的娘们活,细心。提交了这个请求之后,把返回的结果提取到一个自定义好的字典变量里,用于下一道工序——发送消息。这些代码说实在话,都是一些只可意会不可言传的干活!看着看着就明白了。所以还继续上代码了。

View Code

public string Send_sess_msg2(string to,string groupuin,string content){string url = "",r="",html="",postString="";this.Msg_Id++;url = "http://d.web2.qq.com/channel/get_c2cmsg_sig2";string id = groupuin;postString = string.Format("id={0}&to_uin={1}&service_type=0&clientid={2}&psessionid={3}&t=1288591644319",id,to,ClientId,PSessionId );html = HttpHelper.GetHtml(url+"?"+postString, QQGlobal.ACCountManager[this.Uin].CookieContainer);url = "http://d.web2.qq.com/channel/send_sess_msg2";string group_sig=new Regex(@"value"":""(?'value'[^""]*)""").Match(html).Groups["value"].Value;if (string.IsNullOrEmpty(content)) content = " ";content = content.Replace("\n", "\\n");r = string.Format("{{\"to\":{0},\"group_sig\":\"{1}\",\"face\":{2},\"content\":\"[\\\"{3}\\\",[\\\"font\\\",{{\\\"name\\\":\\\"\\\\u5b8b\\\\u4f53\\\",\\\"size\\\":\\\"10\\\",\\\"style\\\":[0,0,0],\\\"color\\\":\\\"000000\\\"}}]]\",\"msg_id\":{4},\"service_type\":0,\"clientid\":\"{5}\",\"psessionid\":\"{6}\"}}",to,group_sig,528,content,Msg_Id,ClientId,PSessionId);postString = string.Format("r={0}&clientid={1}&psessionid={2}", HttpUtility.UrlEncode(r, Encoding.UTF8), this.ClientId, this.PSessionId);html = HttpHelper.GetHtml(url, postString, QQGlobal.ACCountManager[this.Uin].CookieContainer);return html;}

到这里为止,能做的都做了(忘了说到讨论组的创建和群发了,有机会再补上)。对这些东西感兴趣的朋友,请保持对本博客的关注,有了大家的交流,才会对这一行业看得更透彻。

文章未完,后篇待续!每天都有更新,请朋友们继续关注!

转载于:https://www.cnblogs.com/uu102/archive/2012/09/16/2687391.html

WebQQ群发限制的突破相关推荐

  1. qq群发信息显示服务器检测到,关于如何突破QQ群发消息屏蔽或限制经验总结

    文章导读:本文主要介绍关于如何突破QQ群发消息屏蔽或限制经验总结 ,包括:WebQQ发送消息很多人反映说消息收不到啊,发布多久就屏蔽了.其实我还是那句老话.当你短时间在同一个IP段之内发送这么多消息, ...

  2. 微信公众号助手如何不受限制群发消息?

    我们大boss经常叫我们群发消息给客户,微信公众服务号只能一个月群发4次还限额,你想想平均一个星期1次,还天天叫我们发,根本就不够啊. 跟大boss反应一下,还说我们这么不早说,我们特么BB了,第二天 ...

  3. 邮件的发送方式有哪几种?

    邮件营销一直以来以其成本低廉,效果可评估的特点备受广大商家和网络营销从业者的青睐,邮件发送方式一般有三种. 第一种就是通过专业的EDM(Sendcloud,Submail,umail,sg)邮件营销平 ...

  4. vuewebsocket做消息提醒_企业微信群怎么定时群发消息?如何突破群发次数限制?...

    文丨语鹦企服私域管家原创,未经授权不得转载 我们在使用企业微信做营销时,经常需要给客户群发通知或活动福利.企业微信提供多客户群群发工具,只需一键群发,即可通知到所有群.但遇上节假日或者忙碌的时候,定时 ...

  5. 突破微信服务号群发限制

    为什么80%的码农都做不了架构师?>>>    前提介绍 玩过微信公众平台的同学都知道,公众平台群发消息给关注者是有限制的,订阅号每天一条,服务号每个月4条. 其实人家平台这么限制也 ...

  6. 微信模板消息 群发 突破 4条限制

    微信号分为服务号和订阅号(还有企业号内部用),服务号像qq,对方给你发信息,能马上看到,订阅号像邮件,你必须自己打开对方的订阅号才能看到即时的信息.所以服务号更像一个普通微信好友,可以在线沟通.但是微 ...

  7. golang 模拟登陆微信公众平台,突破微信群发每日一条限制

    思路:微信后台可以对指定用户进行回复,群发其实就是一个loop,so 模拟POST提交到微信 后台, 模拟登陆,即可突破群发每日一条限制. 直接上代码 /**@author 菠菜君*@Version ...

  8. 微信如何群发消息?如何群发突破200上限?

    相信每到各种节日的时候,很多人都会发布或收到微信好友的节日祝福或活动通知.群发已经是一件很普遍的事了.逢年过节,发个微信祝福,是维系关系的必须:发个活动通知,是为了告知客户,促进销售. 01 微信自带 ...

  9. java qq协议 c#,C# WebQQ协议群发机器人(三)

    在前两篇文章中我已经给了绝大部分的WEBQQ的操作 在这篇文章中不在过多的说明做法 有的时候需要自己添加一些功能呢 怎么做呢,我这里给出一个方法. 在调试webqq机器人时 我用google浏览器 的 ...

最新文章

  1. oracle 表空间操作
  2. 关于/etc/fstab
  3. vue.js 多图上传,并可预览
  4. 版权之争,谁更棋高一着?
  5. Acwing第 27 场周赛【完结】
  6. VC++如何处理自定义消息
  7. zcmu1713(模拟)
  8. 重磅推荐 | 11个名企NLP项目,硅谷科学家帮你转型
  9. [SDOI2019] 热闹的聚会与尴尬的聚会
  10. 2020最新Java线程池入门(超详细)
  11. docker network 网络模式
  12. AcWing 1210.连号区间 (枚举)
  13. sqlserver2000换成mysql_MS SQL Server2000转换成MySQL
  14. cocos2d-x 中LUA和平台之间的函数调用理解
  15. java Iterator源码
  16. mysql常用数据操作之增、删、改
  17. 本人新书推荐《linux运维之道》
  18. 大数据爬虫的一些小目标
  19. 读书笔记----《平凡的世界》第四篇
  20. 案例2:丙类仓库建筑防火案例分析

热门文章

  1. linux命令netstat
  2. for表达式的语句执行顺序?
  3. centos6 yum修改源
  4. 使用 Xtrabackup 在线对MySQL做主从复制
  5. OpenNebula 入门安装配置
  6. [洛谷P1440]求m区间内的最小值
  7. SQL-Oracle游标
  8. java第五章:面向对象(oop)
  9. 导入android studio项目,编译失败
  10. 数据库相关的系统巡检参考项