怒爬某 Hub 资源就为撸了一个鉴黄平台

news/2024/7/19 13:29:07 标签: javascript, js, github, html, restful
htmledit_views">
html" title=js>js_content">

黄色已经是我们所不容然而却防不胜防的,尤其是对于做内容的工具和平台,所以花了30分钟搭建了一个鉴黄平台,分享给大家。

数据准备

找了 N 多资源都不能解决问题,于是怒爬某 Bub资料,备用准备验证鉴黄效果。

账号准备

本文使用的是 UCloud 提供的 UAI-Censor,目前他支持图片,暴恐、涉政会陆续上线。他提供了每日2000张免费调用额度,所以无论对于测试还是小众的工具足够了。

1. 使用如下链接注册账号

https://urlify.cn/UNjURr

2. 创建 UAI-Censor 应用

获得应用 ID 进行鉴黄 API 调用的时候使用,注册成功以后进入控制台,搜索 UAI,然后点击 AI 内容审核


点击创建应用,输入自定义的应用名称,点击确定


点击确定以后会显示成功的弹框,高亮部分就是你的应用ID,留着备用


3. 获取公钥、私钥,应用ID

获取了,但是不能所有人都操作吧?所有需要去注册一个公钥和私钥,这样只有你自己可以使用。点击进入如下链接
https://console.ucloud.cn/uapi/apikey
点击显示即可查看公钥私钥了


到这里就是万事具备只欠东风

4. 编码

在编码之前我们可以手工调用一下 API 看下返回结果


如图所示,我们输入公钥、私钥和应用ID以后,点击验证会返回一堆的 JSON 其实我们关心的就是 Result 里面的 Porn 的 Suggestion,pass-放行, forbid-封禁, check-人工审核,那么上面这个测试就是 pass 放行了,等下,你居然不相信是吗?这时候某 Hub 的资源就派上用场了,来一张。
实在不忍直视啊,我就打码了,不过看到  forbid了吗


那我们直接编码吧,代码也是非常的简单,其中uaicensorPublicKey 和 uaicensorPrivateKey 是你自己的,这里就不显示了,因为使用的是 SpringBoot 项目,RestTemplate 用起来也是非常简单。

 /**
     * @param imageUrl
     * @return pass-放行, forbid-封禁, check-人工审核
     * @throws Exception
     */
    public String check(String imageUrl) {
        String ucloudUrl = "http://api.uai.ucloud.cn/v1/image/scan";
        String appId = "uaicensor-rjmvogpx";
        String uaicensorPublicKey = null;
        String uaicensorPrivateKey = null;
        
        //图片绝对路径
        RestTemplate rest = new RestTemplate();
        HttpHeaders headers = new HttpHeaders();
        /**
         * 生成signature,首字母排序
         */
        String timestamp = System.currentTimeMillis() + "";
        SortedMap<Object, Object> packageParams = new TreeMap<>();
        packageParams.put("PublicKey", uaicensorPublicKey);
        packageParams.put("ResourceId", appId);
        packageParams.put("Timestamp", timestamp);
        packageParams.put("Url", imageUrl);
        String signature = null;
        try {
            signature = UCloudUtil.createSign(packageParams, uaicensorPrivateKey);
        } catch (Exception e) {
            return null;
        }
        /**
         * 参数
         */
        MultiValueMap<String, Object> param = new LinkedMultiValueMap<>();
        param.add("Scenes", "porn");
        param.add("Method", "url");
        param.add("Url", imageUrl);
        /**
         * headers 参数
         */
        headers.setContentType(MediaType.parseMediaType("multipart/form-data; charset=UTF-8"));
        headers.set("PublicKey", uaicensorPublicKey);
        headers.set("Signature", signature);
        headers.set("ResourceId", appId);
        headers.set("Timestamp", timestamp);
        HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<>(param, headers);
        ResponseEntity<String> responseEntity = rest.exchange(ucloudUrl, HttpMethod.POST, httpEntity, String.class);
        String body = responseEntity.getBody();
        JSONObject html" title=js>jsonObject = JSON.parseObject(body);
        if (html" title=js>jsonObject.getInteger("RetCode") == 0) {
            String res = html" title=js>jsonObject.getJSONObject("Result").getJSONObject("Porn").getString("Suggestion");
            return res;
        }
        return null;
    }

是不是非常简单?那么开始你的探索之旅吧?

往期精彩回顾

让人又爱又恨的 Lombok,到底该不该用

Delombok 是个啥?居然可破 Lombok?

跳槽的必要条件是有一份好的简历

时候为自己的后半生考虑了——致奔三的互联网人

点个赞呗


http://www.niftyadmin.cn/n/1332323.html

相关文章

sqlserver 创建登录名报错:‘User, group, or role ‘arms‘ already exists in the current database‘

sqlserver 创建登录名报错如下图 这是因为sqlserver分为用户和登录名&#xff0c; navicate登录需要登录名。一般我们在单节点创建登录名会sqlserver同时会在数据库里创建用户名&#xff0c;二者关联。但是在群集中&#xff0c;我们在主节点创建登录名后&#xff0c;主节点会把…

别在网上乱找代码了,找了一段代码突然爆了!!!

本人是做游戏服务器开发的&#xff0c;碰到一个需求&#xff0c;给符某些要求的玩家的发送道具奖励&#xff0c;奖励的数量根据离线的天数计算。这个需求实现起来很简单&#xff0c;只需要在玩家上线的时候计算上次离线时间和当前时间间隔的天数&#xff0c;然后根据策划的算法…

互联网公司忽悠员工的黑话,套路太深了。。。

据说这些是互联网公司招工时忽悠的黑话&#xff0c;大家来看看是不是真的&#xff1f;再列举几个黑话&#xff1a;老板&#xff1a;产品&#xff1a;程序员&#xff1a;据说这些是互联网公司招工时忽悠的黑话&#xff0c;大家来看看是不是真的&#xff1f;再列举几个黑话&#…

sqlserver 2019 群集加固

详见CIS加固文档 链接&#xff1a;https://pan.baidu.com/s/1xILe1bn8r7BBlKG_Us4CsQ 提取码&#xff1a;qv8d

不要再自己封装各种Util工具类了,这款神仙级框架你值得拥有!

来源&#xff1a;ryanc.cc/archives/hutool-java-tools-lib作者&#xff1a;Ryan Wang简介Hutool 谐音 “糊涂”&#xff0c;寓意追求 “万事都作糊涂观&#xff0c;无所谓失&#xff0c;无所谓得” 的境界。Hutool 是一个 Java 工具包&#xff0c;也只是一个工具包&#xff0c…

An operation on a socket could not be performed because the system lacked sufficient buffer space or

dkron &#xff08;dkron 是一个定时任务执行系统&#xff0c;可以将所有的定时任务写成接口形式&#xff0c;用这个定时任务系统统一管理&#xff09;定时任务所有的定时任务都不执行了&#xff0c;启动不了&#xff0c;查看日志报错: An operation on a socket could not be …

15000 字的 SQL 语句大全

点击上方 果汁简历 &#xff0c;选择“置顶公众号”优质文章&#xff0c;第一时间送达一、基础1、说明&#xff1a;创建数据库CREATE DATABASE database-name2、说明&#xff1a;删除数据库drop database dbname3、说明&#xff1a;备份sql server--- 创建 备份数据的 deviceUS…

关于sqlserver always on群集创建登录名和数据库用户名丢失关联

最近部署遇到一个问题&#xff0c;在always on 群集主节点用ssms工具创建登录名&#xff0c;然后故障故障转移到从节点创建登录名&#xff0c;用 sp_change_users_login 关联后&#xff0c;先前主节点登录名和数据库用户名就会丢失关联&#xff0c;这样集群就会有问题 经调查&…