Java实现微信小程序文本内容敏感词检查

article/2025/6/4 23:33:21

    • 1.背景
    • 2.策略
    • 3.实现
      • 1. 调用auth.getAccessToken,获取接口调用凭证
      • 2. 调用security.msgSecCheck检测文本内容
    • 4.遇到的问题
    • 5.工具类完整代码
    • 6.使用方式

1.背景

发布小程序的时候,没有通过审核,审核结果为
在这里插入图片描述
提示要完善内容审核机制。

2.策略

微信服务端内容安全模块提供了内容审核的接口
security.msgSecCheck
检查一段文本是否含有违法违规内容。
在这里插入图片描述
应用场景举例:

  1. 用户个人资料违规文字检测;
  2. 媒体新闻类用户发表文章,评论内容检测;
  3. 游戏类用户编辑上传的素材(如答题类小游戏用户上传的问题及答案)检测等。

频率限制
单个 appId 调用上限为 4000 次/分钟,2,000,000 次/天

调用方式:

  1. HTTPS 调用
  2. 云调用
  3. 增量调用(加强版)

这里我们使用HTTPS调用的方式。

3.实现

1. 调用auth.getAccessToken,获取接口调用凭证

在这里插入图片描述

详情可参考微信公众平台文档 《获取access_token》

使用map存储获取的access_token,建立定时任务,每个7000s更新一次,如果项目中引入了Redis,最好使用Redis存储。原本项目中没有引入Redis,这里就偷了个懒

import cn.hutool.http.HttpUtil;import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.Scheduled;import java.util.HashMap;
import java.util.Map;@Configuration
public class WeiXinUtil {@Value("${app.appid}")String APPID;@Value("${app.secret}")String SECRET;@Value("${app.grant_type}")String AUTHORIZATION_CODE;@AutowiredWxCryptUtils wxCryptUtils;public static Map<String, String> accessTokenMap;public static final String ACCESS_TOKEN_KEY="accessToken";static {accessTokenMap = new HashMap<String, String>(1);}/*** 功能描述: 获取access_token,每隔7000s获取一次* @author jiaoqianjin* Date: 2020/11/23 14:33*/@Scheduled(fixedDelay = 2*3000*1000)public void getAccessToken() {//利用hutool发送https请求Map<String, Object> paramMap = new HashMap<String, Object>(3);paramMap.put("appid", APPID);paramMap.put("secret", SECRET);paramMap.put("grant_type", AUTHORIZATION_CODE);// 利用Hutool工具包的HttpUtilObject result = HttpUtil.get("https://api.weixin.qq.com/cgi-bin/token?", paramMap);JSONObject jsonObject = JSONUtil.parseObj(result);WeiXinUtil.accessTokenMap.put(WeiXinUtil.ACCESS_TOKEN_KEY,jsonObject.getStr("access_token"));}
}

.yml

app:appid: wx23eb370840c******secret: 8a665bce9dcc74e6e30e1c849******grant_type: client_credential

启动类
添加注解@EnableScheduling,开启定时任务

@EnableScheduling
@SpringBootApplication
public class AppRun {public static void main( String[] args ) {SpringApplication.run(AppRun.class, args);}}

2. 调用security.msgSecCheck检测文本内容

 /*** 功能描述:检查一段文本是否含有违法违规内容。** @param content 待检测文本* @author jiaoqianjin* Date: 2020/11/23 14:41*/public boolean msgCheck(String content) {String token = WeiXinUtil.accessTokenMap.get(WeiXinUtil.ACCESS_TOKEN_KEY);Map<String, Object> paramMap = new HashMap<String, Object>(1);paramMap.put("content", content);Object result = HttpUtil.post("https://api.weixin.qq.com/wxa/msg_sec_check?access_token=" + token, JparamMap);JSONObject jsonObject = JSONUtil.parseObj(result);System.out.println(jsonObject);boolean flag = false;//87014	内容含有违法违规内容int errCode = 87014;if (jsonObject.getInt("errcode") == errCode) {flag = true;}return flag;}

4.遇到的问题

{“errcode”:47001,“errmsg”:"data format error rid: *** "}
请求格式不正确

hutool给出的post请求例子
在这里插入图片描述
发现自己没有用错,但是请求格式就是不对,发现post请求参数,请发送前还是要转为JSON格式

 Map<String, Object> paramMap = new HashMap<String, Object>(1);paramMap.put("content", content);Object result = HttpUtil.post("https://api.weixin.qq.com/wxa/msg_sec_check?access_token=" + token, JSONUtil.toJsonPrettyStr(paramMap));

5.工具类完整代码

import cn.hutool.http.HttpUtil;import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.Scheduled;import java.util.HashMap;
import java.util.Map;@Configuration
public class WeiXinUtil {@Value("${app.appid}")String APPID;@Value("${app.secret}")String SECRET;@Value("${app.grant_type}")String AUTHORIZATION_CODE;@AutowiredWxCryptUtils wxCryptUtils;public static Map<String, String> accessTokenMap;public static final String ACCESS_TOKEN_KEY="accessToken";static {accessTokenMap = new HashMap<String, String>(1);}/*** 功能描述: 获取access_token,每隔7000s获取一次* @author jiaoqianjin* Date: 2020/11/23 14:33*/@Scheduled(fixedDelay = 2*3000*1000)public void getAccessToken() {//利用hutool发送https请求Map<String, Object> paramMap = new HashMap<String, Object>(3);paramMap.put("appid", APPID);paramMap.put("secret", SECRET);paramMap.put("grant_type", AUTHORIZATION_CODE);// 利用Hutool工具包的HttpUtilObject result = HttpUtil.get("https://api.weixin.qq.com/cgi-bin/token?", paramMap);JSONObject jsonObject = JSONUtil.parseObj(result);WeiXinUtil.accessTokenMap.put(WeiXinUtil.ACCESS_TOKEN_KEY,jsonObject.getStr("access_token"));}/*** 功能描述:检查一段文本是否含有违法违规内容。** @param content 待检测文本* @author jiaoqianjin* Date: 2020/11/23 14:41*/public boolean msgCheck(String content) {String token = WeiXinUtil.accessTokenMap.get(WeiXinUtil.ACCESS_TOKEN_KEY);Map<String, Object> paramMap = new HashMap<String, Object>(1);paramMap.put("content", content);Object result = HttpUtil.post("https://api.weixin.qq.com/wxa/msg_sec_check?access_token=" + token, JSONUtil.toJsonPrettyStr(paramMap));JSONObject jsonObject = JSONUtil.parseObj(result);System.out.println(jsonObject);boolean flag = false;//87014	内容含有违法违规内容int errCode = 87014;if (jsonObject.getInt("errcode") == errCode) {flag = true;}return flag;}
}

6.使用方式

 // 通知内容添加文本铭感词汇过滤boolean isSensitive = new WeiXinUtil().msgCheck(info.getContent());if (isSensitive) {log.error("【发布通知失败,含有违法违规内容】: objId: " + updateObjectDTO.getId());throw new BaseException(ResponseEnum.CONTENT_IS_SENSITIVE);}

http://chatgpt.dhexx.cn/article/geYUZ6n5.shtml

相关文章

普通微信如何设置敏感词监控?以及企业微信敏感词监控拦截

微信作为一个广泛使用的社交平台&#xff0c;拥有庞大的用户群体&#xff0c;这使得微信营销在企业的市场推广中扮演着重要的角色。通过微信营销&#xff0c;企业可以获得一定程度的业绩增长。然而&#xff0c;随着企业规模的扩大&#xff0c;微信营销也面临着一些挑战和盲区。…

微信小程序安全系列——文本内容安全识别

前言 相信很多朋友跟我遇到过相同的问题&#xff0c;就是在开发一些笔记或者博客的时候&#xff0c;会遇到一些过滤敏感、时政、黄、赌、毒这类词汇、句子等这种棘手问题。 今天我们看一下微信小程序提供的文本安全内容识别&#xff0c;也可以减少一些我们的工作量。通过微信…

常用的文本去重代码:

常用的文本去重代码&#xff1a; 本代码用到了simhash库&#xff08;https://github.com/yanyiwu/simhash&#xff09; import re import os from pathlib import Path import json from simhash import Simhashdef droplike(lines):def distance(v1, v2, f64):x (v1 ^ v2) …

simhash海量文本去重的工程化

https://yuerblog.cc/2018/05/30/simhash-text-unique-arch/ simhash算法是google发明的&#xff0c;专门用于海量文本去重的需求&#xff0c;所以在这里记录一下simhash工程化落地问题。 下面我说的都是工程化落地步骤&#xff0c;不仅仅是理论。 背景 互联网上&#xff0…

自然语言处理学习笔记5:去重处理之使用SimHash进行海量文本去重

摘要: 传统的Hash算法只负责将原始内容尽量均匀随机地映射为一个签名值&#xff0c;原理上仅相当于伪随机数产生算法。传统的hash算法产生的两个签名&#xff0c;如果原始内容在一定概率下是相等的&#xff1b;如果不相等&#xff0c;除了说明原始内容不相等外&#xff0c;不再…

python编写url文本去重和url探测存活一体化工具

因为项目需要&#xff0c;长时间使用360的quake和奇安信的hunter进行资产收集。但是收集到的资产很多无法访问&#xff0c;hunter的都是200。所以写了一个简单的脚本&#xff0c;让quake和hunter进行对比&#xff0c;去掉重复部分&#xff0c;然后再探测存活&#xff0c;存活ur…

使用NotePad++快速实现字符串统计/抽取,以及使用Notepad进行文本去重

软件测试技术交流群 : 1、QQ交流群&#xff1a;群号 429183023 2、添加JeongJinWin&#xff0c;或者扫描头像二维码 背景&#xff1a;日常工作中&#xff0c;可能在Windows下需要对一些文本进行解析&#xff0c;抽取出某种类型的字段、或者特定字符串&#xff0c;在Linux下可…

在线文本去重统计工具

在线文本去重统计工具 在线文本去重统计工具 本工具可以统计文本列表的重复项以及统计每个重复项出现的次数。 本工具可以统计文本列表的重复项以及统计每个重复项出现的次数。 本工具可以统计文本列表的重复项以及统计每个重复项出现的次数。 https://tooltt.com/unique/

论__大量文本内容去重的方式

论__大量文本内容去重的方式 本文由 Luzhuo 编写,请尊重个人劳动成果,转发请保留该信息. 原文: http://blog.csdn.net/Rozol/article/details/50640179 微博: http://weibo.com/u/2524456400 最近拿到大量的文本文件,文件的大小少个几十M,多则几十G,这么多且大的文本想必有很…

[039]文本去重、过滤——文本指纹

1. 文本指纹介绍 互联网网页存在大量的重复内容网页&#xff0c;无论对于搜索引擎的网页去重和过滤、新闻小说等内容网站的内容反盗版和追踪、还是社交媒体等文本去重和聚类&#xff0c;都需要对网页或者文本进行去重和过滤。 最简单的文本相似性计算方法可以利用空间向量模型&…

TXT文本去重 TXT去重 TXT文本合并去重工具 —— 20亿行130GB的数据只需60分钟

例如&#xff1a;多个TXT大数据文本文件合并以及文本行去重 130GB20亿行数据60分钟即可完成去重操作 测试数据大小&#xff1a;20亿行130GB的数据只需60分钟 平均去重速度&#xff1a;2000000000(行) 3600(秒) ‬ 555555(行/秒)≈55万行/秒 作者QQ&#xff1a;24759362 以…

文本去重:sim哈希算法

站在巨人_啊哈、zstu_翊、lengye7、黑夜路人的肩膀上~ 分析数据前&#xff0c;我们需要对数据去重&#xff0c;如何选择和设计文本的去重算法&#xff1f; 常见的去重算法有&#xff1a;余弦夹角算法、欧式距离、Jaccard相似度、最长公共子串、编辑距离等。这些算法是先将两篇文…

文本去重的技术方案讨论(一)

转发请注明出处&#xff1a;https://blog.csdn.net/HHTNAN 对于文本去重来说&#xff0c;我个人处理上会从数据量、文本特征、文本长度&#xff08;短文本、长文本&#xff09;几个方向考虑。 常见的去重任务&#xff0c;如网页去重&#xff0c;帖子去重&#xff0c;评论去重等…

git 生成公钥 及使用笔记

1.输入 ssh-keygen -t rsa -C 2101419675qq.com 2.一路回车&#xff0c; 提示输入文件名和密码都直接回车 3.公钥就生成了&#xff0c;路径为 4.在GitHub或gittree中直接将id_rsa.pub中的内的内容加在sskey中就行 下面是gittree 5.其它 mkdir test cd test git init touch …

git生成公钥私钥(windows)

配置用户名和邮箱 git config --global user.name "v_sunhaojie" $ git config --global user.email "v_sunhaojiebaidu.com" 会在当前用户的目录下(C:\Users\v_sunhaojie)生成 .gitconfig文件 [user] name v_sunhaojie email v_sunhaoji…

git生成公钥的步骤

git生成公钥的步骤 1. 设置Git账户2.生成命令 1. 设置Git账户 命令如下 git config user.name &#xff08;查看git账户&#xff09; git config user.email &#xff08;查看git邮箱&#xff09; git config --global user.name “账户名” &#xff08;设置全局账户名和邮箱…

【Git】ssh公钥如何生成

1. 在C盘用户目录文件下找到.ssh文件&#xff08;若之前未生成.ssh则进行第2步&#xff09; 里面保存的是之前生成的文件&#xff0c;将.ssh文件夹删除。 2. 右键&#xff0c;点击git bash here&#xff0c;进入git界面 3. 输入ssh-keygen -t rsa -C *.com &#xff0c;连点三…

git配置公钥

一、 生成.ssh文件 在桌面打开Git Bash&#xff0c;输入以下命令&#xff1a; ssh-keygen -t rsa -C "你的邮箱xxx.com"一直按回车&#xff0c;出现以下界面表示生成ssh文件成功 二、 找到id_rsa.pub文件 到C盘下找到.ssh文件夹&#xff1a;C:\Users\86187.ssh&am…

使用Git工具生成公钥与私钥

生成密钥对 keytool -genkeypair -alias shopping -keyalg RSA -keypass shopping -keystore shopping.jks -validity 365 -storepass shopping 解析私钥 keytool -list -rfc --keystore shopping.jks | openssl x509 -inform pem -pubkey 输入口令即可

超简单git生成ssh公钥(ssh-keygen)

首先在桌面右键&#xff0c;点击Git bash Here 在命令窗口输入 ssh-keygen -t rsa -C "你的邮箱地址" 回车 这时让你输入密码&#xff0c;这个密码会在你提交项目时使用 然后直接三个回车 到达最后 你会发现桌面上会有一个.pub的文件&#xff0c;右键用记事本打开…