# 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())