Springboot整合抖音小程序获取access-token图片检测V3

抽取配置文件

appId以及secret需要自行在抖音开放平台获取

dy:appId: ttb0xxxxxsecret: 12a19a426xxxxxxxxxxxxx

获取access-token

参照文档我们调用此接口需要先获取access-token

获取access-token官方文档地址

注意事项

client_token 的有效时间为 2 个小时,重复获取 client_token 后会使上次的 client_token 失效(但有 5 分钟的缓冲时间,连续多次获取 client_token 只会保留最新的两个 client_token)。

import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.hss.common.exception.ServiceException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;import java.util.HashMap;
import java.util.Map;/*** @author zr 2024/10/12*/@Service
@Slf4j
public class DyService {@Value("${dy.appId}")private  String CLIENT_KEY;  // appId@Value("${dy.secret}")private  String CLIENT_SECRET;  // secretprivate static final String CLIENT_TOKEN_URL = "https://open.douyin.com/oauth/client_token/";/*** 获取 access_token** @return 返回 access_token*/public String getAccessToken() {// 构建请求体Map<String, Object> requestBody = new HashMap<>();requestBody.put("grant_type", "client_credential");requestBody.put("client_key", CLIENT_KEY);requestBody.put("client_secret", CLIENT_SECRET);// 发送 POST 请求HttpResponse response = HttpRequest.post(CLIENT_TOKEN_URL).header("Content-Type", "application/json").body(JSONUtil.toJsonStr(requestBody))  // 将请求体转换为 JSON 字符串.timeout(20000)  // 设置超时时间为 20 秒.execute();// 解析响应String responseBody = response.body();JSONObject res = JSON.parseObject(responseBody);log.info("Url: " + CLIENT_TOKEN_URL);log.info("body: " + JSONUtil.toJsonStr(requestBody));log.info("res: " + res);if (!"success".equals(res.getString("message"))){throw new ServiceException("抖音token错误:" + res.get("message"));}String token = res.getJSONObject("data").getString("access_token").toString();return token;}}

图片检测V3

提供给开发者进行图片合法合规校验

图片检测V3原文档地址

请求参数可以使用图片链接或者base64数据,我使用的图片链接,读者有需要可以更换参数使用base64数据

  • censorImage方法传入图片url返回true表示图片合法,false表示图片不合法
  • 图片检测一次请求会检测多项如下图:(****predicts下的所有项目都为false图片才检测为合法)

import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.hss.common.core.domain.R;
import com.hss.common.exception.ServiceException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;import java.util.HashMap;
import java.util.Map;/*** @author zr 2024/10/12*/@Service
@Slf4j
public class DyService {@Value("${dy.appId}")private  String CLIENT_KEY;  // appId@Value("${dy.secret}")private  String CLIENT_SECRET;  // secretprivate static final String CENSOR_IMAGE_URL = "https://open.douyin.com/api/apps/v1/censor/image";private static final String CLIENT_TOKEN_URL = "https://open.douyin.com/oauth/client_token/";/*** 获取 access_token** @return 返回 access_token*/public String getAccessToken() {// 构建请求体Map<String, Object> requestBody = new HashMap<>();requestBody.put("grant_type", "client_credential");requestBody.put("client_key", CLIENT_KEY);requestBody.put("client_secret", CLIENT_SECRET);// 发送 POST 请求HttpResponse response = HttpRequest.post(CLIENT_TOKEN_URL).header("Content-Type", "application/json").body(JSONUtil.toJsonStr(requestBody))  // 将请求体转换为 JSON 字符串.timeout(20000)  // 设置超时时间为 20 秒.execute();// 解析响应String responseBody = response.body();JSONObject res = JSON.parseObject(responseBody);log.info("Url: " + CLIENT_TOKEN_URL);log.info("body: " + JSONUtil.toJsonStr(requestBody));log.info("res: " + res);if (!"success".equals(res.getString("message"))){throw new ServiceException("抖音token错误:" + res.get("message"));}String token = res.getJSONObject("data").getString("access_token").toString();return token;}/*** 图片合法合规校验* @param imageUrl* @return 返回 true/false*/public R<Boolean> censorImage(String imageUrl) {String accessToken = getAccessToken();// 构建请求体Map<String, Object> requestBody = new HashMap<>();requestBody.put("app_id", CLIENT_KEY);requestBody.put("access-token", accessToken);requestBody.put("image", imageUrl);// 发送 POST 请求HttpResponse response = HttpRequest.post(CENSOR_IMAGE_URL).header("access-token", accessToken)  // 在请求头中加入 access-token.header("Content-Type", "application/json")  // 设置Content-Type为application/json.body(JSONUtil.toJsonStr(requestBody))  // 将请求体转换为 JSON 字符串.timeout(20000)  // 设置超时时间.execute();// 解析响应String responseBody = response.body();log.info("Url: " + CLIENT_TOKEN_URL);log.info("body: " + JSONUtil.toJsonStr(requestBody));log.info("res: " + responseBody);JSONObject res = JSON.parseObject(responseBody);if (!"0".equals(res.getString("err_no"))){log.info("抖音图片审核错误:" + res.get("err_msg"));throw new ServiceException("抖音图片审核错误:" + res.get("err_msg"));}List<JSONObject> predicts = res.getList("predicts", JSONObject.class);// 使用流的方式检查是否有任何 hit 为 true 的项目boolean anyHitTrue = predicts.stream().anyMatch(predict -> predict.getBoolean("hit"));if (anyHitTrue) {return R.ok(false, "图片含有敏感信息");} else {return R.ok(true);}}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/447917.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CMake 教程(二)添加库

目录 一、实例一——创建库1、add_library2、target_include_directories()、target_link_libraries()2.1 target_include_directories()2.2 target_link_libraries() 3、实例操作 二、实例二——添加选项1、option()2、实例操作 在第一节 CMake 教程&#xff08;一&#xff09…

fastadmin 列表页表格实现动态列

记录&#xff1a;fastadmin 列表页表格实现动态列 后端代码 /*** 商品库存余额表*/public function kucunbalance(){$houseList (new House)->where([shop_id>SHOP_ID])->order(id desc)->field(name,id)->select();//设置过滤方法$this->request->filte…

LeetCode209.长度最小的子数组

题目链接&#xff1a;209. 长度最小的子数组 - 力扣&#xff08;LeetCode&#xff09; 1.常规解法&#xff08;会超时&#xff09; 可以先将数组的所有子数组求出来&#xff0c;计算其中元素的值&#xff0c;判断与目标值的大小关系&#xff0c;代码如下&#xff1a; public …

Ubuntu里彻底卸载UHD

查看已经安装的UHD版本uhd_find_devices&#xff0c;展示的是当前安装的 UHD 库版本所支持的设备信息&#xff0c;下载了多个版本的uhd但是又记不住安装的位置&#xff0c;想要把所有的uhd相关环境全都删掉&#xff0c;用下边这个命令看一下所有的uhd信息&#xff1a; apt lis…

在 Spring 中使用 @EhCache 注解作为缓存

文章目录 项目概况项目设置一个简单的 RESTful Web 服务Spring 整合 EhCache第 1 步&#xff1a;更新依赖项以使用 EhCache Spring 注解第 2 步&#xff1a;设置自定义缓存管理器第 3 步&#xff1a;配置 EhCache第 4 步&#xff1a;测试缓存 刷新缓存总结推荐阅读文章 EhCache…

Visual Studio的实用调试技巧总结

对于很多学习编程的老铁们来说&#xff0c;是不是也像下面这张图一样写代码呢&#xff1f; 那当我们这样编写代码的时候遇到了问题&#xff1f;大家又是怎么排查问题的呢&#xff1f;是不是也像下面这张图一样&#xff0c;毫无目的的一遍遍尝试呢&#xff1f; 这篇文章我就以 V…

k8s的微服务

ipvs模式 Service 是由 kube-proxy 组件&#xff0c;加上 iptables 来共同实现的 kube-proxy 通过 iptables 处理 Service 的过程&#xff0c;需要在宿主机上设置相当多的 iptables 规则&#xff0c;如果宿主机有大量的Pod&#xff0c;不断刷新iptables规则&#xff0c;会消耗…

QT:计算点到线段的垂线段的距离

描述 在Qt中&#xff0c;要计算一个点到一条线段的垂线段的长度&#xff08;即点到线段上最近点的距离&#xff0c;且这个点是垂直于线段的&#xff09;&#xff0c;你不能直接使用QVector2D::distanceToLine&#xff0c;因为这个方法计算的是点到直线的垂直距离&#xff0c;而…

2024-09-22 进程优先级,进程切换

一、僵尸状态 & 孤儿进程 进程退出&#xff1a;内核数据结构&#xff08;task_struct 维护&#xff09; 代码和数据&#xff08;直接释放&#xff09; 代码不会执行了首先可以立即释放的就是进程对应的程序信息数据。进程退出要有退出信息&#xff08;进程的退出码&#…

六西格玛设计DFSS方法论在消费级无人机设计中的应用——张驰咨询

本文基于六西格玛设计方法论&#xff0c;对消费级无人机的设计流程进行系统化研究&#xff0c;探讨如何通过六西格玛设计的理念、工具和方法提升无人机产品的设计质量和市场竞争力。文章从市场定位、客户需求分析出发&#xff0c;深入到关键KPI指标的制定&#xff0c;并逐步阐述…

【网络安全】漏洞案例:提升 Self-XSS 危害

未经许可,不得转载。 文章目录 Self-XSS-1Self-XSS-2Self-XSS-1 目标应用程序为某在线商店,在其注册页面的First Name字段中注入XSS Payload: 注册成功,但当我尝试登录我的帐户时,我得到了403 Forbidden,即无法登录我的帐户。 我很好奇为什么我无法登录我的帐户,所以我…

前端高频面试题2024/9/22(偏项目问题--通用后台管理系统)

文章目录 一.前端项目概述1.系统登录注册模块1.对注册的密码进行加密 &#xff08;使用加密中间件bcrypt.js&#xff09;2.登录成功后返回token3.前端登录页面有用到弹性布局&#xff0c;ref和reactive4.登录头像&#xff1a;文件上传 2.系统设置模块2.系统首页模块&#xff08…

使用electron+vue开发桌面应用

electron是什么 electron由Node.jsChromiumNative APIs构成。你可以理解成&#xff0c;它是一个得到了Node.js和基于不同平台的Native APIs加强的Chromium浏览器&#xff0c;可以用来开发跨平台的桌面级应用。 它的开发主要涉及到两个进程的协作——Main&#xff08;主&#x…

Java通过RAG构建专属知识问答机器人_超详细

RAG&#xff1a;融合检索与生成的文本精准生成技术 检索增强生成&#xff08;RAG&#xff09;是一种技术&#xff0c;它通过结合检索模型和生成模型来提高文本生成的准确性。具体来说&#xff0c;RAG首先利用检索模型从私有或专有的数据源中搜索相关信息&#xff0c;然后将这些…

编程练习7 5G网络建设

需要用到并查集的相关知识&#xff1a;可以参考如下链接 并查集详解&#xff08;原理代码实现应用优化&#xff09;-CSDN博客 #include<iostream> #include<algorithm> #include<vector>using namespace std;vector<int> split(string params_str) {…

ICT产业新征程:深度融合与高质量发展

在信息时代的浪潮中&#xff0c;每一场关于技术革新与产业融合的盛会都闪耀着智慧的光芒&#xff0c;引领着未来的方向。9月25日&#xff0c;北京国家会议中心内&#xff0c;一场聚焦全球信息通信业的顶级盛事——第32届“国际信息通信展”&#xff08;PT展&#xff09;隆重拉开…

【LwIP源码学习3】TCP协议栈分析——数据接收流程

前言 本文介绍代码在lwip的tcp_in.c文件中&#xff0c;主要介绍TCP协议栈中数据的接收流程。 正文 1、一个正常的TCP数据&#xff0c;首先会传入到 tcp_input(struct pbuf *p, struct netif *inp)函数&#xff0c;其中指针p指向传入的数据流。 2、从数据流中获取TCP头部 …

通过Express + Vue3从零构建一个用户认证与授权系统(二)数据库与后端项目搭建与实现

前言 上一篇完成了系统的相关设计文档的编写&#xff0c;本文将详细介绍如何一步步使用 TypeScript 和 Express 搭建一个模块化、类型安全的用户认证与授权系统&#xff0c;包括数据库设计、后端项目搭建、用户认证、角色与权限管理、错误处理以及 Swagger 文档集成。 项目准…

【ubuntu】ubuntu20.04安装cuda12.6与显卡驱动

目录 1.安装cuda12.6 2.安装显卡驱动 1.安装cuda12.6 https://developer.nvidia.com/cuda-toolkit-archive https://developer.nvidia.com/cuda-12-6-0-download-archive?target_osLinux&target_archx86_64&DistributionUbuntu&target_version20.04&target_…

DART: Implicit Doppler Tomography for Radar Novel View Synthesis 笔记

Link&#xff1a;https://wiselabcmu.github.io/dart/ Publish&#xff1a; 2024CVPR Abstract DART主要任务就是用来合成雷达距离多普勒图像range-droppler&#xff0c;可用于生成高质量的断层扫描图像。 Related Work 1 Radar Simulation 基于模型的方法 任务&#xff…