简介
基于QStory对接WordPress自带的REST API实现文章推送功能
截图演示:
https://yangy.co/wp-content/uploads/2024/11/9cf6560dcd6cff27ba4cc14ea5a0165.png
开始教程
仅适用于安卓,可以使用模拟器
下载ONPatch
https://cloud.miomoe.cn/s/GYId
下载QStory
https://cloud.miomoe.cn/s/Z9C3
下载后安装把获取应用列表权限打开
在ONPatch内添加选择应用QQ
图片:
https://yangy.co/wp-content/uploads/2024/11/Q20241009-160256.png
到这一步完成后会让你卸载QQ重装,根据提示卸载即可重装。
记得备份重要QQ文件
重装后点击QQ图标选择模块作用域
选择刚刚下载的QStory模块即可。
强制重启QQ打开设置页面就能看到QStory的设置页面,弹出赞助点击旁边可以关闭。
最后把下载的Java脚本解压到 Android\data\com.tencent.mobileqq\QStory\Plugin\脚本文件夹 即可
开源地址:
https://gitee.com/ShuShuicu/QQJava
https://github.com/ShuShuicu/QQJava
核心源码(inc\functions\wp-post.java)
/**
* WordPress文章推送
* @Author:鼠子(ShuShuicu)
* @Link: https://blog.miomoe.cn/
*/
public String get(String url) {
StringBuffer buffer = new StringBuffer();
InputStreamReader isr = null;
try {
URL urlObj = new URL(url);
HttpURLConnection uc = (HttpURLConnection) urlObj.openConnection();
uc.setConnectTimeout(10000);
uc.setReadTimeout(10000);
isr = new InputStreamReader(uc.getInputStream(), "utf-8");
BufferedReader reader = new BufferedReader(isr); // 缓冲
String line;
while ((line = reader.readLine()) != null) {
buffer.append(line).append("\n");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (isr != null) {
isr.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
if (buffer.length() == 0) return buffer.toString();
buffer.delete(buffer.length() - 1, buffer.length());
return buffer.toString();
}
public String parseJson(String json) {
StringBuilder result = new StringBuilder();
try {
JSONArray posts = new JSONArray(json);
if (posts.length() == 0) { // 检查是否有返回的文章
return "没有找到相关的文章。\n---------\n====鼠子Java====";
}
int limit = Math.min(posts.length(), 10); // 限制文章数量为10
for (int i = 0; i < limit; i++) {
JSONObject post = posts.getJSONObject(i);
String title = post.getJSONObject("title").getString("rendered"); // 获取标题的渲染内容
// 手动替换常见的 HTML 实体
title = title.replaceAll("–", "-"); // 替换 – 为 -
title = title.replaceAll("…", "..."); // 替换 … 为 ...
title = title.replaceAll("<[^>]*>", ""); // 正则表达式替换所有 HTML 标签
String link = post.getString("link"); // 获取文章链接
result.append("标题: ").append(title).append("\n链接: ").append(link).append("\n------\n");
}
} catch (Exception e) {
e.printStackTrace();
return "Error: 数据解析失败。";
}
return result.toString();
}
AddItem("WordPress文章推送/开关", "wpPostOpen");
public void wpPostOpen(String group) {
if ("1".equals(getString(group, "是否开启"))) {
putString(group, "是否开启", null);
Toast("文章推送关闭");
} else {
putString(group, "是否开启", "1");
Toast("文章推送开启");
}
}
public void onMsg(Object msg) {
String text = msg.MessageContent;
String qq = msg.msg.peerUin + "";
String qun = msg.GroupUin;
String groupId = msg.GroupUin;
String content = msg.MessageContent;
if ("1".equals(getString(qun, "是否开启"))) {
// 处理 #搜索文章 指令
if (content.startsWith("#搜索文章")) {
String searchQuery = content.substring(5).trim(); // 修正指令截取
String url = get("https://www.zbtool.cn/wp-json/wp/v2/posts?search=" + searchQuery);
String parsedResult = parseJson(url); // 解析JSON并返回结果
if (msg.IsGroup) {
sendMsg(qun, "", parsedResult);
} else {
sendMsg("", qq, parsedResult);
}
}
// 处理 #最新文章 指令
if (content.startsWith("#最新文章")) {
String url = get("https://www.zbtool.cn/wp-json/wp/v2/posts"); // 获取最新文章
String parsedResult = parseJson(url); // 解析JSON并返回结果
if (msg.IsGroup) {
sendMsg(qun, "", parsedResult);
} else {
sendMsg("", qq, parsedResult);
}
}
if (text.equals("#文章推送")) {
String reply = "====文章推送====\n -#最新文章\n -#搜索文章+关键词\n====鼠子Java====";
if (msg.IsGroup)
{
sendMsg(qun,"",reply);
}
else
{
sendMsg("",qq,reply);
}
}
}
}
本文章转载6KE论坛
参与讨论