77 lines
2.5 KiB
Python
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())
|