规范博客内容与评论说明

/ 2评 / 0

博客为积极响应国家颁布的《互联网跟帖评论服务管理规定》,文章内容审核,用户评论审核,均由百度文本内容审核API进行内容过滤,涉及黄赌毒的账号将直接提交证据截图和账号实名信息给相关部门处理,请爱惜本站账号。

严格执行《网络安全法》第十二条第二款的规定:

任何个人和组织使用网络应当遵守宪法法律,遵守公共秩序,尊重社会公德,不得危害网络安全,不得利用网络从事危害国家安全、荣誉和利益,煽动颠覆国家政权、推翻社会主义制度,煽动分裂国家、破坏国家统一,宣扬恐怖主义、极端主义,宣扬民族仇恨、民族歧视,传播暴力、淫秽色情信息,编造、传播虚假信息扰乱经济秩序和社会秩序,以及侵害他人名誉、隐私、知识产权和其他合法权益等活动。

网安备案即将提交交互式网站,为了不给网警叔叔增加工作量,为和谐的网络环境做一点点贡献,博客后续会更加严格审核文章、评论内容。

2050/05/08

增加评论者 IPV4 / IPV6 地址记录。

演示图片:

凡是触发审核机制的评论和内容将直接过滤,需人工审核后显示,情节严重者,系统直接删除,并封禁账号,审核机制分A\B\C三个程度。

百度文本审核说明:

百度文本内容审核检测文本中夹杂的色情、推广、辱骂、违禁、涉政、灌水等垃圾内容,净化网络环境,为您的应用提供更可靠的内容安全保障,运用业界领先的深度学习技术,判断一段文本内容是否符合网络发文规范,实现自动化、智能化的文本审核。

核心代码如下:

本站内容审核代码有 Baidu TextCensor For Comments 二次开发演变而成,以下代码由沈唁志提供,非常感谢!

原作者GitHub:https://github.com/sy-records/wp-baidu-textcensor

插件发布页:https://qq52o.me/2720.html

<?php

namespace Luffy\TextCensor;

class AipBase
{
    /**
     * 获取access token url
     * @var string
     */
    public $accessTokenUrl = 'https://aip.baidubce.com/oauth/2.0/token';

    /**
     * 内容审核平台-文本 url
     * @var string
     */
    protected $textCensorUserDefinedUrl = 'https://aip.baidubce.com/rest/2.0/solution/v1/text_censor/v2/user_defined';

    /**
     * appId
     * @var string
     */
    protected $appId = '';

    /**
     * apiKey
     * @var string
     */
    protected $apiKey = '';

    /**
     * secretKey
     * @var string
     */
    protected $secretKey = '';

    /**
     * version
     * @var string
     */
    protected $version = '2_2_17';

    /**
     * 权限
     * @var array
     */
    protected $scope = 'brain_all_scope';

    /**
     * @var null
     */
    protected $isCloudUser = null;

    /**
     * @param string $appId
     * @param string $apiKey
     * @param string $secretKey
     */
    public function __construct($appId, $apiKey, $secretKey)
    {
        $this->appId = trim($appId);
        $this->apiKey = trim($apiKey);
        $this->secretKey = trim($secretKey);
    }

    /**
     * Api 请求
     * @param string $url
     * @param mixed $data
     * @return mixed
     */
    protected function request($url, $data, $headers = array())
    {
        try {
            $params = array();
            $authObj = $this->auth();
            if ($this->isCloudUser === false) {
                $params['access_token'] = $authObj['access_token'];
            }
            $params['aipSdk'] = 'php';
            $params['aipSdkVersion'] = $this->version;
            $response = $this->baiduWpRequest($url . "?" . http_build_query($params), $data, 1);

            $obj = $this->proccessResult($response['content']);
            if (!$this->isCloudUser && isset($obj['error_code']) && $obj['error_code'] == 110) {
                $authObj = $this->auth(true);
                $params['access_token'] = $authObj['access_token'];
                $response = $this->baiduWpRequest($url . "?" . http_build_query($params), $data, 1);
                $obj = $this->proccessResult($response['content']);
            }

            if (empty($obj) || !isset($obj['error_code'])) {
                $this->writeAuthObj($authObj);
            }
        } catch (\Exception $e) {
            return array(
                'error_code' => 'SDK108',
                'error_msg' => 'connection or read data timeout',
            );
        }

        return $obj;
    }

    /**
     * 格式化结果
     * @param $content string
     * @return mixed
     */
    protected function proccessResult($content)
    {
        return json_decode($content, true);
    }

    /**
     * 返回 access token 路径
     * @return string
     */
    private function getAuthFilePath()
    {
        return dirname(__DIR__) . '/runtime/' . md5($this->apiKey);
    }

    /**
     * 写入本地文件
     * @param array $obj
     * @return void
     */
    private function writeAuthObj($obj)
    {
        if ($obj === null || (isset($obj['is_read']) && $obj['is_read'] === true)) {
            return;
        }

        $obj['time'] = time();
        $obj['is_cloud_user'] = $this->isCloudUser;
        @file_put_contents($this->getAuthFilePath(), json_encode($obj));
    }

    /**
     * 读取本地缓存
     * @return array
     */
    private function readAuthObj()
    {
        $content = @file_get_contents($this->getAuthFilePath());
        if ($content !== false) {
            $obj = json_decode($content, true);
            $this->isCloudUser = $obj['is_cloud_user'];
            $obj['is_read'] = true;
            if ($this->isCloudUser || $obj['time'] + $obj['expires_in'] - 30 > time()) {
                return $obj;
            }
        }

        return null;
    }

    /**
     * 认证
     * @param bool $refresh 是否刷新
     * @return array
     */
    public function auth($refresh = false)
    {
        if (!$refresh) {
            $obj = $this->readAuthObj();
            if (!empty($obj)) {
                return $obj;
            }
        }

        $response = $this->baiduWpRequest(
            $this->accessTokenUrl,
            array(
                'grant_type' => 'client_credentials',
                'client_id' => $this->apiKey,
                'client_secret' => $this->secretKey,
            )
        );

        $obj = json_decode($response['content'], true);

        $this->isCloudUser = !$this->isPermission($obj);
        return $obj;
    }

    /**
     * 判断认证是否有权限
     * @param array $authObj
     * @return boolean
     */
    protected function isPermission($authObj)
    {
        if (empty($authObj) || !isset($authObj['scope'])) {
            return false;
        }

        $scopes = explode(' ', $authObj['scope']);

        return in_array($this->scope, $scopes);
    }

    /**
     * @param $url
     * @param string $params
     * @param int $ispost
     * @return array
     */
    private function baiduWpRequest($url, $params = "", $ispost = 0)
    {
        $args = array(
            'timeout' => '15'
        );
        if ($ispost) {
            $args['body'] = $params;
            $response = wp_remote_post($url, $args);
        } else {
            $params = is_array($params) ? http_build_query($params) : $params;
            if ($params) {
                $response = wp_remote_get($url . '?' . $params, $args);
            } else {
                $response = wp_remote_get($url, $args);
            }
        }
        $body = '';
        if (is_array($response) && !is_wp_error($response) && $response['response']['code'] == '200') {
            $body = $response['body'];
        }
        return array(
            'content' => $body
        );
    }

    /**
     * @param $message
     * @return mixed
     */
    public function textCensorUserDefined($message)
    {
        $data = array();
        $data['text'] = $message;
        return $this->request($this->textCensorUserDefinedUrl, $data);
    }
}

百度文本审核具体参数说明:

https://ai.baidu.com/ai-doc/ANTIPORN/Nk3h6xbb2

交互式网站备案说明:

公安局备案交互式网站需搭建配套流程,注册后登录才可发言,而且还要为网站制定网络安全管理制度、应急预案、网站内容审核制度(含评论)以及网络安全防范等措施,要履行网络安全保护的义务

  1. 滑稽园扛把子说道:

    用代码也该留个链接吧?github或者我博客原链接也行?

发表评论

电子邮件地址不会被公开。 必填项已用*标注