forgeplus/app/libs/dun_check/text_check.rb

165 lines
5.2 KiB
Ruby
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

class DunCheck::TextCheck
# include DunCheck::PublicParams
#text_params = {
# content: "ccc", #内容
# ip: "xxx", #用户ip
# account: "xxx", #登录login
# nickname: "xxx", #用户姓名
# title: "xxx", #帖子的标题
# }
#检测结果0通过1嫌疑2不通过
# include ActionView::Helpers::LoopTextsHelper
require 'uri'
require 'net/http'
def initialize(text_params)
@text_params = text_params
end
def call
new_text_params = @text_params
text_long_array = []
check_content = new_text_params[:content]
format_text(check_content,text_long_array)
(1..text_long_array.size).each do |i|
new_text_params.merge!(content: text_long_array[i-1])
check_result = check_text(new_text_params)
if check_result[:status].to_i == -1
return check_result
break
else
if i == text_long_array.size
return check_result
else
next
end
end
end
end
def check_text(text_params)
begin
dun_params = check_dun_params(text_params)
# api_url = Redmine::Configuration['dun']['text_api']
api_url = EduSetting.get("dun_text_api")
uri = URI.parse(api_url)
http = Net::HTTP.new(uri.hostname, uri.port)
if api_url.include?("https://")
http.use_ssl = true
end
dun_params_str = URI.encode_www_form(dun_params)
header = {'content-type':'application/x-www-form-urlencoded'}
response = http.post(uri.path, dun_params_str, header)
response_body = eval(response.body)
Rails.logger.info("======response========#{response_body}")
if response_body[:code].to_i == 200
response_body_result = response_body[:result]
response_body_labels = response_body_result[:labels].present? ? response_body_result[:labels][0] : []
extra_params = {
action: response_body_result[:action],
taskId: response_body_result[:taskId],
infos: response_body_labels.present? ? sub_lables[:"#{response_body_labels[:subLabels][0][:subLabel]}"] : ""
}
render_status = response_body_result[:action].to_i == 0 ? 1 : -1
tip_status(render_status, response_body[:msg], extra_params)
else
tip_status(-1, response_body[:msg])
end
rescue Exception => ex
Rails.logger.info "*** transaction abored!"
Rails.logger.info "*** errors: #{ex.message}"
tip_status(-1, "检测失败")
end
end
private
def check_dun_params(text_params)
dun_public_params = DunCheck::PublicParams.new("text")
rand_data_id = random_dataId
check_params = {
dataId: rand_data_id,
version: "v3.1",
callback: rand_data_id
}.merge(text_params)
check_params.merge!(dun_public_params.call)
dun_params = dun_public_params.generate_sign(check_params)
return dun_params
end
def format_text(text_long, text_long_array)
slice_content = text_long.slice(0..4998)
last_slice_content = text_long.slice(4999..-1)
text_long_array.push(slice_content)
if last_slice_content.present?
if last_slice_content.length > 4999
format_text(last_slice_content, text_long_array)
else
text_long_array.push(last_slice_content)
end
end
end
def random_dataId
Digest::MD5.hexdigest(rand(100000000).to_s)
end
def check_labels
# 100色情200广告260广告法300暴恐400违禁500涉政600谩骂700灌水
%w(100 200 260 300 400 500 600 700).join(",")
end
def tip_status(status, message, msg_params={})
return {status: status, message: message, extra_params: msg_params}
end
def sub_lables
{
"100001": "色情其他",
"100002": "色情传播",
"100003": "色情性器官",
"100004": "色情挑逗",
"100005": "色情低俗段子",
"100006": "色情性行为",
"100007": "色情舆情事件",
"100008": "色情交友类",
"200009": "商业推广",
"200010": "广告法",
"200011": "刷量行为",
"200012": "广告其他",
"260052": "广告法-涉医疗用语(非药品禁止宣传药效)",
"260053": "广告法-迷信用语",
"260054": "广告法-需要凭证(可以写但需要凭证证明)",
"260055": "广告法-限时性用语(可以写但必须有具体时间)",
"260056": "广告法-涉嫌诱导消费者",
"260057": "广告法-涉嫌欺诈消费者",
"260058": "广告法-法律风险较高",
"260059": "广告法-极限词(用语绝对化)",
"300016": "暴恐其他",
"400017": "违禁其他",
"400021": "违禁网监要求",
"500013": "涉政其他",
"500014": "敏感专项",
"500015": "严格涉政",
"500039": "时事报道",
"500040": "领导人相关",
"500041": "英雄烈士相关",
"500042": "邪教迷信",
"500043": "落马官员相关",
"500044": "热点舆情",
"500045": "涉政综合",
"600018": "谩骂其他",
"700019": "灌水其他",
"900020": "其他",
}
end
end