zcensor/lib/service/baidu.py
2021-06-17 12:01:51 +08:00

77 lines
2.5 KiB
Python

# encoding:utf-8
import asyncio
import urllib.parse
import urllib.request
from urllib.request import Request, urlopen
from random import random
from urllib.error import URLError
import json
cates = ['暴恐违禁', '文本色情', '政治敏感', '恶意推广', '低俗辱骂', '低质灌水']
def random_int(start, end):
return int(random() * (end - start) + start)
def get_ip():
return '%d.%d.%d.%d' % (random_int(1, 254), random_int(1, 254), random_int(1, 254), random_int(1, 254))
async def check_baidu(txt):
url = 'https://ai.baidu.com/aidemo'
num1 = int(random() * 10 + 70)
num2 = int(random() * 100)
user_agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_0_1) AppleWebKit/537.36 (KHTML, like Gecko) ' \
'Chrome/%d.0.4324.%d Safari/537.36' % (num1, num2)
headers = {'User-Agent': user_agent,
'Content-Type': 'application/x-www-form-urlencoded',
'referer': 'https://ai.baidu.com/tech/textcensoring',
'X-Forwarded-For': get_ip()
}
values = {
'content': txt,
'type': 'textcensor',
'apiType': 'censor'
}
data = urllib.parse.urlencode(values)
data = data.encode('ascii')
req = Request(url, data, headers)
try:
response = urlopen(req)
except URLError as e:
if hasattr(e, 'reason'):
print('We failed to reach a server.')
print('Reason: ', e.reason)
return {'errcode': 100, 'errmsg': e.reason}
elif hasattr(e, 'code'):
print('The server couldn\'t fulfill the request.')
print('Error code: ', e.code)
return {'errcode': 100, 'errmsg': e.code}
else:
res = json.loads(response.read().decode('utf-8'))
print(res)
if res['errno'] != 0:
return {'errcode': 100, 'errmsg': res['msg']}
result_data = res['data']['result']
reasons = []
risk = 0
if 'review' in result_data and len(result_data['review']) > 0:
risk = 1
review_data = result_data['review']
for d in review_data:
reasons.append((cates[d['label'] - 1], d['score']))
if 'reject' in result_data and len(result_data['reject']) > 0:
risk = 1
reject_data = result_data['reject']
for d in reject_data:
reasons.append((cates[d['label'] - 1], d['score']))
return {'errcode': 0, 'risk': risk, 'reason': reasons}
async def main():
await check_baidu('私人侦探修宪')
# asyncio.run(main())