今天想着对关注自己的粉丝群发条消息,想到博客园没提供这功能,那就自己来吧:
于是自己写了段代码,采集昵称,并模拟发送:
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Text.RegularExpressions; using System.Threading; namespace Cnblogs_SendMsg { class Program { static void Main(string[] args) { // GatherNickNames(); SendMsg(); } #region 向粉丝发送消息 static void SendMsg() { string[] nicks = File.ReadAllLines(path, Encoding.Default); Random rnd = new Random(); for (int i = 0; i < nicks.Length; i++) { Send(nicks[i], nicks[i] + ",感谢关注我的博客!", @"感谢您关注我的博客,同时也欢迎关注我的微信公众号 ", i); Thread.Sleep(60*1000 + rnd.Next(1500, 2000)); } } private static void Send(string nickName, string title, string text, int index) { try { string json = "{content:\"" + text + "\",name:\"" + nickName + "\",title:\"" + title + "\"}"; byte[] data = Encoding.UTF8.GetBytes(json); //WebClient wc = new WebClient(); //wc.Headers.Add("user-agent", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36"); //wc.Headers.Add("cookie", cookie); //wc.Headers.Add("content-type", "application/json; charset=UTF-8"); //wc.Headers.Add("referer", "https://msg.cnblogs.com/send?recipient=" + System.Web.HttpUtility.UrlEncode(nickName, Encoding.UTF8)); //wc.Encoding = Encoding.UTF8; //byte[] html = wc.UploadData("https://msg.cnblogs.com/api/message", data); //string cookieStr = "51fd9f14fa7561b5"; //string postData = string.Format("userid={0}&password={1}", "guest", "123456"); //byte[] data = Encoding.UTF8.GetBytes(postData); // Prepare web request... HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://msg.cnblogs.com/api/message"); request.Method = "POST"; request.Referer = "https://msg.cnblogs.com/send?recipient=" + System.Web.HttpUtility.UrlEncode(nickName, Encoding.UTF8); request.ContentType = "application/json; charset=UTF-8"; request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537."+DateTime.Now.Second; request.Headers.Add("Cookie", cookie); request.ContentLength = data.Length; Stream newStream = request.GetRequestStream(); // Send the data. newStream.Write(data, 0, data.Length); newStream.Close(); // Get response HttpWebResponse myResponse = (HttpWebResponse)request.GetResponse(); StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8); string content = reader.ReadToEnd(); string err = myResponse.Headers["X-Error"]; if (!string.IsNullOrEmpty(err)) { Console.WriteLine(index + " : err " + err); Thread.Sleep(60 * 1000 * 5); Send(nickName, title, text, index); } else { Console.WriteLine(index + " : ok " + nickName); } } catch (Exception err) { Console.WriteLine(index + " : err " + nickName + " : " + err.Message); } } #endregion #region 采集粉丝的昵称 static void GatherNickNames() { try { WebClient wc = new WebClient(); wc.Headers.Add("user-agent", "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36"); wc.Headers.Add("cookie", cookie); wc.Headers.Add("referer", "https://home.cnblogs.com/followers/"); wc.Encoding = Encoding.UTF8; for (int i = 1; i <= 89; i++) { string html = wc.DownloadString("https://home.cnblogs.com/followers/?page=" + i); GetNickName(html); Console.WriteLine(i); Thread.Sleep(500); } } catch (Exception err) { Console.WriteLine(err.Message); } } private static void GetNickName(string html) { int startIndex = html.IndexOf("class=\"avatar_list\">"); if (startIndex == -1) { return; } int endIndex = html.IndexOf("</ul>", startIndex); if (startIndex > endIndex) { return; } string text = html.Substring(startIndex, endIndex - startIndex); MatchCollection mc = Regex.Matches(text, "title=\"(.+)\""); if (mc != null && mc.Count > 0) { string[] names = new string[mc.Count]; for (int i = 0; i < mc.Count; i++) { names[i] = mc[i].Groups[1].Value; } File.AppendAllLines(path, names, Encoding.Default); } } #endregion static string path = AppDomain.CurrentDomain.BaseDirectory + "nicks.txt"; static string cookie = @""; } }
然而发现博客园对发送的次数有严格的限制,多数情况下你会得到一个:SendTooManyMessages
就当我内心开始对博客园又产生一丝抱怨的情感时,就在那一瞬间,我好像明白了什么。
博客园还是当年那个博客园,只是,我们变了,变的不那么的纯理想主义了。
版权声明:本文原创发表于 博客园,作者为 路过秋天 本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。 |
个人微信公众号![]() |
Donation(扫码支持作者):支付宝:![]() |
Donation(扫码支持作者):微信:![]() |
![]() |
分类:
想想就好
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
2013-05-30 五:魔音入侵
2012-05-30 C# Aop简单扫盲及ORM实体类属性拦截示例
2011-05-30 CYQ.Data 数据框架 V2.0 版本 开放源码 继续开源之路