本文介绍了一个基于JavaScript的自动化脚本,通过模拟CSDN闪存(Ing)的Ajax接口实现自动发布、检测幸运闪并清理无效内容的功能。文章详细解析了发送消息、获取列表判断星星以及删除无星星闪存的核心逻辑,提供了完整的代码实现与关键参数说明,旨在帮助用户通过挂机方式获取平台奖励。
脚本效果展示与概述
首先展示最终运行效果的截图。

本文主要介绍一个用于CSDN闪存自动刷取星星的脚本,该脚本支持挂机运行。虽然标题提及情人节玫瑰,但核心功能仍是针对闪存星星的自动化获取,并非标题党,接下来将详细讲解具体实现过程。
发送消息接口模拟
第一步:发送消息
通过分析网络请求,手动模拟发送消息接口。

$.post("http://ing.cnblogs.com/ajax/ing/Publish", //地址
JSON.stringify({ "content": content, "publicFlag": 1 }), //参数,json格式字符串
function (result) { //回调
console.log("..............发送成功了,接下来判断是否有星星");
result && result.IsSuccess && judgeStar(content)
}, "json"); //返回的内容转成js对象
幸运闪判断逻辑
第二步:判断刚发送的消息是否包含幸运闪
同样通过观察请求响应来验证逻辑。
查询幸运闪的接口地址为:http://ing.cnblogs.com/ajax/ing/GetIngList?IngListType=all&PageIndex=1&PageSize=30&Tag=&_=1440087133884
从接口命名可以看出,该接口支持多种类型筛选(如我的、我回应、新回应、提到我、回复我、全站),并可指定页码和每页数量,末尾参数为时间戳。
以下是模拟请求的代码示例:
$.ajax({
url: "http://ing.cnblogs.com/ajax/ing/GetIngList?IngListType=all&PageIndex=1&PageSize=3&Tag=&_=" + (+new Date),
type: "get",
dataType: "text",
success: function (result) {
//处理的逻辑<br> //window.doc=$(result); //可以在控制台看看出来的是什么鬼
}
});
这里使用 dataType:"text" 的原因在于:

接口返回的是HTML代码。通过 $(result) 在控制台查看,发现结果分为三部分。我们需要定位到刚刚发送的那部分,并判断其中是否包含幸运闪。为了简化处理,这里仅获取前3条进行判断;如果同时与我一起刷闪存的人数超过3人,可能无法准确定位,因此建议适当增加每页返回的数量。
以下是查找并判断是否存在星星的代码片段:
var feedDiv = $(result).eq(2);
var msgSpan = feedDiv.find("span:contains('" + msg + "')");
//这样找其实不严谨,尤其在大晚上的找的全是自己的...
if (msgSpan.length > 0) {
console.log("..............找到发送的闪存,开始判断");
} else {
console.log("..............未找到发送的闪存,可能脚本错误");
}
var id = msgSpan.attr("id").match(/body_(\d+)$/)[1];
if (msgSpan.next("img.ing_icon_lucky").length > 0) {
console.log("..............幸运闪 +1 【星星】");
} else {
//没找到星星,看来运气不好。那么就把刚刚那条删除吧!!!
}
无效闪存清理机制
第三步:删除没有星星的无效闪存
对于只关注星星(或玫瑰)的用户来说,没有获得奖励的闪存应当被清理。
此处不再配图,直接提供删除逻辑的代码:
//删除闪存
function delMsg(id) {
console.log("..............没有星星,删除该闪存,id为" + id);
return $.post("http://ing.cnblogs.com/ajax/ing/del", JSON.stringify({ ingId: id }));
}
运行结果与注意事项
第四步:总结
能否获取“星星”确实存在随机性,受运气影响较大。笔者测试中每6分钟执行一次,持续挂机一下午和一晚,仅获得十几个星星。
当前时间为12点43分,对此脚本的长期运行效果感到担忧。在公司电脑上挂机运行此脚本,而本人在家中监控,不确定是否会被平台限制(小黑屋),计划明早早点去停止运行。
此外,由于浏览器偶尔可能出现卡顿,导致部分没有星星的闪存未被及时删除,这也是需要注意的问题。
以下是完整的脚本代码:
function memeda(input) {
var times = 0;
shuaXingXing(input);
function shuaXingXing(content) {
sendMsg(content);
setInterval(function () {
sendMsg(content);
}, 1000 * 60 * 6 + 100);
}
//发送闪存消息
function sendMsg(content) {
console.log("....................................................................");
times++;
console.log("当前时间:" + new Date().toLocaleTimeString() + " 第" + times + "次发送闪存");
console.log("..............发送闪存");
return $.post("http://ing.cnblogs.com/ajax/ing/Publish", JSON.stringify({ "content": content, "publicFlag": 1 }), function () { }, "json")
.done(function (result) {
console.log("..............判断是否有星星");
result && result.IsSuccess && judgeStar(content)
});
}
//判断是否有星星
function judgeStar(msg) {
$.ajax({
url: "http://ing.cnblogs.com/ajax/ing/GetIngList?IngListType=all&PageIndex=1&PageSize=3&Tag=&_=" + (+new Date),
type: "get",
dataType: "text",
success: function (result) {
var feedDiv = $(result).eq(2);
var msgSpan = feedDiv.find("span:contains('" + msg + "')");
if (msgSpan.length > 0) {
console.log("..............找到发送的闪存,开始判断");
} else {
console.log("..............未找到发送的闪存,可能脚本错误");
}
var id = msgSpan.attr("id").match(/body_(\d+)$/)[1];
if (msgSpan.next("img.ing_icon_lucky").length > 0) {
console.log("..............幸运闪 +1 【星星】");
} else {
delMsg(id);
}
}
});
}
//删除闪存
function delMsg(id) {
console.log("..............没有星星,删除该闪存,id为" + id);
return $.post("http://ing.cnblogs.com/ajax/ing/del", JSON.stringify({ ingId: id }));
}
}
以上就是本文关于情人节单身人士如何通过代码获取12束玫瑰的完整教程,希望对大家有所帮助。