├── .github └── workflows │ └── mirror.yml ├── crawler ├── crawler_submit.py ├── crawler_job_submit.py └── crawler_callback.py ├── keyword ├── keyword_delete.py ├── keyword_submit.py └── keyword_query.py ├── image ├── imagelist_delete.py ├── imagelist_update.py ├── imagelist_submit.py ├── imagelist_query.py ├── image_submit.py ├── image_query.py └── image_callback.py ├── README.md ├── list ├── list_update.py ├── list_submit.py ├── list_delete.py └── list_query.py ├── filesolution ├── filesolution_submit.py ├── filesolution_callback.py └── filesolution_query.py ├── livevideosolution ├── livevideosolution_submit.py ├── livevideosolution_querymonitor.py ├── livevideosolution_feedback.py ├── livevideosolution_queryimage.py └── livevideosolution_queryaudio.py ├── audio ├── audio_submit.py ├── liveaudio_check.py ├── liveaudio_queryextra.py ├── liveaudio_querymonitor.py ├── liveaudio_feedback.py └── liveaudio_querytask.py ├── aigc ├── aigc_stream_push.py └── aigc_stream_callback.py ├── report ├── report_submit.py └── report_query.py ├── digital ├── digital_submit.py └── digital_query.py ├── video ├── livewall_submit.py ├── livevideo_submit.py ├── video_submit.py ├── livevideo_query.py ├── livevideo_feedback.py ├── livewall_querymonitor.py ├── livevideo_callback.py ├── videoimage_query.py ├── video_callback.py ├── video_query.py └── liveimage_query.py ├── videosolution └── videosolution_submit.py ├── text ├── text_submit.py └── text_query.py └── mediasolution ├── mediasolution_submit.py └── mediasolution_query.py /.github/workflows/mirror.yml: -------------------------------------------------------------------------------- 1 | name: Mirror to Gitee 2 | 3 | on: push 4 | 5 | jobs: 6 | 7 | sync: 8 | 9 | runs-on: ubuntu-latest 10 | 11 | steps: 12 | 13 | - uses: actions/checkout@v1 14 | 15 | - uses: spyoungtech/mirror-action@master 16 | 17 | with: 18 | 19 | REMOTE: https://gitee.com/netease_yidun/antispam-python-demo.git 20 | 21 | GIT_USERNAME: ${{ secrets.GITEE_USERNAME }} 22 | 23 | GIT_PASSWORD: ${{ secrets.GITEE_PASSWORD }} 24 | -------------------------------------------------------------------------------- /crawler/crawler_submit.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | 易盾反垃圾云服务网站检测解决方案提交接口python示例代码 5 | 接口文档: http://dun.163.com/api.html 6 | python版本:python3.7 7 | 运行: 8 | 1. 修改 SECRET_ID,SECRET_KEY 为对应申请到的值 9 | 2. $ python crawler_submit.py 10 | """ 11 | __author__ = 'yidun-dev' 12 | __date__ = '2019/11/27' 13 | __version__ = '0.2-dev' 14 | 15 | import hashlib 16 | import time 17 | import random 18 | import urllib3 19 | from urllib.parse import urlencode 20 | import json 21 | from gmssl import sm3, func 22 | 23 | 24 | class CrawlerSubmitAPIDemo(object): 25 | """网站检测解决方案检测提交接口示例代码""" 26 | 27 | API_URL = "http://as.dun.163.com/v3/crawler/submit" 28 | VERSION = "v3.0" 29 | 30 | def __init__(self, secret_id, secret_key): 31 | """ 32 | Args: 33 | secret_id (str) 产品密钥ID,产品标识 34 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 35 | """ 36 | self.secret_id = secret_id 37 | self.secret_key = secret_key 38 | self.http = urllib3.PoolManager() # 初始化连接池 39 | 40 | def gen_signature(self, params=None): 41 | """生成签名信息 42 | Args: 43 | params (object) 请求参数 44 | Returns: 45 | 参数签名md5值 46 | """ 47 | buff = "" 48 | for k in sorted(params.keys()): 49 | buff += str(k) + str(params[k]) 50 | buff += self.secret_key 51 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 52 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 53 | else: 54 | return hashlib.md5(buff.encode("utf8")).hexdigest() 55 | 56 | def check(self, params): 57 | """请求易盾接口 58 | Args: 59 | params (object) 请求参数 60 | Returns: 61 | 请求结果,json格式 62 | """ 63 | params["secretId"] = self.secret_id 64 | params["version"] = self.VERSION 65 | params["timestamp"] = int(time.time() * 1000) 66 | params["nonce"] = int(random.random() * 100000000) 67 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 68 | params["signature"] = self.gen_signature(params) 69 | 70 | try: 71 | encoded_params = urlencode(params).encode("utf8") 72 | response = self.http.request( 73 | 'POST', 74 | self.API_URL, 75 | body=encoded_params, 76 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 77 | timeout=urllib3.Timeout(connect=1.0, read=1.0) 78 | ) 79 | content = response.data 80 | return json.loads(content) 81 | except Exception as ex: 82 | print("调用API接口失败:", str(ex)) 83 | 84 | 85 | if __name__ == "__main__": 86 | """示例代码入口""" 87 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 88 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 89 | api = CrawlerSubmitAPIDemo(SECRET_ID, SECRET_KEY) 90 | 91 | params = { 92 | "dataId": "6a7c754f9de34eb8bfdf03f209fcfc02", 93 | "url": "http://xxx.com", 94 | # 多个检测项时用英文逗号分隔 95 | "checkFlags": "1,2" 96 | } 97 | 98 | ret = api.check(params) 99 | 100 | code: int = ret["code"] 101 | msg: str = ret["msg"] 102 | if code == 200: 103 | result: dict = ret["result"] 104 | taskId: str = result["taskId"] 105 | dataId: str = result["dataId"] 106 | print("SUBMIT SUCCESS: taskId=%s, dataId=%s" % (taskId, dataId)) 107 | else: 108 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 109 | -------------------------------------------------------------------------------- /keyword/keyword_delete.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | 易盾反垃圾云服务敏感词删除接口python示例代码 5 | 接口文档: http://dun.163.com/api.html 6 | python版本:python3.7 7 | 运行: 8 | 1. 修改 SECRET_ID,SECRET_KEY,BUSINESS_ID 为对应申请到的值 9 | 2. $ python keyword_delete.py 10 | """ 11 | __author__ = 'yidun-dev' 12 | __date__ = '2020/01/02' 13 | __version__ = '0.2-dev' 14 | 15 | import hashlib 16 | import time 17 | import random 18 | import urllib3 19 | from urllib.parse import urlencode 20 | import json 21 | from gmssl import sm3, func 22 | 23 | 24 | class KeywordDeleteAPIDemo(object): 25 | """敏感词删除接口示例代码""" 26 | 27 | API_URL = "http://as.dun.163.com/v1/keyword/delete" 28 | VERSION = "v1" 29 | 30 | def __init__(self, secret_id, secret_key, business_id): 31 | """ 32 | Args: 33 | secret_id (str) 产品密钥ID,产品标识 34 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 35 | business_id (str) 业务ID,易盾根据产品业务特点分配 36 | """ 37 | self.secret_id = secret_id 38 | self.secret_key = secret_key 39 | self.business_id = business_id 40 | self.http = urllib3.PoolManager() # 初始化连接池 41 | 42 | def gen_signature(self, params=None): 43 | """生成签名信息 44 | Args: 45 | params (object) 请求参数 46 | Returns: 47 | 参数签名md5值 48 | """ 49 | buff = "" 50 | for k in sorted(params.keys()): 51 | buff += str(k) + str(params[k]) 52 | buff += self.secret_key 53 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 54 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 55 | else: 56 | return hashlib.md5(buff.encode("utf8")).hexdigest() 57 | 58 | def check(self, params): 59 | """请求易盾接口 60 | Args: 61 | params (object) 请求参数 62 | Returns: 63 | 请求结果,json格式 64 | """ 65 | params["secretId"] = self.secret_id 66 | params["businessId"] = self.business_id 67 | params["version"] = self.VERSION 68 | params["timestamp"] = int(time.time() * 1000) 69 | params["nonce"] = int(random.random() * 100000000) 70 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 71 | params["signature"] = self.gen_signature(params) 72 | 73 | try: 74 | encoded_params = urlencode(params).encode("utf8") 75 | response = self.http.request( 76 | 'POST', 77 | self.API_URL, 78 | body=encoded_params, 79 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 80 | timeout=urllib3.Timeout(connect=1.0, read=1.0) 81 | ) 82 | content = response.data 83 | return json.loads(content) 84 | except Exception as ex: 85 | print("调用API接口失败:", str(ex)) 86 | 87 | 88 | if __name__ == "__main__": 89 | """示例代码入口""" 90 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 91 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 92 | BUSINESS_ID = "your_business_id" # 业务ID,易盾根据产品业务特点分配 93 | api = KeywordDeleteAPIDemo(SECRET_ID, SECRET_KEY, BUSINESS_ID) 94 | 95 | # 私有请求参数 96 | ids: list = ["425707", "425708", "425709"] 97 | params = { 98 | "ids": ",".join(ids) 99 | } 100 | 101 | ret = api.check(params) 102 | 103 | code: int = ret["code"] 104 | msg: str = ret["msg"] 105 | if code == 200: 106 | result: bool = ret["result"] 107 | print("敏感词删除结果: %s" % result) 108 | else: 109 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 110 | -------------------------------------------------------------------------------- /image/imagelist_delete.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | 易盾反垃圾云服务图片名单删除接口python示例代码 5 | 接口文档: http://dun.163.com/api.html 6 | python版本:python3.7 7 | 运行: 8 | 1. 修改 SECRET_ID,SECRET_KEY,BUSINESS_ID 为对应申请到的值 9 | 2. $ python imagelist_delete.py 10 | """ 11 | __author__ = 'yidun-dev' 12 | __date__ = '2020/10/29' 13 | __version__ = '0.2-dev' 14 | 15 | import hashlib 16 | import time 17 | import random 18 | import urllib3 19 | from urllib.parse import urlencode 20 | import json 21 | from gmssl import sm3, func 22 | 23 | 24 | class ImageListDeleteDemo(object): 25 | """易盾反垃圾云服务图片名单删除接口python示例代码""" 26 | 27 | API_URL = "http://as.dun.163.com/v1/image/list/delete" 28 | VERSION = "v1.0" 29 | 30 | def __init__(self, secret_id, secret_key, business_id): 31 | """ 32 | Args: 33 | secret_id (str) 产品密钥ID,产品标识 34 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 35 | business_id (str) 业务ID,易盾根据产品业务特点分配 36 | """ 37 | self.secret_id = secret_id 38 | self.secret_key = secret_key 39 | self.business_id = business_id 40 | self.http = urllib3.PoolManager() # 初始化连接池 41 | 42 | def gen_signature(self, params=None): 43 | """生成签名信息 44 | Args: 45 | params (object) 请求参数 46 | Returns: 47 | 参数签名md5值 48 | """ 49 | buff = "" 50 | for k in sorted(params.keys()): 51 | buff += str(k) + str(params[k]) 52 | buff += self.secret_key 53 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 54 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 55 | else: 56 | return hashlib.md5(buff.encode("utf8")).hexdigest() 57 | 58 | def query(self, params): 59 | """请求易盾接口 60 | Args: 61 | params (object) 请求参数 62 | Returns: 63 | 请求结果,json格式 64 | """ 65 | params["secretId"] = self.secret_id 66 | params["businessId"] = self.business_id 67 | params["version"] = self.VERSION 68 | params["timestamp"] = int(time.time() * 1000) 69 | params["nonce"] = int(random.random() * 100000000) 70 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 71 | params["signature"] = self.gen_signature(params) 72 | 73 | try: 74 | encoded_params = urlencode(params).encode("utf8") 75 | response = self.http.request( 76 | 'POST', 77 | self.API_URL, 78 | body=encoded_params, 79 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 80 | timeout=urllib3.Timeout(connect=10, read=10) 81 | ) 82 | content = response.data 83 | return json.loads(content) 84 | except Exception as ex: 85 | print("调用API接口失败:", str(ex)) 86 | 87 | 88 | if __name__ == "__main__": 89 | """示例代码入口""" 90 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 91 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 92 | BUSINESS_ID = "your_business_id" # 业务ID,易盾根据产品业务特点分配 93 | api = ImageListDeleteDemo(SECRET_ID, SECRET_KEY, BUSINESS_ID) 94 | 95 | # 私有请求参数 96 | params = { 97 | "type": "1", 98 | "uuid": "512e7771c3074621914ae1894e0df5c1" 99 | } 100 | 101 | ret = api.query(params) 102 | 103 | code: int = ret["code"] 104 | msg: str = ret["msg"] 105 | if code == 200: 106 | result: bool = ret["result"] 107 | print("Delete success: %s" % result) 108 | else: 109 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 110 | -------------------------------------------------------------------------------- /crawler/crawler_job_submit.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | 易盾反垃圾云服务网站检测解决方案主站检测任务提交接口python示例代码 5 | 接口文档: http://dun.163.com/api.html 6 | python版本:python3.7 7 | 运行: 8 | 1. 修改 SECRET_ID,SECRET_KEY 为对应申请到的值 9 | 2. $ python crawler_job_submit.py 10 | """ 11 | __author__ = 'yidun-dev' 12 | __date__ = '2022/06/02' 13 | __version__ = '0.2-dev' 14 | 15 | import hashlib 16 | import time 17 | import random 18 | import urllib3 19 | from urllib.parse import urlencode 20 | import json 21 | from gmssl import sm3, func 22 | 23 | 24 | class CrawlerJobSubmitAPIDemo(object): 25 | """网站检测解决方案检测主站检测任务提交接口示例代码""" 26 | 27 | API_URL = "http://as.dun.163.com/v1/crawler/job/submit" 28 | VERSION = "v1.0" 29 | 30 | def __init__(self, secret_id, secret_key): 31 | """ 32 | Args: 33 | secret_id (str) 产品密钥ID,产品标识 34 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 35 | """ 36 | self.secret_id = secret_id 37 | self.secret_key = secret_key 38 | self.http = urllib3.PoolManager() # 初始化连接池 39 | 40 | def gen_signature(self, params=None): 41 | """生成签名信息 42 | Args: 43 | params (object) 请求参数 44 | Returns: 45 | 参数签名md5值 46 | """ 47 | buff = "" 48 | for k in sorted(params.keys()): 49 | buff += str(k) + str(params[k]) 50 | buff += self.secret_key 51 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 52 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 53 | else: 54 | return hashlib.md5(buff.encode("utf8")).hexdigest() 55 | 56 | def check(self, params): 57 | """请求易盾接口 58 | Args: 59 | params (object) 请求参数 60 | Returns: 61 | 请求结果,json格式 62 | """ 63 | params["secretId"] = self.secret_id 64 | params["version"] = self.VERSION 65 | params["timestamp"] = int(time.time() * 1000) 66 | params["nonce"] = int(random.random() * 100000000) 67 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 68 | params["signature"] = self.gen_signature(params) 69 | 70 | try: 71 | encoded_params = urlencode(params).encode("utf8") 72 | response = self.http.request( 73 | 'POST', 74 | self.API_URL, 75 | body=encoded_params, 76 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 77 | timeout=urllib3.Timeout(connect=1.0, read=1.0) 78 | ) 79 | content = response.data 80 | return json.loads(content) 81 | except Exception as ex: 82 | print("调用API接口失败:", str(ex)) 83 | 84 | 85 | if __name__ == "__main__": 86 | """示例代码入口""" 87 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 88 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 89 | api = CrawlerJobSubmitAPIDemo(SECRET_ID, SECRET_KEY) 90 | 91 | params = { 92 | "type": 1, 93 | "frequency": 100, 94 | # 主站URL,网站检测的入口,URL必须是外网可访问的,且以http开头 95 | "siteUrl": "http://xxx.com", 96 | "level": 1, 97 | "maxResourceAmount": 1 98 | # 其他参数可查看官网开发文档 99 | } 100 | 101 | ret = api.check(params) 102 | 103 | code: int = ret["code"] 104 | msg: str = ret["msg"] 105 | if code == 200: 106 | result: dict = ret["result"] 107 | jobId: int = result["jobId"] 108 | dataId: str = result["dataId"] 109 | print("SUBMIT SUCCESS: jobId=%s, dataId=%s" % (jobId, dataId)) 110 | else: 111 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 112 | -------------------------------------------------------------------------------- /image/imagelist_update.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | 易盾反垃圾云服务图片名单更新接口python示例代码 5 | 接口文档: http://dun.163.com/api.html 6 | python版本:python3.7 7 | 运行: 8 | 1. 修改 SECRET_ID,SECRET_KEY,BUSINESS_ID 为对应申请到的值 9 | 2. $ python imagelist_update.py 10 | """ 11 | __author__ = 'yidun-dev' 12 | __date__ = '2020/10/29' 13 | __version__ = '0.2-dev' 14 | 15 | import hashlib 16 | import time 17 | import random 18 | import urllib3 19 | from urllib.parse import urlencode 20 | import json 21 | from gmssl import sm3, func 22 | 23 | 24 | class ImageListUpdateDemo(object): 25 | """易盾反垃圾云服务图片名单更新接口python示例代码""" 26 | 27 | API_URL = "http://as.dun.163.com/v1/image/list/update" 28 | VERSION = "v1.0" 29 | 30 | def __init__(self, secret_id, secret_key, business_id): 31 | """ 32 | Args: 33 | secret_id (str) 产品密钥ID,产品标识 34 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 35 | business_id (str) 业务ID,易盾根据产品业务特点分配 36 | """ 37 | self.secret_id = secret_id 38 | self.secret_key = secret_key 39 | self.business_id = business_id 40 | self.http = urllib3.PoolManager() # 初始化连接池 41 | 42 | def gen_signature(self, params=None): 43 | """生成签名信息 44 | Args: 45 | params (object) 请求参数 46 | Returns: 47 | 参数签名md5值 48 | """ 49 | buff = "" 50 | for k in sorted(params.keys()): 51 | buff += str(k) + str(params[k]) 52 | buff += self.secret_key 53 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 54 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 55 | else: 56 | return hashlib.md5(buff.encode("utf8")).hexdigest() 57 | 58 | def query(self, params): 59 | """请求易盾接口 60 | Args: 61 | params (object) 请求参数 62 | Returns: 63 | 请求结果,json格式 64 | """ 65 | params["secretId"] = self.secret_id 66 | params["businessId"] = self.business_id 67 | params["version"] = self.VERSION 68 | params["timestamp"] = int(time.time() * 1000) 69 | params["nonce"] = int(random.random() * 100000000) 70 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 71 | params["signature"] = self.gen_signature(params) 72 | 73 | try: 74 | encoded_params = urlencode(params).encode("utf8") 75 | response = self.http.request( 76 | 'POST', 77 | self.API_URL, 78 | body=encoded_params, 79 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 80 | timeout=urllib3.Timeout(connect=10, read=10) 81 | ) 82 | content = response.data 83 | return json.loads(content) 84 | except Exception as ex: 85 | print("调用API接口失败:", str(ex)) 86 | 87 | 88 | if __name__ == "__main__": 89 | """示例代码入口""" 90 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 91 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 92 | BUSINESS_ID = "your_business_id" # 业务ID,易盾根据产品业务特点分配 93 | api = ImageListUpdateDemo(SECRET_ID, SECRET_KEY, BUSINESS_ID) 94 | 95 | # 私有请求参数 96 | params = { 97 | "type": "1", 98 | "uuid": "512e7771c3074621914ae1894e0df5c1", 99 | "status": "0" 100 | } 101 | 102 | ret = api.query(params) 103 | 104 | code: int = ret["code"] 105 | msg: str = ret["msg"] 106 | if code == 200: 107 | result: bool = ret["result"] 108 | print("Update success: %s" % result) 109 | else: 110 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 111 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## 网易易盾 2 | http://dun.163.com 3 | ## 接口说明 4 | 5 | - pyhton版本:3.7 6 | - 文件说明 7 | 8 | ``` 9 | ├── aigc AIGC流式检测解决方案接口演示 10 | │ │── aigc_stream_callback.py AIGC流式检测解决方案检测结果获取接口演示 11 | │ └── aigc_stream_push.py AIGC流式检测解决方案提交接口演示 12 | ├── audio 语音接口演示 13 | │ │── audio_callback.py 点播语音检测结果获取接口演示 14 | │ │── audio_query.py 点播语音结果查询接口演示 15 | │ │── audio_submit.py 点播语音检测提交接口演示 16 | │ │── audio_check.py 点播语音在线检测接口演示 17 | │ │── liveaudio_callback.py 直播语音检测结果获取接口演示 18 | │ │── liveaudio_querymonitor.py 直播语音人审操作记录获取接口演示 19 | │ │── liveaudio_querytask.py 直播语音结果获取接口演示 20 | │ │── liveaudio_feedback.py 直播语音信息更新接口演示 21 | │ │── liveaudio_queryextra.py 直播语音增值检测结果获取接口 22 | │ └── liveaudio_check.py 直播语音在线检测提交接口演示 23 | ├── crawler 网站解决方案接口演示 24 | │ │── crawler_callback.py 网站解决方案检测结果获取接口演示 25 | │ │── crawler_submit.py 网站解决方案在线检测提交接口演示 26 | │ └── crawler_job_submit.py 网站解决方案主站检测任务提交接口演示 27 | ├── filesolution 文档解决方案接口演示 28 | │ │── filesolution_callback.py 文档解决方案检测结果获取接口演示 29 | │ │── filesolution_query.py 文档解决方案结果查询接口演示 30 | │ └── filesolution_submit.py 文档解决方案在线检测提交接口演示 31 | ├── image 图片接口演示 32 | │   ├── image_callback.py 图片离线结果获取接口演示 33 | │   ├── image_check.py 图片在线检测接口演示 34 | │   ├── image_asynccheck.py 图片离线检测接口演示 35 | │   ├── image_asyncresult.py 图片离线检测结果查询接口演示 36 | │   ├── image_query.py 图片检测结果查询接口演示 37 | │   ├── imagelist_delete.py 图片名单删除接口演示 38 | │   ├── imagelist_query.py 图片名单查询接口演示 39 | │   ├── imagelist_submit.py 图片名单添加接口演示 40 | │   └── image_submit.py 图片批量提交接口演示 41 | ├── livevideosolution 直播音视频解决方案接口演示 42 | │  │── livevideosolution_callback.py 直播音视频解决方案离线结果获取接口演示 43 | │  │── livevideosolution_submit.py 直播音视频解决方案在线检测提交接口演示 44 | │  │── livevideosolution_feedback.py 直播音视频解决方案信息更新接口演示 45 | │  │── livevideosolution_queryaudio.py 直播音视频解决方案查询音频断句信息接口演示 46 | │  │── livevideosolution_queryimage.py 直播音视频解决方案查询视频截图信息接口演示 47 | │  └── livevideosolution_querymonitor.py 直播音视频解决方案人审操作记录获取接口演示 48 | ├── text 文本接口演示 49 | │ │── text_callback.py 文本离线结果获取接口演示 50 | │ │── text_check.py 文本在线检测接口演示 51 | │ │── text_batch_check.py 文本批量在线检测接口演示 52 | │ │── text_query.py 文本检测结果查询接口演示 53 | │ └── text_submit.py 文本批量提交接口演示 54 | ├── video 视频接口演示 55 | │   ├── livevideo_callback.py 直播流检测结果获取接口演示 56 | │   ├── livevideo_query.py 直播视频结果查询接口演示 57 | │   ├── liveimage_query.py 直播视频截图结果查询接口演示 58 | │   ├── livevideo_submit.py 直播视频信息提交接口演示 59 | │   ├── livevideo_feedback.py 直播视频信息更新接口演示 60 | │   ├── livewall_callback.py 直播电视墙检测结果获取接口演示 61 | │   ├── livewall_querymonitor.py 直播电视墙人审操作记录获取接口演示 62 | │   ├── livewall_submit.py 直播电视墙信息提交接口演示 63 | │   ├── video_callback.py 视频点播检测结果获取接口演示 64 | │   ├── video_query.py 视频点播结果查询接口演示 65 | │   ├── videoimage_query.py 视频点播截图结果查询接口演示 66 | │   └── video_submit.py 视频点播信息提交接口演示 67 | ├── videosolution 点播音视频解决方案接口演示 68 | │ │── videosolution_callback.py 点播音视频解决方案检测结果获取接口演示 69 | │ │── videosolution_query.py 点播音视频解决方案结果查询接口演示 70 | │ └── videosolution_submit.py 点播音视频解决方案在线检测提交接口演示 71 | ├── mediasolution 融媒体解决方案接口演示 72 | │ │── mediasolution_callback.py 融媒体解决方案离线结果获取接口演示 73 | │ │── mediasolution_submit.py 融媒体解决方案在线检测提交接口演示 74 | │ └── mediasolution_query.py 融媒体解决方案结果查询接口演示 75 | ├── keyword 敏感词接口演示 76 | │ │── keyword_submit.py 敏感词提交接口演示 77 | │ │── keyword_delete.py 敏感词删除接口演示 78 | │ └── keyword_query.py 敏感词查询接口演示 79 | ├── list 名单接口演示 80 | │ │── list_submit.py 名单提交接口演示 81 | │ │── list_delete.py 名单删除接口演示 82 | │ │── list_query.py 名单查询接口演示 83 | │ └── list_update.py 名单修改接口演示 84 | ├── digital 数字阅读解决方案接口演示 85 | │ │── digital_callback.py 数字阅读解决方案结果获取接口演示 86 | │ │── digital_submit.py 数字阅读解决方案检测提交接口演示 87 | │ └── digital_query.py 数字阅读解决方案结果查询接口演示 88 | ├── report 投诉举报解决方案接口演示 89 | │ │── report_callback.py 投诉举报解决方案结果获取接口演示 90 | │ │── report_submit.py 投诉举报解决方案检测提交接口演示 91 | │ └── report_query.py 投诉举报解决方案结果查询接口演示 92 | └── README.md 93 | 94 | ``` 95 | 96 | ## 使用说明 97 | - demo仅做接口演示使用,生产环境接入请根据实际情况增加异常处理逻辑。 98 | -------------------------------------------------------------------------------- /list/list_update.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | 易盾反垃圾云服务名单更新接口python示例代码 5 | 接口文档: http://dun.163.com/api.html 6 | python版本:python3.7 7 | 运行: 8 | 1. 修改 SECRET_ID,SECRET_KEY,BUSINESS_ID 为对应申请到的值 9 | 2. $ python list_update.py 10 | """ 11 | __author__ = 'yidun-dev' 12 | __date__ = '2022/06/06' 13 | __version__ = '0.2-dev' 14 | 15 | import hashlib 16 | import time 17 | import random 18 | import urllib3 19 | from urllib.parse import urlencode 20 | import json 21 | from gmssl import sm3, func 22 | 23 | 24 | class ListUpdateDemo(object): 25 | """易盾反垃圾云服务名单更新接口python示例代码""" 26 | 27 | API_URL = "http://as.dun.163.com/v2/list/update" 28 | VERSION = "v2" 29 | 30 | def __init__(self, secret_id, secret_key, business_id): 31 | """ 32 | Args: 33 | secret_id (str) 产品密钥ID,产品标识 34 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 35 | business_id (str) 业务ID,易盾根据产品业务特点分配 36 | """ 37 | self.secret_id = secret_id 38 | self.secret_key = secret_key 39 | self.business_id = business_id 40 | self.http = urllib3.PoolManager() # 初始化连接池 41 | 42 | def gen_signature(self, params=None): 43 | """生成签名信息 44 | Args: 45 | params (object) 请求参数 46 | Returns: 47 | 参数签名md5值 48 | """ 49 | buff = "" 50 | for k in sorted(params.keys()): 51 | buff += str(k) + str(params[k]) 52 | buff += self.secret_key 53 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 54 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 55 | else: 56 | return hashlib.md5(buff.encode("utf8")).hexdigest() 57 | 58 | def query(self, params): 59 | """请求易盾接口 60 | Args: 61 | params (object) 请求参数 62 | Returns: 63 | 请求结果,json格式 64 | """ 65 | params["secretId"] = self.secret_id 66 | params["businessId"] = self.business_id 67 | params["version"] = self.VERSION 68 | params["timestamp"] = int(time.time() * 1000) 69 | params["nonce"] = int(random.random() * 100000000) 70 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 71 | params["signature"] = self.gen_signature(params) 72 | 73 | try: 74 | encoded_params = urlencode(params).encode("utf8") 75 | response = self.http.request( 76 | 'POST', 77 | self.API_URL, 78 | body=encoded_params, 79 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 80 | timeout=urllib3.Timeout(connect=10, read=10) 81 | ) 82 | content = response.data 83 | return json.loads(content) 84 | except Exception as ex: 85 | print("调用API接口失败:", str(ex)) 86 | 87 | 88 | if __name__ == "__main__": 89 | """示例代码入口""" 90 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 91 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 92 | BUSINESS_ID = "your_business_id" # 业务ID,易盾根据产品业务特点分配 93 | api = ListUpdateDemo(SECRET_ID, SECRET_KEY, BUSINESS_ID) 94 | 95 | # 私有请求参数 96 | params = { 97 | "uuid": "512e7771c3074621914ae1894e0df5c1", 98 | "entity": "名单1", 99 | "listType": 1, 100 | "entityType": 1, 101 | "status": 1 102 | } 103 | 104 | ret = api.query(params) 105 | 106 | code: int = ret["code"] 107 | msg: str = ret["msg"] 108 | if code == 200: 109 | result: bool = ret["result"] 110 | print("Update success: %s" % result) 111 | else: 112 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 113 | -------------------------------------------------------------------------------- /list/list_submit.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | 易盾反垃圾云服务名单提交接口python示例代码 5 | 接口文档: http://dun.163.com/api.html 6 | python版本:python3.7 7 | 运行: 8 | 1. 修改 SECRET_ID,SECRET_KEY,BUSINESS_ID 为对应申请到的值 9 | 2. $ python list_submit.py 10 | """ 11 | __author__ = 'yidun-dev' 12 | __date__ = '2020/01/02' 13 | __version__ = '0.2-dev' 14 | 15 | import hashlib 16 | import time 17 | import random 18 | import urllib3 19 | from urllib.parse import urlencode 20 | import json 21 | from gmssl import sm3, func 22 | 23 | 24 | class KeywordSubmitAPIDemo(object): 25 | """名单提交接口示例代码""" 26 | 27 | API_URL = "http://as.dun.163.com/v2/list/submit" 28 | VERSION = "v2" 29 | 30 | def __init__(self, secret_id, secret_key): 31 | """ 32 | Args: 33 | secret_id (str) 产品密钥ID,产品标识 34 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 35 | """ 36 | self.secret_id = secret_id 37 | self.secret_key = secret_key 38 | self.http = urllib3.PoolManager() # 初始化连接池 39 | 40 | def gen_signature(self, params=None): 41 | """生成签名信息 42 | Args: 43 | params (object) 请求参数 44 | Returns: 45 | 参数签名md5值 46 | """ 47 | buff = "" 48 | for k in sorted(params.keys()): 49 | buff += str(k) + str(params[k]) 50 | buff += self.secret_key 51 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 52 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 53 | else: 54 | return hashlib.md5(buff.encode("utf8")).hexdigest() 55 | 56 | def check(self, params): 57 | """请求易盾接口 58 | Args: 59 | params (object) 请求参数 60 | Returns: 61 | 请求结果,json格式 62 | """ 63 | params["secretId"] = self.secret_id 64 | params["version"] = self.VERSION 65 | params["timestamp"] = int(time.time() * 1000) 66 | params["nonce"] = int(random.random() * 100000000) 67 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 68 | params["signature"] = self.gen_signature(params) 69 | 70 | try: 71 | encoded_params = urlencode(params).encode("utf8") 72 | response = self.http.request( 73 | 'POST', 74 | self.API_URL, 75 | body=encoded_params, 76 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 77 | timeout=urllib3.Timeout(connect=1.0, read=1.0) 78 | ) 79 | content = response.data 80 | return json.loads(content) 81 | except Exception as ex: 82 | print("调用API接口失败:", str(ex)) 83 | 84 | 85 | if __name__ == "__main__": 86 | """示例代码入口""" 87 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 88 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 89 | api = KeywordSubmitAPIDemo(SECRET_ID, SECRET_KEY) 90 | 91 | # 私有请求参数 92 | lists: list = ["用户名单1", "用户名单2"] 93 | params = { 94 | "listType": "2", # 1: 白名单,2: 黑名单,4: 必审名单,8: 预审名单 95 | "entityType": "1", # 1: 用户名单,2: IP名单 96 | "entities": json.dumps(lists) 97 | } 98 | 99 | ret = api.check(params) 100 | 101 | code: int = ret["code"] 102 | msg: str = ret["msg"] 103 | if code == 200: 104 | resultArray: list = ret["result"] 105 | for result in resultArray: 106 | uuid: str = result["uuid"] 107 | entity: str = result["entity"] 108 | entityType: int = result["entityType"] 109 | exist: bool = ret["exist"] 110 | print("名单是否已存在: %s" % exist) 111 | else: 112 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 113 | -------------------------------------------------------------------------------- /filesolution/filesolution_submit.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | 易盾反垃圾云服务文档解决方案检测提交接口python示例代码 5 | 接口文档: http://dun.163.com/api.html 6 | python版本:python3.7 7 | 运行: 8 | 1. 修改 SECRET_ID,SECRET_KEY 为对应申请到的值 9 | 2. $ python filesolution_submit.py 10 | """ 11 | __author__ = 'yidun-dev' 12 | __date__ = '2019/11/27' 13 | __version__ = '0.2-dev' 14 | 15 | import hashlib 16 | import time 17 | import random 18 | import urllib3 19 | from urllib.parse import urlencode 20 | import json 21 | from gmssl import sm3, func 22 | 23 | 24 | class FileSolutionSubmitAPIDemo(object): 25 | """文档解决方案检测提交接口示例代码""" 26 | 27 | API_URL = "http://as-file.dun.163.com/v2/file/submit" 28 | VERSION = "v2.0" 29 | 30 | def __init__(self, secret_id, secret_key): 31 | """ 32 | Args: 33 | secret_id (str) 产品密钥ID,产品标识 34 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 35 | """ 36 | self.secret_id = secret_id 37 | self.secret_key = secret_key 38 | self.http = urllib3.PoolManager() # 初始化连接池 39 | 40 | def gen_signature(self, params=None): 41 | """生成签名信息 42 | Args: 43 | params (object) 请求参数 44 | Returns: 45 | 参数签名md5值 46 | """ 47 | buff = "" 48 | for k in sorted(params.keys()): 49 | buff += str(k) + str(params[k]) 50 | buff += self.secret_key 51 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 52 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 53 | else: 54 | return hashlib.md5(buff.encode("utf8")).hexdigest() 55 | 56 | def check(self, params): 57 | """请求易盾接口 58 | Args: 59 | params (object) 请求参数 60 | Returns: 61 | 请求结果,json格式 62 | """ 63 | params["secretId"] = self.secret_id 64 | params["version"] = self.VERSION 65 | params["timestamp"] = int(time.time() * 1000) 66 | params["nonce"] = int(random.random() * 100000000) 67 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 68 | params["signature"] = self.gen_signature(params) 69 | 70 | try: 71 | encoded_params = urlencode(params).encode("utf8") 72 | response = self.http.request( 73 | 'POST', 74 | self.API_URL, 75 | body=encoded_params, 76 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 77 | timeout=urllib3.Timeout(connect=1.0, read=1.0) 78 | ) 79 | content = response.data 80 | return json.loads(content) 81 | except Exception as ex: 82 | print("调用API接口失败:", str(ex)) 83 | 84 | 85 | if __name__ == "__main__": 86 | """示例代码入口""" 87 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 88 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 89 | api = FileSolutionSubmitAPIDemo(SECRET_ID, SECRET_KEY) 90 | 91 | # 私有请求参数 92 | params = { 93 | "url": "http://xxx.com/file/helloworld.doc", 94 | "dataId": "ebfcad1c-dba1-490c-b4de-e784c2691768", 95 | "checkFlag": "3", 96 | "ip": "123.115.77.137", 97 | "account": "python@163.com", 98 | "callback": "ebfcad1c-dba1-490c-b4de-e784c2691768", 99 | "publishTime": "1234567890123" 100 | } 101 | 102 | ret = api.check(params) 103 | 104 | code: int = ret["code"] 105 | msg: str = ret["msg"] 106 | if code == 200: 107 | result: dict = ret["result"] 108 | taskId: str = result["taskId"] 109 | dataId: str = result["dataId"] 110 | print("SUCCESS: taskId=%s, dataId=%s" % (taskId, dataId)) 111 | else: 112 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 113 | -------------------------------------------------------------------------------- /list/list_delete.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | 易盾反垃圾云服务名单删除接口python示例代码 5 | 接口文档: http://dun.163.com/api.html 6 | python版本:python3.7 7 | 运行: 8 | 1. 修改 SECRET_ID,SECRET_KEY,BUSINESS_ID 为对应申请到的值 9 | 2. $ python list_delete.py 10 | """ 11 | __author__ = 'yidun-dev' 12 | __date__ = '2022/06/06' 13 | __version__ = '0.2-dev' 14 | 15 | import hashlib 16 | import time 17 | import random 18 | import urllib3 19 | from urllib.parse import urlencode 20 | import json 21 | from gmssl import sm3, func 22 | 23 | 24 | class ListDeleteDemo(object): 25 | """易盾反垃圾云服务名单删除接口python示例代码""" 26 | 27 | API_URL = "http://as.dun.163yun.com/v2/list/batchDelete" 28 | VERSION = "v2" 29 | 30 | def __init__(self, secret_id, secret_key, business_id): 31 | """ 32 | Args: 33 | secret_id (str) 产品密钥ID,产品标识 34 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 35 | business_id (str) 业务ID,易盾根据产品业务特点分配 36 | """ 37 | self.secret_id = secret_id 38 | self.secret_key = secret_key 39 | self.business_id = business_id 40 | self.http = urllib3.PoolManager() # 初始化连接池 41 | 42 | def gen_signature(self, params=None): 43 | """生成签名信息 44 | Args: 45 | params (object) 请求参数 46 | Returns: 47 | 参数签名md5值 48 | """ 49 | buff = "" 50 | for k in sorted(params.keys()): 51 | buff += str(k) + str(params[k]) 52 | buff += self.secret_key 53 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 54 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 55 | else: 56 | return hashlib.md5(buff.encode("utf8")).hexdigest() 57 | 58 | def query(self, params): 59 | """请求易盾接口 60 | Args: 61 | params (object) 请求参数 62 | Returns: 63 | 请求结果,json格式 64 | """ 65 | params["secretId"] = self.secret_id 66 | params["businessId"] = self.business_id 67 | params["version"] = self.VERSION 68 | params["timestamp"] = int(time.time() * 1000) 69 | params["nonce"] = int(random.random() * 100000000) 70 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 71 | params["signature"] = self.gen_signature(params) 72 | 73 | try: 74 | encoded_params = urlencode(params).encode("utf8") 75 | response = self.http.request( 76 | 'POST', 77 | self.API_URL, 78 | body=encoded_params, 79 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 80 | timeout=urllib3.Timeout(connect=10, read=10) 81 | ) 82 | content = response.data 83 | return json.loads(content) 84 | except Exception as ex: 85 | print("调用API接口失败:", str(ex)) 86 | 87 | 88 | if __name__ == "__main__": 89 | """示例代码入口""" 90 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 91 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 92 | BUSINESS_ID = "your_business_id" # 业务ID,易盾根据产品业务特点分配 93 | api = ListDeleteDemo(SECRET_ID, SECRET_KEY, BUSINESS_ID) 94 | 95 | # 私有请求参数 96 | uuids: list = ["121212", "343343"] 97 | 98 | entities: list = ["名单1", "名单2"] 99 | 100 | params = { 101 | "entityType": 1, 102 | "listType": 1, 103 | "uuids": json.dumps(uuids), 104 | "entities": json.dumps(entities) 105 | } 106 | 107 | ret = api.query(params) 108 | 109 | code: int = ret["code"] 110 | msg: str = ret["msg"] 111 | if code == 200: 112 | result: bool = ret["result"] 113 | print("Delete success: %s" % result) 114 | else: 115 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 116 | -------------------------------------------------------------------------------- /livevideosolution/livevideosolution_submit.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | 易盾反垃圾云服务直播音视频解决方案检测提交接口python示例代码 5 | 接口文档: http://dun.163.com/api.html 6 | python版本:python3.7 7 | 运行: 8 | 1. 修改 SECRET_ID,SECRET_KEY 为对应申请到的值 9 | 2. $ python livevideosolution_submit.py 10 | """ 11 | __author__ = 'yidun-dev' 12 | __date__ = '2019/11/27' 13 | __version__ = '0.2-dev' 14 | 15 | import hashlib 16 | import time 17 | import random 18 | import urllib3 19 | from urllib.parse import urlencode 20 | import json 21 | from gmssl import sm3, func 22 | 23 | 24 | class LiveVideoSolutionSubmitAPIDemo(object): 25 | """直播音视频解决方案检测提交接口示例代码""" 26 | 27 | API_URL = "http://as.dun.163.com/v2/livewallsolution/submit" 28 | VERSION = "v2.1" # 直播音视频解决方案版本v2.1及以上语音二级细分类结构进行调整 29 | 30 | def __init__(self, secret_id, secret_key): 31 | """ 32 | Args: 33 | secret_id (str) 产品密钥ID,产品标识 34 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 35 | """ 36 | self.secret_id = secret_id 37 | self.secret_key = secret_key 38 | self.http = urllib3.PoolManager() # 初始化连接池 39 | 40 | def gen_signature(self, params=None): 41 | """生成签名信息 42 | Args: 43 | params (object) 请求参数 44 | Returns: 45 | 参数签名md5值 46 | """ 47 | buff = "" 48 | for k in sorted(params.keys()): 49 | buff += str(k) + str(params[k]) 50 | buff += self.secret_key 51 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 52 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 53 | else: 54 | return hashlib.md5(buff.encode("utf8")).hexdigest() 55 | 56 | def check(self, params): 57 | """请求易盾接口 58 | Args: 59 | params (object) 请求参数 60 | Returns: 61 | 请求结果,json格式 62 | """ 63 | params["secretId"] = self.secret_id 64 | params["version"] = self.VERSION 65 | params["timestamp"] = int(time.time() * 1000) 66 | params["nonce"] = int(random.random() * 100000000) 67 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 68 | params["signature"] = self.gen_signature(params) 69 | 70 | try: 71 | encoded_params = urlencode(params).encode("utf8") 72 | response = self.http.request( 73 | 'POST', 74 | self.API_URL, 75 | body=encoded_params, 76 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 77 | timeout=urllib3.Timeout(connect=1.0, read=1.0) 78 | ) 79 | content = response.data 80 | return json.loads(content) 81 | except Exception as ex: 82 | print("调用API接口失败:", str(ex)) 83 | 84 | 85 | if __name__ == "__main__": 86 | """示例代码入口""" 87 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 88 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 89 | api = LiveVideoSolutionSubmitAPIDemo(SECRET_ID, SECRET_KEY) 90 | 91 | # 私有请求参数 92 | params = { 93 | "url": "http://xxx.xx", 94 | "dataId": "fbfcad1c-dba1-490c-b4de-e784c2691765", 95 | # "callback": "{\"p\":\"xx\"}" 96 | # "scFrequency": "5" 97 | } 98 | 99 | ret = api.check(params) 100 | 101 | code: int = ret["code"] 102 | msg: str = ret["msg"] 103 | if code == 200: 104 | result: dict = ret["result"] 105 | taskId: str = result["taskId"] 106 | status: bool = result["status"] 107 | if status: 108 | print("SUBMIT SUCCESS: taskId=%s" % taskId) 109 | else: 110 | print("SUBMIT FAIL: taskId=%s" % taskId) 111 | else: 112 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 113 | -------------------------------------------------------------------------------- /audio/audio_submit.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | 易盾反垃圾云服务音频信息提交接口python示例代码 5 | 接口文档: http://dun.163.com/api.html 6 | python版本:python3.7 7 | 运行: 8 | 1. 修改 SECRET_ID,SECRET_KEY,BUSINESS_ID 为对应申请到的值 9 | 2. $ python audio_submit.py 10 | """ 11 | __author__ = 'yidun-dev' 12 | __date__ = '2019/11/27' 13 | __version__ = '0.2-dev' 14 | 15 | import hashlib 16 | import time 17 | import random 18 | import urllib3 19 | from urllib.parse import urlencode 20 | import json 21 | from gmssl import sm3, func 22 | 23 | 24 | class AudioSubmitAPIDemo(object): 25 | """音频信息提交接口示例代码""" 26 | 27 | API_URL = "http://as.dun.163.com/v4/audio/submit" 28 | VERSION = "v4" # 点播语音版本v3.2及以上二级细分类结构进行调整 29 | 30 | def __init__(self, secret_id, secret_key, business_id): 31 | """ 32 | Args: 33 | secret_id (str) 产品密钥ID,产品标识 34 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 35 | business_id (str) 业务ID,易盾根据产品业务特点分配 36 | """ 37 | self.secret_id = secret_id 38 | self.secret_key = secret_key 39 | self.business_id = business_id 40 | self.http = urllib3.PoolManager() # 初始化连接池 41 | 42 | def gen_signature(self, params=None): 43 | """生成签名信息 44 | Args: 45 | params (object) 请求参数 46 | Returns: 47 | 参数签名md5值 48 | """ 49 | buff = "" 50 | for k in sorted(params.keys()): 51 | buff += str(k) + str(params[k]) 52 | buff += self.secret_key 53 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 54 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 55 | else: 56 | return hashlib.md5(buff.encode("utf8")).hexdigest() 57 | 58 | def check(self, params): 59 | """请求易盾接口 60 | Args: 61 | params (object) 请求参数 62 | Returns: 63 | 请求结果,json格式 64 | """ 65 | params["secretId"] = self.secret_id 66 | params["businessId"] = self.business_id 67 | params["version"] = self.VERSION 68 | params["timestamp"] = int(time.time() * 1000) 69 | params["nonce"] = int(random.random() * 100000000) 70 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 71 | params["signature"] = self.gen_signature(params) 72 | 73 | try: 74 | encoded_params = urlencode(params).encode("utf8") 75 | response = self.http.request( 76 | 'POST', 77 | self.API_URL, 78 | body=encoded_params, 79 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 80 | timeout=urllib3.Timeout(connect=1.0, read=1.0) 81 | ) 82 | content = response.data 83 | return json.loads(content) 84 | except Exception as ex: 85 | print("调用API接口失败:", str(ex)) 86 | 87 | 88 | if __name__ == "__main__": 89 | """示例代码入口""" 90 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 91 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 92 | BUSINESS_ID = "your_business_id" # 业务ID,易盾根据产品业务特点分配 93 | api = AudioSubmitAPIDemo(SECRET_ID, SECRET_KEY, BUSINESS_ID) 94 | 95 | # 设置私有参数 96 | params = { 97 | "url": "http://xxx.xx" 98 | } 99 | 100 | ret = api.check(params) 101 | 102 | code: int = ret["code"] 103 | msg: str = ret["msg"] 104 | if code == 200: 105 | result: dict = ret["result"] 106 | taskId: str = result["taskId"] 107 | status: int = result["status"] 108 | if status == 0: 109 | print("SUBMIT SUCCESS: taskId=%s" % taskId) 110 | else: 111 | print("SUBMIT FAIL: taskId=%s, status=%s" % (taskId, status)) 112 | else: 113 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 114 | -------------------------------------------------------------------------------- /audio/liveaudio_check.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | 易盾反垃圾云服务直播音频检测接口python示例代码 5 | 接口文档: http://dun.163.com/api.html 6 | python版本:python3.7 7 | 运行: 8 | 1. 修改 SECRET_ID,SECRET_KEY,BUSINESS_ID 为对应申请到的值 9 | 2. $ python liveaudio_check.py 10 | """ 11 | __author__ = 'yidun-dev' 12 | __date__ = '2019/11/27' 13 | __version__ = '0.2-dev' 14 | 15 | import hashlib 16 | import time 17 | import random 18 | import urllib3 19 | from urllib.parse import urlencode 20 | import json 21 | from gmssl import sm3, func 22 | 23 | 24 | class LiveAudioCheckAPIDemo(object): 25 | """直播音频检测接口示例代码""" 26 | 27 | API_URL = "http://as.dun.163.com/v4/liveaudio/check" 28 | VERSION = "v4" # 直播语音版本v2.1及以上二级细分类结构进行调整 29 | 30 | def __init__(self, secret_id, secret_key, business_id): 31 | """ 32 | Args: 33 | secret_id (str) 产品密钥ID,产品标识 34 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 35 | business_id (str) 业务ID,易盾根据产品业务特点分配 36 | """ 37 | self.secret_id = secret_id 38 | self.secret_key = secret_key 39 | self.business_id = business_id 40 | self.http = urllib3.PoolManager() # 初始化连接池 41 | 42 | def gen_signature(self, params=None): 43 | """生成签名信息 44 | Args: 45 | params (object) 请求参数 46 | Returns: 47 | 参数签名md5值 48 | """ 49 | buff = "" 50 | for k in sorted(params.keys()): 51 | buff += str(k) + str(params[k]) 52 | buff += self.secret_key 53 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 54 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 55 | else: 56 | return hashlib.md5(buff.encode("utf8")).hexdigest() 57 | 58 | def check(self, params): 59 | """请求易盾接口 60 | Args: 61 | params (object) 请求参数 62 | Returns: 63 | 请求结果,json格式 64 | """ 65 | params["secretId"] = self.secret_id 66 | params["businessId"] = self.business_id 67 | params["version"] = self.VERSION 68 | params["timestamp"] = int(time.time() * 1000) 69 | params["nonce"] = int(random.random()*100000000) 70 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 71 | params["signature"] = self.gen_signature(params) 72 | 73 | try: 74 | encoded_params = urlencode(params).encode("utf8") 75 | response = self.http.request( 76 | 'POST', 77 | self.API_URL, 78 | body=encoded_params, 79 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 80 | timeout=urllib3.Timeout(connect=1.0, read=1.0) 81 | ) 82 | content = response.data 83 | return json.loads(content) 84 | except Exception as ex: 85 | print("调用API接口失败:", str(ex)) 86 | 87 | 88 | if __name__ == "__main__": 89 | """示例代码入口""" 90 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 91 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 92 | BUSINESS_ID = "your_business_id" # 业务ID,易盾根据产品业务特点分配 93 | api = LiveAudioCheckAPIDemo(SECRET_ID, SECRET_KEY, BUSINESS_ID) 94 | 95 | params = { 96 | "url": "http://xxx.xx", 97 | "dataId": "xxxxx" 98 | } 99 | 100 | ret = api.check(params) 101 | code: int = ret["code"] 102 | msg: str = ret["msg"] 103 | if code == 200: 104 | result: dict = ret["result"] 105 | taskId: str = result["taskId"] 106 | status: int = result["status"] 107 | if status == 0: 108 | print("SUBMIT SUCCESS: taskId=%s" % taskId) 109 | else: 110 | print("SUBMIT FAIL: taskId=%s, status=%s" % (taskId, status)) 111 | else: 112 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 113 | -------------------------------------------------------------------------------- /filesolution/filesolution_callback.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | 易盾反垃圾云服务文档解决方案结果获取接口python示例代码 5 | 接口文档: http://dun.163.com/api.html 6 | python版本:python3.7 7 | 运行: 8 | 1. 修改 SECRET_ID,SECRET_KEY 为对应申请到的值 9 | 2. $ python filesolution_callback.py 10 | """ 11 | __author__ = 'yidun-dev' 12 | __date__ = '2019/11/27' 13 | __version__ = '0.2-dev' 14 | 15 | import hashlib 16 | import time 17 | import random 18 | import urllib3 19 | from urllib.parse import urlencode 20 | import json 21 | from gmssl import sm3, func 22 | 23 | 24 | class FileSolutionCallbackAPIDemo(object): 25 | """文档解决方案结果获取接口""" 26 | 27 | API_URL = "http://as-file.dun.163.com/v2/file/callback/results" 28 | VERSION = "v2.0" 29 | 30 | def __init__(self, secret_id, secret_key): 31 | """ 32 | Args: 33 | secret_id (str) 产品密钥ID,产品标识 34 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 35 | """ 36 | self.secret_id = secret_id 37 | self.secret_key = secret_key 38 | self.http = urllib3.PoolManager() # 初始化连接池 39 | 40 | def gen_signature(self, params=None): 41 | """生成签名信息 42 | Args: 43 | params (object) 请求参数 44 | Returns: 45 | 参数签名md5值 46 | """ 47 | buff = "" 48 | for k in sorted(params.keys()): 49 | buff += str(k) + str(params[k]) 50 | buff += self.secret_key 51 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 52 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 53 | else: 54 | return hashlib.md5(buff.encode("utf8")).hexdigest() 55 | 56 | def check(self): 57 | """请求易盾接口 58 | Returns: 59 | 请求结果,json格式 60 | """ 61 | params = {} 62 | params["secretId"] = self.secret_id 63 | params["version"] = self.VERSION 64 | params["timestamp"] = int(time.time() * 1000) 65 | params["nonce"] = int(random.random()*100000000) 66 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 67 | params["signature"] = self.gen_signature(params) 68 | 69 | try: 70 | encoded_params = urlencode(params).encode("utf8") 71 | response = self.http.request( 72 | 'POST', 73 | self.API_URL, 74 | body=encoded_params, 75 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 76 | timeout=urllib3.Timeout(connect=10, read=10) 77 | ) 78 | content = response.data 79 | return json.loads(content) 80 | except Exception as ex: 81 | print("调用API接口失败:", str(ex)) 82 | 83 | 84 | if __name__ == "__main__": 85 | """示例代码入口""" 86 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 87 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 88 | api = FileSolutionCallbackAPIDemo(SECRET_ID, SECRET_KEY) 89 | 90 | ret = api.check() 91 | 92 | code: int = ret["code"] 93 | msg: str = ret["msg"] 94 | if code == 200: 95 | resultArray: list = ret["result"] 96 | if resultArray is None: 97 | print("Can't find Callback Data") 98 | quit() 99 | for resultItem in resultArray: 100 | antispam: dict = resultItem["antispam"] 101 | if antispam is not None: 102 | dataId: str = antispam["dataId"] 103 | taskId: str = antispam["taskId"] 104 | resultType: int = antispam["resultType"] 105 | suggestion: int = antispam["suggestion"] 106 | evidences: dict = antispam["evidences"] 107 | print("SUCCESS: dataId=%s, taskId=%s, evidences=%s" % (dataId, taskId, evidences)) 108 | else: 109 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 110 | -------------------------------------------------------------------------------- /aigc/aigc_stream_push.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | 易盾反垃圾云服务AIGC流式检测解决方案检测提交接口python示例代码 4 | 接口文档: http://dun.163.com/api.html 5 | python版本:python3.7 6 | 运行: 7 | 1. 修改 SECRET_ID,SECRET_KEY 为对应申请到的值 8 | 2. $ python aigc_stream_push.py 9 | """ 10 | __author__ = 'yidun-dev' 11 | __date__ = '2020/06/23' 12 | __version__ = '0.2-dev' 13 | 14 | import hashlib 15 | import time 16 | import random 17 | import urllib3 18 | from urllib.parse import urlencode 19 | import json 20 | from gmssl import sm3, func 21 | 22 | 23 | class AigcStreamPushAPIDemo(object): 24 | """AIGC流式检测解决方案检测提交接口示例代码""" 25 | 26 | API_URL = "https://as.dun.163.com/v1/stream/push" 27 | VERSION = "v1" 28 | 29 | def __init__(self, secret_id, secret_key): 30 | """ 31 | Args: 32 | secret_id (str) 产品密钥ID,产品标识 33 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 34 | """ 35 | self.secret_id = secret_id 36 | self.secret_key = secret_key 37 | self.http = urllib3.PoolManager() # 初始化连接池 38 | 39 | def gen_signature(self, params=None): 40 | """生成签名信息 41 | Args: 42 | params (object) 请求参数 43 | Returns: 44 | 参数签名md5值 45 | """ 46 | buff = "" 47 | for k in sorted(params.keys()): 48 | buff += str(k) + str(params[k]) 49 | buff += self.secret_key 50 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 51 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 52 | else: 53 | return hashlib.md5(buff.encode("utf8")).hexdigest() 54 | 55 | def check(self, params): 56 | """请求易盾接口 57 | Args: 58 | params (dict) 请求参数 59 | Returns: 60 | 请求结果,json格式 61 | """ 62 | params["secretId"] = self.secret_id 63 | params["version"] = self.VERSION 64 | params["timestamp"] = int(time.time() * 1000) 65 | params["nonce"] = int(random.random() * 100000000) 66 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 67 | params["signature"] = self.gen_signature(params) 68 | 69 | try: 70 | encoded_params = urlencode(params).encode("utf8") 71 | response = self.http.request( 72 | 'POST', 73 | self.API_URL, 74 | body=encoded_params, 75 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 76 | timeout=urllib3.Timeout(connect=10, read=10) 77 | ) 78 | content = response.data 79 | return json.loads(content) 80 | except Exception as ex: 81 | print("调用API接口失败:", str(ex)) 82 | 83 | 84 | if __name__ == "__main__": 85 | """示例代码入口""" 86 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 87 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 88 | 89 | api = AigcStreamPushAPIDemo(SECRET_ID, SECRET_KEY) 90 | 91 | # 输入会话检测 demo 92 | params = { 93 | "sessionId": "yourSessionId" + str(int(time.time() * 1000)), 94 | "type": "2", 95 | "dataId": "yourDataId", 96 | "content": "当前会话输入的内容", 97 | "publishTime": str(int(time.time() * 1000)) 98 | } 99 | ret = api.check(params) 100 | 101 | code: int = ret["code"] 102 | msg: str = ret["msg"] 103 | if code == 200: 104 | result: dict = ret["result"] 105 | if result is None: 106 | print("Can't find result Data") 107 | else: 108 | sessionTaskId: str = result["sessionTaskId"] 109 | sessionId: str = result["sessionId"] 110 | antispam: dict = result["antispam"] 111 | print("SUCCESS: sessionTaskId=%s, sessionId=%s, antispam=%s" % (sessionTaskId, sessionId, antispam)) 112 | else: 113 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) -------------------------------------------------------------------------------- /aigc/aigc_stream_callback.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | """ 3 | 易盾反垃圾云服务AIGC流式检测解决方案离线结果获取接口python示例代码 4 | 接口文档: http://dun.163.com/api.html 5 | python版本:python3.7 6 | 运行: 7 | 1. 修改 SECRET_ID,SECRET_KEY 为对应申请到的值 8 | 2. $ python aigc_stream_callback.py 9 | """ 10 | __author__ = 'yidun-dev' 11 | __date__ = '2020/06/23' 12 | __version__ = '0.2-dev' 13 | 14 | import hashlib 15 | import time 16 | import random 17 | import urllib3 18 | from urllib.parse import urlencode 19 | import json 20 | from gmssl import sm3, func 21 | 22 | 23 | class AigcStreamCallbackAPIDemo(object): 24 | """AIGC流式检测解决方案离线结果获取接口示例代码""" 25 | 26 | API_URL = "https://as.dun.163.com/v1/stream/callback/results" 27 | VERSION = "v1" 28 | 29 | def __init__(self, secret_id, secret_key): 30 | """ 31 | Args: 32 | secret_id (str) 产品密钥ID,产品标识 33 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 34 | """ 35 | self.secret_id = secret_id 36 | self.secret_key = secret_key 37 | self.http = urllib3.PoolManager() # 初始化连接池 38 | 39 | def gen_signature(self, params=None): 40 | """生成签名信息 41 | Args: 42 | params (object) 请求参数 43 | Returns: 44 | 参数签名md5值 45 | """ 46 | buff = "" 47 | for k in sorted(params.keys()): 48 | buff += str(k) + str(params[k]) 49 | buff += self.secret_key 50 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 51 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 52 | else: 53 | return hashlib.md5(buff.encode("utf8")).hexdigest() 54 | 55 | def check(self): 56 | """请求易盾接口 57 | Returns: 58 | 请求结果,json格式 59 | """ 60 | params = {} 61 | params["secretId"] = self.secret_id 62 | params["version"] = self.VERSION 63 | params["timestamp"] = int(time.time() * 1000) 64 | params["nonce"] = int(random.random() * 100000000) 65 | params["signatureMethod"] = "MD5" 66 | params["signature"] = self.gen_signature(params) 67 | 68 | try: 69 | encoded_params = urlencode(params).encode("utf8") 70 | response = self.http.request( 71 | 'POST', 72 | self.API_URL, 73 | body=encoded_params, 74 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 75 | timeout=urllib3.Timeout(connect=10, read=10) 76 | ) 77 | content = response.data 78 | return json.loads(content) 79 | except Exception as ex: 80 | print("调用API接口失败:", str(ex)) 81 | 82 | 83 | if __name__ == "__main__": 84 | """示例代码入口""" 85 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 86 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 87 | 88 | api = AigcStreamCallbackAPIDemo(SECRET_ID, SECRET_KEY) 89 | 90 | ret = api.check() 91 | 92 | code: int = ret["code"] 93 | msg: str = ret["msg"] 94 | if code == 200: 95 | resultArray: list = ret["result"] 96 | if resultArray is None or len(resultArray) == 0: 97 | print("暂时没有结果需要获取,请稍后重试!") 98 | else: 99 | for resultItem in resultArray: 100 | sessionTaskId: str = resultItem["sessionTaskId"] 101 | sessionId: str = resultItem["sessionId"] 102 | antispam: dict = resultItem["antispam"] 103 | if antispam is None: 104 | print("Can't find antispam Data") 105 | else: 106 | suggestion: str = antispam["suggestion"] 107 | label: str = antispam["label"] 108 | print("sessionTaskId=%s, sessionId=%s, suggestion=%s, label=%s" % (sessionTaskId, sessionId, suggestion, label)) 109 | else: 110 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) -------------------------------------------------------------------------------- /image/imagelist_submit.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | 易盾反垃圾云服务图片名单添加接口python示例代码 5 | 接口文档: http://dun.163.com/api.html 6 | python版本:python3.7 7 | 运行: 8 | 1. 修改 SECRET_ID,SECRET_KEY,BUSINESS_ID 为对应申请到的值 9 | 2. $ python imagelist_submit.py 10 | """ 11 | __author__ = 'yidun-dev' 12 | __date__ = '2020/10/29' 13 | __version__ = '0.2-dev' 14 | 15 | import hashlib 16 | import time 17 | import random 18 | import urllib3 19 | from urllib.parse import urlencode 20 | import json 21 | from gmssl import sm3, func 22 | 23 | 24 | class ImageListSubmitDemo(object): 25 | """易盾反垃圾云服务图片名单添加接口python示例代码""" 26 | 27 | API_URL = "http://as.dun.163.com/v1/image/list/submit" 28 | VERSION = "v1.0" 29 | 30 | def __init__(self, secret_id, secret_key, business_id): 31 | """ 32 | Args: 33 | secret_id (str) 产品密钥ID,产品标识 34 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 35 | business_id (str) 业务ID,易盾根据产品业务特点分配 36 | """ 37 | self.secret_id = secret_id 38 | self.secret_key = secret_key 39 | self.business_id = business_id 40 | self.http = urllib3.PoolManager() # 初始化连接池 41 | 42 | def gen_signature(self, params=None): 43 | """生成签名信息 44 | Args: 45 | params (object) 请求参数 46 | Returns: 47 | 参数签名md5值 48 | """ 49 | buff = "" 50 | for k in sorted(params.keys()): 51 | buff += str(k) + str(params[k]) 52 | buff += self.secret_key 53 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 54 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 55 | else: 56 | return hashlib.md5(buff.encode("utf8")).hexdigest() 57 | 58 | def query(self, params): 59 | """请求易盾接口 60 | Args: 61 | params (object) 请求参数 62 | Returns: 63 | 请求结果,json格式 64 | """ 65 | params["secretId"] = self.secret_id 66 | params["businessId"] = self.business_id 67 | params["version"] = self.VERSION 68 | params["timestamp"] = int(time.time() * 1000) 69 | params["nonce"] = int(random.random() * 100000000) 70 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 71 | params["signature"] = self.gen_signature(params) 72 | 73 | try: 74 | encoded_params = urlencode(params).encode("utf8") 75 | response = self.http.request( 76 | 'POST', 77 | self.API_URL, 78 | body=encoded_params, 79 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 80 | timeout=urllib3.Timeout(connect=10, read=10) 81 | ) 82 | content = response.data 83 | return json.loads(content) 84 | except Exception as ex: 85 | print("调用API接口失败:", str(ex)) 86 | 87 | 88 | if __name__ == "__main__": 89 | """示例代码入口""" 90 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 91 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 92 | BUSINESS_ID = "your_business_id" # 业务ID,易盾根据产品业务特点分配 93 | api = ImageListSubmitDemo(SECRET_ID, SECRET_KEY, BUSINESS_ID) 94 | 95 | # 私有请求参数 96 | images: list = ["http://n1.itc.cn/img8/wb/sohulife/2020/09/04/159920645893400468.JPEG"] 97 | params = { 98 | "listType": "2", 99 | "type": "0", 100 | "imageLabel": "100", 101 | "images": json.dumps(images), 102 | "description": "test" 103 | } 104 | 105 | ret = api.query(params) 106 | 107 | code: int = ret["code"] 108 | msg: str = ret["msg"] 109 | if code == 200: 110 | result: dict = ret["result"] 111 | success: int = result["success"] 112 | fail: int = result["fail"] 113 | print("成功:%s,失败:%s" % (success, fail)) 114 | else: 115 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 116 | -------------------------------------------------------------------------------- /keyword/keyword_submit.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | 易盾反垃圾云服务敏感词提交接口python示例代码 5 | 接口文档: http://dun.163.com/api.html 6 | python版本:python3.7 7 | 运行: 8 | 1. 修改 SECRET_ID,SECRET_KEY,BUSINESS_ID 为对应申请到的值 9 | 2. $ python keyword_submit.py 10 | """ 11 | __author__ = 'yidun-dev' 12 | __date__ = '2020/01/02' 13 | __version__ = '0.2-dev' 14 | 15 | import hashlib 16 | import time 17 | import random 18 | import urllib3 19 | from urllib.parse import urlencode 20 | import json 21 | from gmssl import sm3, func 22 | 23 | 24 | class KeywordSubmitAPIDemo(object): 25 | """敏感词提交接口示例代码""" 26 | 27 | API_URL = "http://as.dun.163.com/v1/keyword/submit" 28 | VERSION = "v1" 29 | 30 | def __init__(self, secret_id, secret_key, business_id): 31 | """ 32 | Args: 33 | secret_id (str) 产品密钥ID,产品标识 34 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 35 | business_id (str) 业务ID,易盾根据产品业务特点分配 36 | """ 37 | self.secret_id = secret_id 38 | self.secret_key = secret_key 39 | self.business_id = business_id 40 | self.http = urllib3.PoolManager() # 初始化连接池 41 | 42 | def gen_signature(self, params=None): 43 | """生成签名信息 44 | Args: 45 | params (object) 请求参数 46 | Returns: 47 | 参数签名md5值 48 | """ 49 | buff = "" 50 | for k in sorted(params.keys()): 51 | buff += str(k) + str(params[k]) 52 | buff += self.secret_key 53 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 54 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 55 | else: 56 | return hashlib.md5(buff.encode("utf8")).hexdigest() 57 | 58 | def check(self, params): 59 | """请求易盾接口 60 | Args: 61 | params (object) 请求参数 62 | Returns: 63 | 请求结果,json格式 64 | """ 65 | params["secretId"] = self.secret_id 66 | params["businessId"] = self.business_id 67 | params["version"] = self.VERSION 68 | params["timestamp"] = int(time.time() * 1000) 69 | params["nonce"] = int(random.random() * 100000000) 70 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 71 | params["signature"] = self.gen_signature(params) 72 | 73 | try: 74 | encoded_params = urlencode(params).encode("utf8") 75 | response = self.http.request( 76 | 'POST', 77 | self.API_URL, 78 | body=encoded_params, 79 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 80 | timeout=urllib3.Timeout(connect=1.0, read=1.0) 81 | ) 82 | content = response.data 83 | return json.loads(content) 84 | except Exception as ex: 85 | print("调用API接口失败:", str(ex)) 86 | 87 | 88 | if __name__ == "__main__": 89 | """示例代码入口""" 90 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 91 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 92 | BUSINESS_ID = "your_business_id" # 业务ID,易盾根据产品业务特点分配 93 | api = KeywordSubmitAPIDemo(SECRET_ID, SECRET_KEY, BUSINESS_ID) 94 | 95 | # 私有请求参数 96 | keywords: list = ["色情敏感词1", "色情敏感词2"] 97 | params = { 98 | "category": "100", # 100: 色情,110: 性感,200: 广告,210: 二维码,300: 暴恐,400: 违禁,500: 涉政,600: 谩骂,700: 灌水 99 | "keywords": ",".join(keywords) 100 | } 101 | 102 | ret = api.check(params) 103 | 104 | code: int = ret["code"] 105 | msg: str = ret["msg"] 106 | if code == 200: 107 | resultArray: list = ret["result"] 108 | for result in resultArray: 109 | keyword: str = result["keyword"] 110 | keyword_id: int = result["id"] 111 | print("敏感词提交成功,keyword: %s,id: %s" % (keyword, keyword_id)) 112 | 113 | else: 114 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 115 | -------------------------------------------------------------------------------- /report/report_submit.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | 易盾反垃圾云服务投诉举报解决方案检测提交接口python示例代码 5 | 接口文档: http://dun.163.com/api.html 6 | python版本:python3.7 7 | 运行: 8 | 1. 修改 SECRET_ID,SECRET_KEY 为对应申请到的值 9 | 2. $ python report_submit.py 10 | """ 11 | __author__ = 'yidun-dev' 12 | __date__ = '2022/06/07' 13 | __version__ = '0.2-dev' 14 | 15 | import hashlib 16 | import time 17 | import random 18 | import urllib3 19 | from urllib.parse import urlencode 20 | import json 21 | from gmssl import sm3, func 22 | 23 | 24 | class ReportSubmitAPIDemo(object): 25 | """投诉举报解决方案检测提交接口示例代码""" 26 | 27 | API_URL = "http://as.dun.163.com/v1/report/submit" 28 | VERSION = "v1" 29 | 30 | def __init__(self, secret_id, secret_key): 31 | """ 32 | Args: 33 | secret_id (str) 产品密钥ID,产品标识 34 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 35 | """ 36 | self.secret_id = secret_id 37 | self.secret_key = secret_key 38 | self.http = urllib3.PoolManager() # 初始化连接池 39 | 40 | def gen_signature(self, params=None): 41 | """生成签名信息 42 | Args: 43 | params (object) 请求参数 44 | Returns: 45 | 参数签名md5值 46 | """ 47 | buff = "" 48 | for k in sorted(params.keys()): 49 | buff += str(k) + str(params[k]) 50 | buff += self.secret_key 51 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 52 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 53 | else: 54 | return hashlib.md5(buff.encode("utf8")).hexdigest() 55 | 56 | def check(self, params): 57 | """请求易盾接口 58 | Args: 59 | params (object) 请求参数 60 | Returns: 61 | 请求结果,json格式 62 | """ 63 | params["secretId"] = self.secret_id 64 | params["version"] = self.VERSION 65 | params["timestamp"] = int(time.time() * 1000) 66 | params["nonce"] = int(random.random() * 100000000) 67 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 68 | params["signature"] = self.gen_signature(params) 69 | 70 | try: 71 | encoded_params = urlencode(params).encode("utf8") 72 | response = self.http.request( 73 | 'POST', 74 | self.API_URL, 75 | body=encoded_params, 76 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 77 | timeout=urllib3.Timeout(connect=1.0, read=1.0) 78 | ) 79 | content = response.data 80 | return json.loads(content) 81 | except Exception as ex: 82 | print("调用API接口失败:", str(ex)) 83 | 84 | 85 | if __name__ == "__main__": 86 | """示例代码入口""" 87 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 88 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 89 | api = ReportSubmitAPIDemo(SECRET_ID, SECRET_KEY) 90 | 91 | # 私有请求参数 92 | arr: list = [] 93 | text = { 94 | "type": "text", 95 | "data": "检测文本", 96 | "dataId": "02" 97 | } 98 | image = { 99 | "type": "image", 100 | "data": "https://url/image1.jpg", 101 | "dataId": "01" 102 | } 103 | 104 | arr.append(text) 105 | arr.append(image) 106 | 107 | params = { 108 | "reportedId": "xxxxxxxx", 109 | "content": json.dumps(arr) 110 | } 111 | 112 | ret = api.check(params) 113 | 114 | # 展示了异步结果返回示例,同步结果返回示例请参考官网开发文档 115 | code: int = ret["code"] 116 | msg: str = ret["msg"] 117 | if code == 200: 118 | result: dict = ret["result"] 119 | antispam: dict = ret["antispam"] 120 | taskId: str = antispam["taskId"] 121 | dataId: str = antispam["dataId"] 122 | print("SUBMIT SUCCESS: taskId=%s, dataId=%s" % (taskId, dataId)) 123 | else: 124 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 125 | -------------------------------------------------------------------------------- /digital/digital_submit.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | 易盾反垃圾云服务数字阅读解决方案检测提交接口python示例代码 5 | 接口文档: http://dun.163.com/api.html 6 | python版本:python3.7 7 | 运行: 8 | 1. 修改 SECRET_ID,SECRET_KEY 为对应申请到的值 9 | 2. $ python digital_submit.py 10 | """ 11 | __author__ = 'yidun-dev' 12 | __date__ = '2022/06/07' 13 | __version__ = '0.2-dev' 14 | 15 | import hashlib 16 | import time 17 | import random 18 | import urllib3 19 | from urllib.parse import urlencode 20 | import json 21 | from gmssl import sm3, func 22 | 23 | 24 | class DigitalSubmitAPIDemo(object): 25 | """数字阅读解决方案检测提交接口示例代码""" 26 | 27 | API_URL = "http://as.dun.163.com/v2/digital/submit" 28 | VERSION = "v2" 29 | 30 | def __init__(self, secret_id, secret_key): 31 | """ 32 | Args: 33 | secret_id (str) 产品密钥ID,产品标识 34 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 35 | """ 36 | self.secret_id = secret_id 37 | self.secret_key = secret_key 38 | self.http = urllib3.PoolManager() # 初始化连接池 39 | 40 | def gen_signature(self, params=None): 41 | """生成签名信息 42 | Args: 43 | params (object) 请求参数 44 | Returns: 45 | 参数签名md5值 46 | """ 47 | buff = "" 48 | for k in sorted(params.keys()): 49 | buff += str(k) + str(params[k]) 50 | buff += self.secret_key 51 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 52 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 53 | else: 54 | return hashlib.md5(buff.encode("utf8")).hexdigest() 55 | 56 | def check(self, params): 57 | """请求易盾接口 58 | Args: 59 | params (object) 请求参数 60 | Returns: 61 | 请求结果,json格式 62 | """ 63 | params["secretId"] = self.secret_id 64 | params["version"] = self.VERSION 65 | params["timestamp"] = int(time.time() * 1000) 66 | params["nonce"] = int(random.random() * 100000000) 67 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 68 | params["signature"] = self.gen_signature(params) 69 | 70 | try: 71 | encoded_params = urlencode(params).encode("utf8") 72 | response = self.http.request( 73 | 'POST', 74 | self.API_URL, 75 | body=encoded_params, 76 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 77 | timeout=urllib3.Timeout(connect=1.0, read=1.0) 78 | ) 79 | content = response.data 80 | return json.loads(content) 81 | except Exception as ex: 82 | print("调用API接口失败:", str(ex)) 83 | 84 | 85 | if __name__ == "__main__": 86 | """示例代码入口""" 87 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 88 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 89 | api = DigitalSubmitAPIDemo(SECRET_ID, SECRET_KEY) 90 | 91 | # 私有请求参数 92 | arr: list = [] 93 | text = { 94 | "type": "text", 95 | "data": "检测文本", 96 | "dataId": "02" 97 | } 98 | image = { 99 | "type": "image", 100 | "data": "https://url/image1.jpg", 101 | "dataId": "01" 102 | } 103 | 104 | arr.append(text) 105 | arr.append(image) 106 | 107 | params = { 108 | "bookId": "xxxxxxxx", 109 | "type": 1, 110 | "content": json.dumps(arr) 111 | } 112 | 113 | ret = api.check(params) 114 | 115 | # 展示了异步结果返回示例,同步结果返回示例请参考官网开发文档 116 | code: int = ret["code"] 117 | msg: str = ret["msg"] 118 | if code == 200: 119 | result: dict = ret["result"] 120 | antispam: dict = ret["antispam"] 121 | taskId: str = antispam["taskId"] 122 | dataId: str = antispam["dataId"] 123 | print("SUBMIT SUCCESS: taskId=%s, dataId=%s" % (taskId, dataId)) 124 | else: 125 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 126 | -------------------------------------------------------------------------------- /livevideosolution/livevideosolution_querymonitor.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | 易盾反垃圾云服务直播音视频解决方案人审操作记录获取接口python示例代码 5 | 接口文档: http://dun.163.com/api.html 6 | python版本:python3.7 7 | 运行: 8 | 1. 修改 SECRET_ID,SECRET_KEY 为对应申请到的值 9 | 2. $ python livevideosolution_querymonitor.py 10 | """ 11 | __author__ = 'yidun-dev' 12 | __date__ = '2020/10/15' 13 | __version__ = '0.2-dev' 14 | 15 | import hashlib 16 | import time 17 | import random 18 | import urllib3 19 | from urllib.parse import urlencode 20 | import json 21 | from gmssl import sm3, func 22 | 23 | 24 | class LiveVideoSolutionQueryMonitorAPIDemo(object): 25 | """直播音视频解决方案人审操作记录获取接口示例代码""" 26 | 27 | API_URL = "http://as.dun.163.com/v1/livewallsolution/query/monitor" 28 | VERSION = "v1.0" 29 | 30 | def __init__(self, secret_id, secret_key): 31 | """ 32 | Args: 33 | secret_id (str) 产品密钥ID,产品标识 34 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 35 | """ 36 | self.secret_id = secret_id 37 | self.secret_key = secret_key 38 | self.http = urllib3.PoolManager() # 初始化连接池 39 | 40 | def gen_signature(self, params=None): 41 | """生成签名信息 42 | Args: 43 | params (object) 请求参数 44 | Returns: 45 | 参数签名md5值 46 | """ 47 | buff = "" 48 | for k in sorted(params.keys()): 49 | buff += str(k) + str(params[k]) 50 | buff += self.secret_key 51 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 52 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 53 | else: 54 | return hashlib.md5(buff.encode("utf8")).hexdigest() 55 | 56 | def check(self, params): 57 | """请求易盾接口 58 | Args: 59 | params (object) 请求参数 60 | Returns: 61 | 请求结果,json格式 62 | """ 63 | params["secretId"] = self.secret_id 64 | params["version"] = self.VERSION 65 | params["timestamp"] = int(time.time() * 1000) 66 | params["nonce"] = int(random.random() * 100000000) 67 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 68 | params["signature"] = self.gen_signature(params) 69 | 70 | try: 71 | encoded_params = urlencode(params).encode("utf8") 72 | response = self.http.request( 73 | 'POST', 74 | self.API_URL, 75 | body=encoded_params, 76 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 77 | timeout=urllib3.Timeout(connect=1.0, read=1.0) 78 | ) 79 | content = response.data 80 | return json.loads(content) 81 | except Exception as ex: 82 | print("调用API接口失败:", str(ex)) 83 | 84 | 85 | if __name__ == "__main__": 86 | """示例代码入口""" 87 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 88 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 89 | api = LiveVideoSolutionQueryMonitorAPIDemo(SECRET_ID, SECRET_KEY) 90 | 91 | # 私有请求参数 92 | params = { 93 | "taskId": "26b3f1b1e1a4460c9012ee45857d8349" 94 | } 95 | ret = api.check(params) 96 | 97 | code: int = ret["code"] 98 | msg: str = ret["msg"] 99 | if code == 200: 100 | result: dict = ret["result"] 101 | status: int = result["status"] 102 | if status == 0: 103 | records: list = result["records"] 104 | for record in records: 105 | action: int = record["action"] 106 | label: int = record["label"] 107 | actionTime: int = record["actionTime"] 108 | detail: str = record["detail"] 109 | print("直播人审结果:%s" % records) 110 | elif status == 20: 111 | print("数据过期") 112 | elif status == 30: 113 | print("数据不存在") 114 | else: 115 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 116 | -------------------------------------------------------------------------------- /livevideosolution/livevideosolution_feedback.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | 易盾反垃圾云服务直播音视频解决方案信息更新接口python示例代码 5 | 接口文档: http://dun.163.com/api.html 6 | python版本:python3.7 7 | 运行: 8 | 1. 修改 SECRET_ID,SECRET_KEY 为对应申请到的值 9 | 2. $ python livevideosolution_feedback.py 10 | """ 11 | __author__ = 'yidun-dev' 12 | __date__ = '2020/10/29' 13 | __version__ = '0.2-dev' 14 | 15 | import hashlib 16 | import time 17 | import random 18 | import urllib3 19 | from urllib.parse import urlencode 20 | import json 21 | from gmssl import sm3, func 22 | 23 | 24 | class LiveVideoSolutionFeedbackAPIDemo(object): 25 | """直播音视频解决方案信息更新接口示例代码""" 26 | 27 | API_URL = "http://as.dun.163yun.com/v1/livewallsolution/feedback" 28 | VERSION = "v1.0" 29 | 30 | def __init__(self, secret_id, secret_key): 31 | """ 32 | Args: 33 | secret_id (str) 产品密钥ID,产品标识 34 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 35 | """ 36 | self.secret_id = secret_id 37 | self.secret_key = secret_key 38 | self.http = urllib3.PoolManager() # 初始化连接池 39 | 40 | def gen_signature(self, params=None): 41 | """生成签名信息 42 | Args: 43 | params (object) 请求参数 44 | Returns: 45 | 参数签名md5值 46 | """ 47 | buff = "" 48 | for k in sorted(params.keys()): 49 | buff += str(k) + str(params[k]) 50 | buff += self.secret_key 51 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 52 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 53 | else: 54 | return hashlib.md5(buff.encode("utf8")).hexdigest() 55 | 56 | def check(self, params): 57 | """请求易盾接口 58 | Args: 59 | params (object) 请求参数 60 | Returns: 61 | 请求结果,json格式 62 | """ 63 | params["secretId"] = self.secret_id 64 | params["version"] = self.VERSION 65 | params["timestamp"] = int(time.time() * 1000) 66 | params["nonce"] = int(random.random() * 100000000) 67 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 68 | params["signature"] = self.gen_signature(params) 69 | 70 | try: 71 | encoded_params = urlencode(params).encode("utf8") 72 | response = self.http.request( 73 | 'POST', 74 | self.API_URL, 75 | body=encoded_params, 76 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 77 | timeout=urllib3.Timeout(connect=1.0, read=1.0) 78 | ) 79 | content = response.data 80 | return json.loads(content) 81 | except Exception as ex: 82 | print("调用API接口失败:", str(ex)) 83 | 84 | 85 | if __name__ == "__main__": 86 | """示例代码入口""" 87 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 88 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 89 | api = LiveVideoSolutionFeedbackAPIDemo(SECRET_ID, SECRET_KEY) 90 | 91 | # 私有请求参数 92 | realTimeInfos: list = [] 93 | realTimeInfo = { 94 | "taskId": "****", 95 | "status": "100" 96 | } 97 | realTimeInfos.append(realTimeInfo) 98 | params = { 99 | "realTimeInfoList": json.dumps(realTimeInfos) 100 | } 101 | ret = api.check(params) 102 | 103 | code: int = ret["code"] 104 | msg: str = ret["msg"] 105 | resultArray: list = ret["result"] 106 | if code == 200: 107 | for result in resultArray: 108 | taskId: str = result["taskId"] 109 | r: int = result["result"] 110 | if r == 0: 111 | print("SUCCESS, taskId=%s" % taskId) 112 | elif r == 2: 113 | print("NOT EXISTS, taskId=%s" % taskId) 114 | elif r == 1: 115 | print("SERVER ERROR, taskId=%s" % taskId) 116 | 117 | else: 118 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 119 | -------------------------------------------------------------------------------- /filesolution/filesolution_query.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | 易盾反垃圾云服务文档解决方案结果查询接口python示例代码 5 | 接口文档: http://dun.163.com/api.html 6 | python版本:python3.7 7 | 运行: 8 | 1. 修改 SECRET_ID,SECRET_KEY 为对应申请到的值 9 | 2. $ python filesolution_query.py 10 | """ 11 | __author__ = 'yidun-dev' 12 | __date__ = '2019/11/27' 13 | __version__ = '0.2-dev' 14 | 15 | import hashlib 16 | import time 17 | import random 18 | import urllib3 19 | from urllib.parse import urlencode 20 | import json 21 | from gmssl import sm3, func 22 | 23 | 24 | class FileSolutionQueryByTaskIdAPIDemo(object): 25 | """文档解决方案结果获取接口""" 26 | 27 | API_URL = "http://as-file.dun.163.com/v1/file/query" 28 | VERSION = "v1.1" 29 | 30 | def __init__(self, secret_id, secret_key): 31 | """ 32 | Args: 33 | secret_id (str) 产品密钥ID,产品标识 34 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 35 | """ 36 | self.secret_id = secret_id 37 | self.secret_key = secret_key 38 | self.http = urllib3.PoolManager() # 初始化连接池 39 | 40 | def gen_signature(self, params=None): 41 | """生成签名信息 42 | Args: 43 | params (object) 请求参数 44 | Returns: 45 | 参数签名md5值 46 | """ 47 | buff = "" 48 | for k in sorted(params.keys()): 49 | buff += str(k) + str(params[k]) 50 | buff += self.secret_key 51 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 52 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 53 | else: 54 | return hashlib.md5(buff.encode("utf8")).hexdigest() 55 | 56 | def check(self, params): 57 | """请求易盾接口 58 | Returns: 59 | 请求结果,json格式 60 | """ 61 | params["secretId"] = self.secret_id 62 | params["version"] = self.VERSION 63 | params["timestamp"] = int(time.time() * 1000) 64 | params["nonce"] = int(random.random() * 100000000) 65 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 66 | params["signature"] = self.gen_signature(params) 67 | 68 | try: 69 | encoded_params = urlencode(params).encode("utf8") 70 | response = self.http.request( 71 | 'POST', 72 | self.API_URL, 73 | body=encoded_params, 74 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 75 | timeout=urllib3.Timeout(connect=10, read=10) 76 | ) 77 | content = response.data 78 | return json.loads(content) 79 | except Exception as ex: 80 | print("调用API接口失败:", str(ex)) 81 | 82 | 83 | if __name__ == "__main__": 84 | """示例代码入口""" 85 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 86 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 87 | api = FileSolutionQueryByTaskIdAPIDemo(SECRET_ID, SECRET_KEY) 88 | 89 | # 私有请求参数 90 | taskIds: list = ['b0a8b041517c46b7b2fff5d5110833d5', 'c3cd5cc6b5474fddb92dfe4d4f1cda34'] # 查询参数taskIds 91 | params = { 92 | "taskIds": taskIds 93 | } 94 | 95 | ret = api.check(params) 96 | 97 | code: int = ret["code"] 98 | msg: str = ret["msg"] 99 | if code == 200: 100 | resultArray: list = ret["result"] 101 | if resultArray is None: 102 | print("Can't find Callback Data") 103 | exit() 104 | for resultItem in resultArray: 105 | dataId: str = resultItem["dataId"] 106 | taskId: str = resultItem["taskId"] 107 | result: int = resultItem["result"] 108 | callback: str = resultItem.get("callback", "") 109 | evidences: dict = resultItem["evidences"] 110 | print("SUCCESS: dataId=%s, taskId=%s, result=%s, callback=%s, evidences=%s" % 111 | (dataId, taskId, result, callback, evidences)) 112 | else: 113 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 114 | -------------------------------------------------------------------------------- /video/livewall_submit.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | 易盾反垃圾云服务直播电视墙提交接口python示例代码 5 | 接口文档: http://dun.163.com/api.html 6 | python版本:python3.7 7 | 运行: 8 | 1. 修改 SECRET_ID,SECRET_KEY,BUSINESS_ID 为对应申请到的值 9 | 2. $ python livewall_submit.py 10 | """ 11 | __author__ = 'yidun-dev' 12 | __date__ = '2019/11/27' 13 | __version__ = '0.2-dev' 14 | 15 | import hashlib 16 | import time 17 | import random 18 | import urllib3 19 | from urllib.parse import urlencode 20 | import json 21 | from gmssl import sm3, func 22 | 23 | 24 | class LiveWallSubmitAPIDemo(object): 25 | """直播电视墙提交接口示例代码""" 26 | 27 | API_URL = "http://as.dun.163.com/v3/livevideo/submit" 28 | VERSION = "v3.1" 29 | 30 | def __init__(self, secret_id, secret_key, business_id): 31 | """ 32 | Args: 33 | secret_id (str) 产品密钥ID,产品标识 34 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 35 | business_id (str) 业务ID,易盾根据产品业务特点分配 36 | """ 37 | self.secret_id = secret_id 38 | self.secret_key = secret_key 39 | self.business_id = business_id 40 | self.http = urllib3.PoolManager() # 初始化连接池 41 | 42 | def gen_signature(self, params=None): 43 | """生成签名信息 44 | Args: 45 | params (object) 请求参数 46 | Returns: 47 | 参数签名md5值 48 | """ 49 | buff = "" 50 | for k in sorted(params.keys()): 51 | buff += str(k) + str(params[k]) 52 | buff += self.secret_key 53 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 54 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 55 | else: 56 | return hashlib.md5(buff.encode("utf8")).hexdigest() 57 | 58 | def check(self, params): 59 | """请求易盾接口 60 | Args: 61 | params (object) 请求参数 62 | Returns: 63 | 请求结果,json格式 64 | """ 65 | params["secretId"] = self.secret_id 66 | params["businessId"] = self.business_id 67 | params["version"] = self.VERSION 68 | params["timestamp"] = int(time.time() * 1000) 69 | params["nonce"] = int(random.random() * 100000000) 70 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 71 | params["signature"] = self.gen_signature(params) 72 | 73 | try: 74 | encoded_params = urlencode(params).encode("utf8") 75 | response = self.http.request( 76 | 'POST', 77 | self.API_URL, 78 | body=encoded_params, 79 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 80 | timeout=urllib3.Timeout(connect=1.0, read=1.0) 81 | ) 82 | content = response.data 83 | return json.loads(content) 84 | except Exception as ex: 85 | print("调用API接口失败:", str(ex)) 86 | 87 | 88 | if __name__ == "__main__": 89 | """示例代码入口""" 90 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 91 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 92 | BUSINESS_ID = "your_business_id" # 业务ID,易盾根据产品业务特点分配 93 | api = LiveWallSubmitAPIDemo(SECRET_ID, SECRET_KEY, BUSINESS_ID) 94 | 95 | # 私有请求参数 96 | params = { 97 | "dataId": "fbfcad1c-dba1-490c-b4de-e784c2691765", 98 | "url": "http://xxx.xxx.com/xxxx" 99 | # "callback": "{\"p\":\"xx\"}" 100 | # "scFrequency": 5 101 | # "callbackUrl": "http://***" # 主动回调地址url,如果设置了则走主动回调逻辑 102 | } 103 | 104 | ret = api.check(params) 105 | 106 | code: int = ret["code"] 107 | msg: str = ret["msg"] 108 | if code == 200: 109 | result: dict = ret["result"] 110 | status: int = result["status"] 111 | taskId: str = result["taskId"] 112 | if status == 0: 113 | print("提交成功!, taskId: %s" % taskId) 114 | else: 115 | print("提交失败!") 116 | else: 117 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 118 | -------------------------------------------------------------------------------- /video/livevideo_submit.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | 易盾反垃圾云服务视频直播流信息提交接口python示例代码 5 | 接口文档: http://dun.163.com/api.html 6 | python版本:python3.7 7 | 运行: 8 | 1. 修改 SECRET_ID,SECRET_KEY,BUSINESS_ID 为对应申请到的值 9 | 2. $ python livevideo_submit.py 10 | """ 11 | __author__ = 'yidun-dev' 12 | __date__ = '2019/11/27' 13 | __version__ = '0.2-dev' 14 | 15 | import hashlib 16 | import time 17 | import random 18 | import urllib3 19 | from urllib.parse import urlencode 20 | import json 21 | from gmssl import sm3, func 22 | 23 | 24 | class LiveVideoSubmitAPIDemo(object): 25 | """视频直播流信息提交接口示例代码""" 26 | 27 | API_URL = "http://as.dun.163.com/v4/livevideo/submit" 28 | VERSION = "v4" 29 | 30 | def __init__(self, secret_id, secret_key, business_id): 31 | """ 32 | Args: 33 | secret_id (str) 产品密钥ID,产品标识 34 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 35 | business_id (str) 业务ID,易盾根据产品业务特点分配 36 | """ 37 | self.secret_id = secret_id 38 | self.secret_key = secret_key 39 | self.business_id = business_id 40 | self.http = urllib3.PoolManager() # 初始化连接池 41 | 42 | def gen_signature(self, params=None): 43 | """生成签名信息 44 | Args: 45 | params (object) 请求参数 46 | Returns: 47 | 参数签名md5值 48 | """ 49 | buff = "" 50 | for k in sorted(params.keys()): 51 | buff += str(k) + str(params[k]) 52 | buff += self.secret_key 53 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 54 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 55 | else: 56 | return hashlib.md5(buff.encode("utf8")).hexdigest() 57 | 58 | def check(self, params): 59 | """请求易盾接口 60 | Args: 61 | params (object) 请求参数 62 | Returns: 63 | 请求结果,json格式 64 | """ 65 | params["secretId"] = self.secret_id 66 | params["businessId"] = self.business_id 67 | params["version"] = self.VERSION 68 | params["timestamp"] = int(time.time() * 1000) 69 | params["nonce"] = int(random.random() * 100000000) 70 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 71 | params["signature"] = self.gen_signature(params) 72 | 73 | try: 74 | encoded_params = urlencode(params).encode("utf8") 75 | response = self.http.request( 76 | 'POST', 77 | self.API_URL, 78 | body=encoded_params, 79 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 80 | timeout=urllib3.Timeout(connect=1.0, read=1.0) 81 | ) 82 | content = response.data 83 | return json.loads(content) 84 | except Exception as ex: 85 | print("调用API接口失败:", str(ex)) 86 | 87 | 88 | if __name__ == "__main__": 89 | """示例代码入口""" 90 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 91 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 92 | BUSINESS_ID = "your_business_id" # 业务ID,易盾根据产品业务特点分配 93 | api = LiveVideoSubmitAPIDemo(SECRET_ID, SECRET_KEY, BUSINESS_ID) 94 | 95 | # 私有请求参数 96 | params = { 97 | "dataId": "fbfcad1c-dba1-490c-b4de-e784c2691765", 98 | "url": "http://xxx.xxx.com/xxxx" 99 | # "callback": "{\"p\":\"xx\"}" 100 | # "scFrequency": 5 101 | # "callbackUrl": "http://***" # 主动回调地址url,如果设置了则走主动回调逻辑 102 | } 103 | 104 | ret = api.check(params) 105 | 106 | code: int = ret["code"] 107 | msg: str = ret["msg"] 108 | if code == 200: 109 | result: dict = ret["result"] 110 | status: int = result["status"] 111 | taskId: str = result["taskId"] 112 | if status == 0: 113 | print("提交成功!, taskId: %s" % taskId) 114 | else: 115 | print("提交失败!") 116 | else: 117 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 118 | -------------------------------------------------------------------------------- /video/video_submit.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | 易盾反垃圾云服务视频点播信息提交接口python示例代码 5 | 接口文档: http://dun.163.com/api.html 6 | python版本:python3.7 7 | 运行: 8 | 1. 修改 SECRET_ID,SECRET_KEY,BUSINESS_ID 为对应申请到的值 9 | 2. $ python video_submit.py 10 | """ 11 | __author__ = 'yidun-dev' 12 | __date__ = '2019/11/27' 13 | __version__ = '0.2-dev' 14 | 15 | import hashlib 16 | import time 17 | import random 18 | import urllib3 19 | from urllib.parse import urlencode 20 | import json 21 | from gmssl import sm3, func 22 | 23 | 24 | class VideoSubmitAPIDemo(object): 25 | """视频点播信息提交接口示例代码""" 26 | 27 | API_URL = "http://as.dun.163.com/v4/video/submit" 28 | VERSION = "v4" 29 | 30 | def __init__(self, secret_id, secret_key, business_id): 31 | """ 32 | Args: 33 | secret_id (str) 产品密钥ID,产品标识 34 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 35 | business_id (str) 业务ID,易盾根据产品业务特点分配 36 | """ 37 | self.secret_id = secret_id 38 | self.secret_key = secret_key 39 | self.business_id = business_id 40 | self.http = urllib3.PoolManager() # 初始化连接池 41 | 42 | def gen_signature(self, params=None): 43 | """生成签名信息 44 | Args: 45 | params (object) 请求参数 46 | Returns: 47 | 参数签名md5值 48 | """ 49 | buff = "" 50 | for k in sorted(params.keys()): 51 | buff += str(k) + str(params[k]) 52 | buff += self.secret_key 53 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 54 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 55 | else: 56 | return hashlib.md5(buff.encode("utf8")).hexdigest() 57 | 58 | def check(self, params): 59 | """请求易盾接口 60 | Args: 61 | params (object) 请求参数 62 | Returns: 63 | 请求结果,json格式 64 | """ 65 | params["secretId"] = self.secret_id 66 | params["businessId"] = self.business_id 67 | params["version"] = self.VERSION 68 | params["timestamp"] = int(time.time() * 1000) 69 | params["nonce"] = int(random.random() * 100000000) 70 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 71 | params["signature"] = self.gen_signature(params) 72 | 73 | try: 74 | encoded_params = urlencode(params).encode("utf8") 75 | response = self.http.request( 76 | 'POST', 77 | self.API_URL, 78 | body=encoded_params, 79 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 80 | timeout=urllib3.Timeout(connect=1.0, read=1.0) 81 | ) 82 | content = response.data 83 | return json.loads(content) 84 | except Exception as ex: 85 | print("调用API接口失败:", str(ex)) 86 | 87 | 88 | if __name__ == "__main__": 89 | """示例代码入口""" 90 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 91 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 92 | BUSINESS_ID = "your_business_id" # 业务ID,易盾根据产品业务特点分配 93 | api = VideoSubmitAPIDemo(SECRET_ID, SECRET_KEY, BUSINESS_ID) 94 | 95 | 96 | # 私有请求参数 97 | params = { 98 | "dataId": "fbfcad1c-dba1-490c-b4de-e784c2691765", 99 | "url": "http://xxx.xxx.com/xxxx" 100 | # "callback": "{\"p\":\"xx\"}" 101 | # "scFrequency": 5 102 | # "callbackUrl": "http://***" # 主动回调地址url,如果设置了则走主动回调逻辑 103 | } 104 | 105 | ret = api.check(params) 106 | 107 | code: int = ret["code"] 108 | msg: str = ret["msg"] 109 | if code == 200: 110 | result: dict = ret["result"] 111 | status: int = result["status"] 112 | taskId: str = result["taskId"] 113 | if status == 0: 114 | print("推送成功! taskId: %s" % (ret["result"]["taskId"])) 115 | else: 116 | print("推送失败! taskId: %s" % (ret["result"]["taskId"])) 117 | else: 118 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 119 | -------------------------------------------------------------------------------- /video/livevideo_query.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | 易盾反垃圾云服务视频直播结果查询接口python示例代码 5 | 接口文档: http://dun.163.com/api.html 6 | python版本:python3.7 7 | 运行: 8 | 1. 修改 SECRET_ID,SECRET_KEY,BUSINESS_ID 为对应申请到的值 9 | 2. $ python livevideo_query.py 10 | """ 11 | __author__ = 'yidun-dev' 12 | __date__ = '2019/11/27' 13 | __version__ = '0.2-dev' 14 | 15 | import hashlib 16 | import time 17 | import random 18 | import urllib3 19 | from urllib.parse import urlencode 20 | import json 21 | from gmssl import sm3, func 22 | 23 | 24 | class LiveVideoQueryByTaskIdsDemo(object): 25 | """视频直播结果查询接口示例代码""" 26 | 27 | API_URL = "http://as.dun.163.com/v1/livevideo/query/task" 28 | VERSION = "v1" 29 | 30 | def __init__(self, secret_id, secret_key, business_id): 31 | """ 32 | Args: 33 | secret_id (str) 产品密钥ID,产品标识 34 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 35 | business_id (str) 业务ID,易盾根据产品业务特点分配 36 | """ 37 | self.secret_id = secret_id 38 | self.secret_key = secret_key 39 | self.business_id = business_id 40 | self.http = urllib3.PoolManager() # 初始化连接池 41 | 42 | def gen_signature(self, params=None): 43 | """生成签名信息 44 | Args: 45 | params (object) 请求参数 46 | Returns: 47 | 参数签名md5值 48 | """ 49 | buff = "" 50 | for k in sorted(params.keys()): 51 | buff += str(k) + str(params[k]) 52 | buff += self.secret_key 53 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 54 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 55 | else: 56 | return hashlib.md5(buff.encode("utf8")).hexdigest() 57 | 58 | def query(self,params): 59 | """请求易盾接口 60 | Args: 61 | params (object) 请求参数 62 | Returns: 63 | 请求结果,json格式 64 | """ 65 | params["secretId"] = self.secret_id 66 | params["businessId"] = self.business_id 67 | params["version"] = self.VERSION 68 | params["timestamp"] = int(time.time() * 1000) 69 | params["nonce"] = int(random.random() * 100000000) 70 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 71 | params["signature"] = self.gen_signature(params) 72 | 73 | try: 74 | encoded_params = urlencode(params).encode("utf8") 75 | response = self.http.request( 76 | 'POST', 77 | self.API_URL, 78 | body=encoded_params, 79 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 80 | timeout=urllib3.Timeout(connect=10, read=10) 81 | ) 82 | content = response.data 83 | return json.loads(content) 84 | except Exception as ex: 85 | print("调用API接口失败:", str(ex)) 86 | 87 | 88 | if __name__ == "__main__": 89 | """示例代码入口""" 90 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 91 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 92 | BUSINESS_ID = "your_business_id" # 业务ID,易盾根据产品业务特点分配 93 | api = LiveVideoQueryByTaskIdsDemo(SECRET_ID, SECRET_KEY, BUSINESS_ID) 94 | 95 | # 私有请求参数 96 | taskIds: list = ['c679d93d4a8d411cbe3454214d4b1fd7', '49800dc7877f4b2a9d2e1dec92b988b6'] # 查询参数taskIds 97 | params = { 98 | "taskIds": taskIds 99 | } 100 | 101 | ret = api.query(params) 102 | 103 | code: int = ret["code"] 104 | msg: str = ret["msg"] 105 | if code == 200: 106 | resultArray: list = ret["result"] 107 | for result in resultArray: 108 | # 直播视频uuid 109 | taskId: str = result["taskId"] 110 | # 直播状态, 101: 直播中,102:直播结束 111 | status: int = result["status"] 112 | # 回调标识 113 | callback: str = result["callback"] 114 | callbackStatus: int = result["callbackStatus"] 115 | expireStatus: int = result["expireStatus"] 116 | else: 117 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 118 | -------------------------------------------------------------------------------- /audio/liveaudio_queryextra.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | 易盾直播音频增值检测结果获取接口python示例代码 5 | 接口文档: http://dun.163.com/api.html 6 | python版本:python3.7 7 | 运行: 8 | 1. 修改 SECRET_ID,SECRET_KEY,BUSINESS_ID 为对应申请到的值 9 | 2. $ python liveaudio_queryextra.py 10 | """ 11 | __author__ = 'yidun-dev' 12 | __date__ = '2020/01/06' 13 | __version__ = '0.2-dev' 14 | 15 | import hashlib 16 | import time 17 | import random 18 | import urllib3 19 | from urllib.parse import urlencode 20 | import json 21 | from gmssl import sm3, func 22 | 23 | 24 | class LiveAudioCallbackAPIDemo(object): 25 | """直播音频增值检测结果获取接口示例代码""" 26 | 27 | API_URL = "http://as.dun.163.com/v1/liveaudio/query/extra" 28 | VERSION = "v1" 29 | 30 | def __init__(self, secret_id, secret_key, business_id): 31 | """ 32 | Args: 33 | secret_id (str) 产品密钥ID,产品标识 34 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 35 | business_id (str) 业务ID,易盾根据产品业务特点分配 36 | """ 37 | self.secret_id = secret_id 38 | self.secret_key = secret_key 39 | self.business_id = business_id 40 | self.http = urllib3.PoolManager() # 初始化连接池 41 | 42 | def gen_signature(self, params=None): 43 | """生成签名信息 44 | Args: 45 | params (object) 请求参数 46 | Returns: 47 | 参数签名md5值 48 | """ 49 | buff = "" 50 | for k in sorted(params.keys()): 51 | buff += str(k) + str(params[k]) 52 | buff += self.secret_key 53 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 54 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 55 | else: 56 | return hashlib.md5(buff.encode("utf8")).hexdigest() 57 | 58 | def check(self, params): 59 | """请求易盾接口 60 | Returns: 61 | 请求结果,json格式 62 | """ 63 | params["secretId"] = self.secret_id 64 | params["businessId"] = self.business_id 65 | params["version"] = self.VERSION 66 | params["timestamp"] = int(time.time() * 1000) 67 | params["nonce"] = int(random.random()*100000000) 68 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 69 | params["signature"] = self.gen_signature(params) 70 | 71 | try: 72 | encoded_params = urlencode(params).encode("utf8") 73 | response = self.http.request( 74 | 'POST', 75 | self.API_URL, 76 | body=encoded_params, 77 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 78 | timeout=urllib3.Timeout(connect=10, read=10) 79 | ) 80 | content = response.data 81 | return json.loads(content) 82 | except Exception as ex: 83 | print("调用API接口失败:", str(ex)) 84 | 85 | 86 | if __name__ == "__main__": 87 | """示例代码入口""" 88 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 89 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 90 | BUSINESS_ID = "your_business_id" # 业务ID,易盾根据产品业务特点分配 91 | api = LiveAudioCallbackAPIDemo(SECRET_ID, SECRET_KEY, BUSINESS_ID) 92 | 93 | params = { 94 | "taskId": "xxx" 95 | } 96 | ret = api.check(params) 97 | 98 | code: int = ret["code"] 99 | msg: str = ret["msg"] 100 | if code == 200: 101 | res: dict = ret["result"] 102 | asrArray: list = res["asr"] 103 | if asrArray is not None and len(asrArray) > 0: 104 | for result in asrArray: 105 | asr: dict = result["asr"] 106 | taskId: str = asr["taskId"] 107 | startTime: int = asr["startTime"] 108 | endTime: int = asr["endTime"] 109 | content: str = asr["content"] 110 | print("语音识别检测结果:taskId=%s, content=%s, startTime=%s, endTime=%s" % 111 | (taskId, content, startTime, endTime)) 112 | else: 113 | print("无语音识别检测结果") 114 | 115 | else: 116 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 117 | -------------------------------------------------------------------------------- /audio/liveaudio_querymonitor.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | 易盾直播音频人审操作记录获取接口python示例代码 5 | 接口文档: http://dun.163.com/api.html 6 | python版本:python3.7 7 | 运行: 8 | 1. 修改 SECRET_ID,SECRET_KEY,BUSINESS_ID 为对应申请到的值 9 | 2. $ python liveaudio_querymonitor.py 10 | """ 11 | __author__ = 'yidun-dev' 12 | __date__ = '2020/10/15' 13 | __version__ = '0.2-dev' 14 | 15 | import hashlib 16 | import time 17 | import random 18 | import urllib3 19 | from urllib.parse import urlencode 20 | import json 21 | from gmssl import sm3, func 22 | 23 | 24 | class LiveAudioQueryMonitorAPIDemo(object): 25 | """调用易盾反垃圾云服务直播音频人审操作记录获取接口API示例""" 26 | 27 | API_URL = "http://as.dun.163.com/v1/liveaudio/query/monitor" 28 | VERSION = "v1.0" 29 | 30 | def __init__(self, secret_id, secret_key, business_id): 31 | """ 32 | Args: 33 | secret_id (str) 产品密钥ID,产品标识 34 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 35 | business_id (str) 业务ID,易盾根据产品业务特点分配 36 | """ 37 | self.secret_id = secret_id 38 | self.secret_key = secret_key 39 | self.business_id = business_id 40 | self.http = urllib3.PoolManager() # 初始化连接池 41 | 42 | def gen_signature(self, params=None): 43 | """生成签名信息 44 | Args: 45 | params (object) 请求参数 46 | Returns: 47 | 参数签名md5值 48 | """ 49 | buff = "" 50 | for k in sorted(params.keys()): 51 | buff += str(k) + str(params[k]) 52 | buff += self.secret_key 53 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 54 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 55 | else: 56 | return hashlib.md5(buff.encode("utf8")).hexdigest() 57 | 58 | def check(self, params): 59 | """请求易盾接口 60 | Returns: 61 | 请求结果,json格式 62 | """ 63 | params["secretId"] = self.secret_id 64 | params["businessId"] = self.business_id 65 | params["version"] = self.VERSION 66 | params["timestamp"] = int(time.time() * 1000) 67 | params["nonce"] = int(random.random()*100000000) 68 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 69 | params["signature"] = self.gen_signature(params) 70 | 71 | try: 72 | encoded_params = urlencode(params).encode("utf8") 73 | response = self.http.request( 74 | 'POST', 75 | self.API_URL, 76 | body=encoded_params, 77 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 78 | timeout=urllib3.Timeout(connect=10, read=10) 79 | ) 80 | content = response.data 81 | return json.loads(content) 82 | except Exception as ex: 83 | print("调用API接口失败:", str(ex)) 84 | 85 | 86 | if __name__ == "__main__": 87 | """示例代码入口""" 88 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 89 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 90 | BUSINESS_ID = "your_business_id" # 业务ID,易盾根据产品业务特点分配 91 | api = LiveAudioQueryMonitorAPIDemo(SECRET_ID, SECRET_KEY, BUSINESS_ID) 92 | 93 | params = { 94 | "taskId": "26b3f1b1e1a4460c9012ee45857d8349" 95 | } 96 | ret = api.check(params) 97 | 98 | code: int = ret["code"] 99 | msg: str = ret["msg"] 100 | if code == 200: 101 | result: dict = ret["result"] 102 | status: int = result["status"] 103 | if status == 0: 104 | monitors: list = result["monitors"] 105 | for monitor in monitors: 106 | action: int = monitor["action"] 107 | actionTime: int = monitor["actionTime"] 108 | spamType: int = monitor["spamType"] 109 | spamDetail: str = monitor["spamDetail"] 110 | print("直播人审结果:%s" % monitors) 111 | elif status == 20: 112 | print("数据过期") 113 | elif status == 30: 114 | print("数据不存在") 115 | else: 116 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 117 | -------------------------------------------------------------------------------- /video/livevideo_feedback.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | 易盾反垃圾云服务直播音视频信息更新接口python示例代码 5 | 接口文档: http://dun.163.com/api.html 6 | python版本:python3.7 7 | 运行: 8 | 1. 修改 SECRET_ID,SECRET_KEY 为对应申请到的值 9 | 2. $ python livevideo_feedback.py 10 | """ 11 | __author__ = 'yidun-dev' 12 | __date__ = '2020/10/29' 13 | __version__ = '0.2-dev' 14 | 15 | import hashlib 16 | import time 17 | import random 18 | import urllib3 19 | from urllib.parse import urlencode 20 | import json 21 | from gmssl import sm3, func 22 | 23 | 24 | class LiveVideoFeedbackAPIDemo(object): 25 | """直播音视频解决方案信息更新接口示例代码""" 26 | 27 | API_URL = "http://as.dun.163.com/v1/livevideo/feedback" 28 | VERSION = "v1.0" 29 | 30 | def __init__(self, secret_id, secret_key, business_id): 31 | """ 32 | Args: 33 | secret_id (str) 产品密钥ID,产品标识 34 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 35 | """ 36 | self.secret_id = secret_id 37 | self.secret_key = secret_key 38 | self.business_id = business_id 39 | self.http = urllib3.PoolManager() # 初始化连接池 40 | 41 | def gen_signature(self, params=None): 42 | """生成签名信息 43 | Args: 44 | params (object) 请求参数 45 | Returns: 46 | 参数签名md5值 47 | """ 48 | buff = "" 49 | for k in sorted(params.keys()): 50 | buff += str(k) + str(params[k]) 51 | buff += self.secret_key 52 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 53 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 54 | else: 55 | return hashlib.md5(buff.encode("utf8")).hexdigest() 56 | 57 | def check(self, params): 58 | """请求易盾接口 59 | Args: 60 | params (object) 请求参数 61 | Returns: 62 | 请求结果,json格式 63 | """ 64 | params["secretId"] = self.secret_id 65 | params["businessId"] = self.business_id 66 | params["version"] = self.VERSION 67 | params["timestamp"] = int(time.time() * 1000) 68 | params["nonce"] = int(random.random() * 100000000) 69 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 70 | params["signature"] = self.gen_signature(params) 71 | 72 | try: 73 | encoded_params = urlencode(params).encode("utf8") 74 | response = self.http.request( 75 | 'POST', 76 | self.API_URL, 77 | body=encoded_params, 78 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 79 | timeout=urllib3.Timeout(connect=1.0, read=1.0) 80 | ) 81 | content = response.data 82 | return json.loads(content) 83 | except Exception as ex: 84 | print("调用API接口失败:", str(ex)) 85 | 86 | 87 | if __name__ == "__main__": 88 | """示例代码入口""" 89 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 90 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 91 | BUSINESS_ID = "your_business_id" # 业务ID,易盾根据产品业务特点分配 92 | api = LiveVideoFeedbackAPIDemo(SECRET_ID, SECRET_KEY, BUSINESS_ID) 93 | 94 | # 私有请求参数 95 | realTimeInfos: list = [] 96 | realTimeInfo = { 97 | "taskId": "****", 98 | "status": "100" 99 | } 100 | realTimeInfos.append(realTimeInfo) 101 | params = { 102 | "realTimeInfoList": json.dumps(realTimeInfos) 103 | } 104 | ret = api.check(params) 105 | 106 | code: int = ret["code"] 107 | msg: str = ret["msg"] 108 | resultArray: list = ret["result"] 109 | if code == 200: 110 | for result in resultArray: 111 | taskId: str = result["taskId"] 112 | r: int = result["result"] 113 | if r == 0: 114 | print("SUCCESS, taskId=%s" % taskId) 115 | elif r == 2: 116 | print("NOT EXISTS, taskId=%s" % taskId) 117 | elif r == 1: 118 | print("SERVER ERROR, taskId=%s" % taskId) 119 | 120 | else: 121 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 122 | -------------------------------------------------------------------------------- /audio/liveaudio_feedback.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | 易盾反垃圾云服务更新直播音频信息接口python示例代码 5 | 接口文档: http://dun.163.com/api.html 6 | python版本:python3.7 7 | 运行: 8 | 1. 修改 SECRET_ID,SECRET_KEY,BUSINESS_ID 为对应申请到的值 9 | 2. $ python liveaudio_feedback.py 10 | """ 11 | __author__ = 'yidun-dev' 12 | __date__ = '2020/10/29' 13 | __version__ = '0.2-dev' 14 | 15 | import hashlib 16 | import time 17 | import random 18 | import urllib3 19 | from urllib.parse import urlencode 20 | import json 21 | from gmssl import sm3, func 22 | 23 | 24 | class LiveAudioFeedbackAPIDemo(object): 25 | """调用易盾反垃圾云服务更新直播音频信息接口API示例""" 26 | 27 | API_URL = "http://as.dun.163.com/v1/liveaudio/feedback" 28 | VERSION = "v1.0" 29 | 30 | def __init__(self, secret_id, secret_key, business_id): 31 | """ 32 | Args: 33 | secret_id (str) 产品密钥ID,产品标识 34 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 35 | business_id (str) 业务ID,易盾根据产品业务特点分配 36 | """ 37 | self.secret_id = secret_id 38 | self.secret_key = secret_key 39 | self.business_id = business_id 40 | self.http = urllib3.PoolManager() # 初始化连接池 41 | 42 | def gen_signature(self, params=None): 43 | """生成签名信息 44 | Args: 45 | params (object) 请求参数 46 | Returns: 47 | 参数签名md5值 48 | """ 49 | buff = "" 50 | for k in sorted(params.keys()): 51 | buff += str(k) + str(params[k]) 52 | buff += self.secret_key 53 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 54 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 55 | else: 56 | return hashlib.md5(buff.encode("utf8")).hexdigest() 57 | 58 | def check(self, params): 59 | """请求易盾接口 60 | Returns: 61 | 请求结果,json格式 62 | """ 63 | params["secretId"] = self.secret_id 64 | params["businessId"] = self.business_id 65 | params["version"] = self.VERSION 66 | params["timestamp"] = int(time.time() * 1000) 67 | params["nonce"] = int(random.random()*100000000) 68 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 69 | params["signature"] = self.gen_signature(params) 70 | 71 | try: 72 | encoded_params = urlencode(params).encode("utf8") 73 | response = self.http.request( 74 | 'POST', 75 | self.API_URL, 76 | body=encoded_params, 77 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 78 | timeout=urllib3.Timeout(connect=10, read=10) 79 | ) 80 | content = response.data 81 | return json.loads(content) 82 | except Exception as ex: 83 | print("调用API接口失败:", str(ex)) 84 | 85 | 86 | if __name__ == "__main__": 87 | """示例代码入口""" 88 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 89 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 90 | BUSINESS_ID = "your_business_id" # 业务ID,易盾根据产品业务特点分配 91 | api = LiveAudioFeedbackAPIDemo(SECRET_ID, SECRET_KEY, BUSINESS_ID) 92 | 93 | feedbacks: list = [] 94 | feedback = { 95 | "taskId": "26b3f1b1e1a4460c9012ee45857d8349", 96 | "status": "100" 97 | } 98 | feedbacks.append(feedback) 99 | 100 | params = { 101 | "feedbacks": json.dumps(feedbacks) 102 | } 103 | ret = api.check(params) 104 | 105 | code: int = ret["code"] 106 | msg: str = ret["msg"] 107 | if code == 200: 108 | resultArray: list = ret["result"] 109 | for result in resultArray: 110 | taskId: str = result["taskId"] 111 | status: int = result["result"] 112 | if status == 0: 113 | print("SUCCESS, taskId=%s" % taskId) 114 | elif status == 2: 115 | print("NOT EXISTS, taskId=%s" % taskId) 116 | elif status == 1: 117 | print("SERVER ERROR, taskId=%s" % taskId) 118 | else: 119 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 120 | -------------------------------------------------------------------------------- /video/livewall_querymonitor.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | 易盾反垃圾云服务直播电视墙人审操作记录获取接口python示例代码 5 | 接口文档: http://dun.163.com/api.html 6 | python版本:python3.7 7 | 运行: 8 | 1. 修改 SECRET_ID,SECRET_KEY,BUSINESS_ID 为对应申请到的值 9 | 2. $ python livewall_querymonitor.py 10 | """ 11 | __author__ = 'yidun-dev' 12 | __date__ = '2020/10/15' 13 | __version__ = '0.2-dev' 14 | 15 | import hashlib 16 | import time 17 | import random 18 | import urllib3 19 | from urllib.parse import urlencode 20 | import json 21 | from gmssl import sm3, func 22 | 23 | 24 | class LiveWallQueryMonitorAPIDemo(object): 25 | """直播电视墙人审操作记录获取接口示例代码""" 26 | 27 | API_URL = "http://as.dun.163.com/v1/livewall/query/monitor" 28 | VERSION = "v1.0" 29 | 30 | def __init__(self, secret_id, secret_key, business_id): 31 | """ 32 | Args: 33 | secret_id (str) 产品密钥ID,产品标识 34 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 35 | business_id (str) 业务ID,易盾根据产品业务特点分配 36 | """ 37 | self.secret_id = secret_id 38 | self.secret_key = secret_key 39 | self.business_id = business_id 40 | self.http = urllib3.PoolManager() # 初始化连接池 41 | 42 | def gen_signature(self, params=None): 43 | """生成签名信息 44 | Args: 45 | params (object) 请求参数 46 | Returns: 47 | 参数签名md5值 48 | """ 49 | buff = "" 50 | for k in sorted(params.keys()): 51 | buff += str(k) + str(params[k]) 52 | buff += self.secret_key 53 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 54 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 55 | else: 56 | return hashlib.md5(buff.encode("utf8")).hexdigest() 57 | 58 | def check(self, params): 59 | """请求易盾接口 60 | Args: 61 | params (object) 请求参数 62 | Returns: 63 | 请求结果,json格式 64 | """ 65 | params["secretId"] = self.secret_id 66 | params["businessId"] = self.business_id 67 | params["version"] = self.VERSION 68 | params["timestamp"] = int(time.time() * 1000) 69 | params["nonce"] = int(random.random() * 100000000) 70 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 71 | params["signature"] = self.gen_signature(params) 72 | 73 | try: 74 | encoded_params = urlencode(params).encode("utf8") 75 | response = self.http.request( 76 | 'POST', 77 | self.API_URL, 78 | body=encoded_params, 79 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 80 | timeout=urllib3.Timeout(connect=1.0, read=1.0) 81 | ) 82 | content = response.data 83 | return json.loads(content) 84 | except Exception as ex: 85 | print("调用API接口失败:", str(ex)) 86 | 87 | 88 | if __name__ == "__main__": 89 | """示例代码入口""" 90 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 91 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 92 | BUSINESS_ID = "your_business_id" # 业务ID,易盾根据产品业务特点分配 93 | api = LiveWallQueryMonitorAPIDemo(SECRET_ID, SECRET_KEY, BUSINESS_ID) 94 | 95 | # 私有请求参数 96 | params = { 97 | "taskId": "26b3f1b1e1a4460c9012ee45857d8349" 98 | } 99 | ret = api.check(params) 100 | 101 | code: int = ret["code"] 102 | msg: str = ret["msg"] 103 | if code == 200: 104 | result: dict = ret["result"] 105 | status: int = result["status"] 106 | if status == 0: 107 | records: list = result["records"] 108 | for record in records: 109 | action: int = record["action"] 110 | label: int = record["label"] 111 | actionTime: int = record["actionTime"] 112 | detail: str = record["detail"] 113 | print("直播人审结果:%s" % records) 114 | elif status == 20: 115 | print("数据过期") 116 | elif status == 30: 117 | print("数据不存在") 118 | else: 119 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 120 | -------------------------------------------------------------------------------- /videosolution/videosolution_submit.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | 易盾反垃圾云服务点播音视频解决方案检测提交接口python示例代码 5 | 接口文档: http://dun.163.com/api.html 6 | python版本:python3.7 7 | 运行: 8 | 1. 修改 SECRET_ID,SECRET_KEY 为对应申请到的值 9 | 2. $ python videosolution_submit.py 10 | """ 11 | __author__ = 'yidun-dev' 12 | __date__ = '2019/11/27' 13 | __version__ = '0.2-dev' 14 | 15 | import hashlib 16 | import time 17 | import random 18 | import urllib3 19 | from urllib.parse import urlencode 20 | import json 21 | from gmssl import sm3, func 22 | 23 | 24 | class VideoSolutionSubmitAPIDemo(object): 25 | """点播音视频解决方案检测提交接口示例代码""" 26 | 27 | API_URL = "http://as.dun.163.com/v1/videosolution/submit" 28 | VERSION = "v1.1" # 点播音视频解决方案版本v1.1及以上语音二级细分类subLabels结构进行调整 29 | 30 | def __init__(self, secret_id, secret_key): 31 | """ 32 | Args: 33 | secret_id (str) 产品密钥ID,产品标识 34 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 35 | """ 36 | self.secret_id = secret_id 37 | self.secret_key = secret_key 38 | self.http = urllib3.PoolManager() # 初始化连接池 39 | 40 | def gen_signature(self, params=None): 41 | """生成签名信息 42 | Args: 43 | params (object) 请求参数 44 | Returns: 45 | 参数签名md5值 46 | """ 47 | buff = "" 48 | for k in sorted(params.keys()): 49 | buff += str(k) + str(params[k]) 50 | buff += self.secret_key 51 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 52 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 53 | else: 54 | return hashlib.md5(buff.encode("utf8")).hexdigest() 55 | 56 | def check(self, params): 57 | """请求易盾接口 58 | Args: 59 | params (object) 请求参数 60 | Returns: 61 | 请求结果,json格式 62 | """ 63 | params["secretId"] = self.secret_id 64 | params["version"] = self.VERSION 65 | params["timestamp"] = int(time.time() * 1000) 66 | params["nonce"] = int(random.random() * 100000000) 67 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 68 | params["signature"] = self.gen_signature(params) 69 | 70 | try: 71 | encoded_params = urlencode(params).encode("utf8") 72 | response = self.http.request( 73 | 'POST', 74 | self.API_URL, 75 | body=encoded_params, 76 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 77 | timeout=urllib3.Timeout(connect=1.0, read=1.0) 78 | ) 79 | content = response.data 80 | return json.loads(content) 81 | except Exception as ex: 82 | print("调用API接口失败:", str(ex)) 83 | 84 | 85 | if __name__ == "__main__": 86 | """示例代码入口""" 87 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 88 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 89 | api = VideoSolutionSubmitAPIDemo(SECRET_ID, SECRET_KEY) 90 | 91 | # 私有请求参数 92 | # images: list = [] 93 | # image1 = { 94 | # "name": "http://p1.music.126.net/lEQvXzoC17AFKa6yrf-ldA==/1412872446212751.jpg", 95 | # "type": 1, 96 | # "data": "http://p1.music.126.net/lEQvXzoC17AFKa6yrf-ldA==/1412872446212751.jpg" 97 | # } 98 | # image2 = { 99 | # "name": "{\"imageId\": 33451123, \"contentId\": 78978}", 100 | # "type": 2, 101 | # "data": "xxx" 102 | # } 103 | # images.append(image1) 104 | # images.append(image2) 105 | params = { 106 | "dataId": "fbfcad1c-dba1-490c-b4de-e784c2691765", 107 | "url": "http://xxx.xx", 108 | # "images": json.dumps(images) 109 | } 110 | 111 | ret = api.check(params) 112 | 113 | code: int = ret["code"] 114 | msg: str = ret["msg"] 115 | if code == 200: 116 | result: dict = ret["result"] 117 | taskId: str = result["taskId"] 118 | dataId: str = result["dataId"] 119 | print("SUBMIT SUCCESS: taskId=%s, dataId=%s" % (taskId, dataId)) 120 | else: 121 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 122 | -------------------------------------------------------------------------------- /text/text_submit.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | 调用易盾反垃圾云服务审核系统文本批量提交接口python示例代码 5 | 接口文档: http://dun.163.com/api.html 6 | python版本:python3.7 7 | 运行: 8 | 1. 修改 SECRET_ID,SECRET_KEY,BUSINESS_ID 为对应申请到的值 9 | 2. $ python text_submit.py 10 | """ 11 | __author__ = 'yidun-dev' 12 | __date__ = '2019/11/27' 13 | __version__ = '0.2-dev' 14 | 15 | import hashlib 16 | import time 17 | import random 18 | import urllib3 19 | from urllib.parse import urlencode 20 | import json 21 | from gmssl import sm3, func 22 | 23 | 24 | class TextSubmitAPIDemo(object): 25 | """调用易盾反垃圾云服务审核系统文本批量提交接口示例代码""" 26 | 27 | API_URL = "http://as.dun.163.com/v5/text/submit" 28 | VERSION = "v5" 29 | 30 | def __init__(self, secret_id, secret_key, business_id): 31 | """ 32 | Args: 33 | secret_id (str) 产品密钥ID,产品标识 34 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 35 | business_id (str) 业务ID,易盾根据产品业务特点分配 36 | """ 37 | self.secret_id = secret_id 38 | self.secret_key = secret_key 39 | self.business_id = business_id 40 | self.http = urllib3.PoolManager() # 初始化连接池 41 | 42 | def gen_signature(self, params=None): 43 | """生成签名信息 44 | Args: 45 | params (object) 请求参数 46 | Returns: 47 | 参数签名md5值 48 | """ 49 | buff = "" 50 | for k in sorted(params.keys()): 51 | buff += str(k) + str(params[k]) 52 | buff += self.secret_key 53 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 54 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 55 | else: 56 | return hashlib.md5(buff.encode("utf8")).hexdigest() 57 | 58 | def check(self, params): 59 | """请求易盾接口 60 | Args: 61 | params (object) 请求参数 62 | Returns: 63 | 请求结果,json格式 64 | """ 65 | params["secretId"] = self.secret_id 66 | params["businessId"] = self.business_id 67 | params["version"] = self.VERSION 68 | params["timestamp"] = int(time.time() * 1000) 69 | params["nonce"] = int(random.random() * 100000000) 70 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 71 | params["signature"] = self.gen_signature(params) 72 | 73 | try: 74 | encoded_params = urlencode(params).encode("utf8") 75 | response = self.http.request( 76 | 'POST', 77 | self.API_URL, 78 | body=encoded_params, 79 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 80 | timeout=urllib3.Timeout(connect=1.0, read=1.0) 81 | ) 82 | content = response.data 83 | return json.loads(content) 84 | except Exception as ex: 85 | print("调用API接口失败:", str(ex)) 86 | 87 | 88 | if __name__ == "__main__": 89 | """示例代码入口""" 90 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 91 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 92 | BUSINESS_ID = "your_business_id" # 业务ID,易盾根据产品业务特点分配 93 | api = TextSubmitAPIDemo(SECRET_ID, SECRET_KEY, BUSINESS_ID) 94 | 95 | # 私有请求参数 96 | texts: list = [] 97 | text1 = { 98 | "dataId": "ebfcad1c-dba1-490c-b4de-e784c2691768", 99 | "content": "易盾测试内容! v5接口!", 100 | "action": "0" 101 | } 102 | text2 = { 103 | "dataId": "ebfcad1c-dba1-490c-b4de-e784c2691768", 104 | "content": "批量提交内容! v5接口!", 105 | "action": "1" 106 | } 107 | texts.append(text1) 108 | texts.append(text2) 109 | params = { 110 | "texts": json.dumps(texts) 111 | } 112 | 113 | ret = api.check(params) 114 | 115 | code: int = ret["code"] 116 | msg: str = ret["msg"] 117 | if code == 200: 118 | resultArray: list = ret["result"] 119 | for result in resultArray: 120 | dataId: str = result["dataId"] 121 | taskId: str = result["taskId"] 122 | print("dataId: %s, 文本提交返回taskId: %s" % (dataId, taskId)) 123 | else: 124 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 125 | -------------------------------------------------------------------------------- /livevideosolution/livevideosolution_queryimage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | 易盾反垃圾云服务直播音视频解决方案查询视频截图信息接口python示例代码 5 | 接口文档: http://dun.163.com/api.html 6 | python版本:python3.7 7 | 运行: 8 | 1. 修改 SECRET_ID,SECRET_KEY 为对应申请到的值 9 | 2. $ python livevideosolution_queryimage.py 10 | """ 11 | __author__ = 'yidun-dev' 12 | __date__ = '2020/10/29' 13 | __version__ = '0.2-dev' 14 | 15 | import hashlib 16 | import time 17 | import random 18 | import urllib3 19 | from urllib.parse import urlencode 20 | import json 21 | from gmssl import sm3, func 22 | 23 | 24 | class LiveVideoSolutionQueryImageAPIDemo(object): 25 | """直播音视频解决方案查询视频截图信息接口示例代码""" 26 | 27 | API_URL = "http://as.dun.163yun.com/v1/livewallsolution/query/image" 28 | VERSION = "v1.0" 29 | 30 | def __init__(self, secret_id, secret_key): 31 | """ 32 | Args: 33 | secret_id (str) 产品密钥ID,产品标识 34 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 35 | """ 36 | self.secret_id = secret_id 37 | self.secret_key = secret_key 38 | self.http = urllib3.PoolManager() # 初始化连接池 39 | 40 | def gen_signature(self, params=None): 41 | """生成签名信息 42 | Args: 43 | params (object) 请求参数 44 | Returns: 45 | 参数签名md5值 46 | """ 47 | buff = "" 48 | for k in sorted(params.keys()): 49 | buff += str(k) + str(params[k]) 50 | buff += self.secret_key 51 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 52 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 53 | else: 54 | return hashlib.md5(buff.encode("utf8")).hexdigest() 55 | 56 | def check(self, params): 57 | """请求易盾接口 58 | Args: 59 | params (object) 请求参数 60 | Returns: 61 | 请求结果,json格式 62 | """ 63 | params["secretId"] = self.secret_id 64 | params["version"] = self.VERSION 65 | params["timestamp"] = int(time.time() * 1000) 66 | params["nonce"] = int(random.random() * 100000000) 67 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 68 | params["signature"] = self.gen_signature(params) 69 | 70 | try: 71 | encoded_params = urlencode(params).encode("utf8") 72 | response = self.http.request( 73 | 'POST', 74 | self.API_URL, 75 | body=encoded_params, 76 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 77 | timeout=urllib3.Timeout(connect=1.0, read=1.0) 78 | ) 79 | content = response.data 80 | return json.loads(content) 81 | except Exception as ex: 82 | print("调用API接口失败:", str(ex)) 83 | 84 | 85 | if __name__ == "__main__": 86 | """示例代码入口""" 87 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 88 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 89 | api = LiveVideoSolutionQueryImageAPIDemo(SECRET_ID, SECRET_KEY) 90 | 91 | # 私有请求参数 92 | params = { 93 | "taskId": "c633a8cb6d45497c9f4e7bd6d8218443", 94 | "levels": "[1,2]", 95 | "callbackStatus": "1", 96 | "pageNum": "1", 97 | "pageSize": "10", 98 | } 99 | ret = api.check(params) 100 | 101 | code: int = ret["code"] 102 | msg: str = ret["msg"] 103 | if code == 200: 104 | result: dict = ret["result"] 105 | status: int = result["status"] 106 | images: dict = result["images"] 107 | count: int = images["count"] 108 | rows: list = images["rows"] 109 | if status == 0: 110 | for row in rows: 111 | url: str = row["url"] 112 | label: int = row["label"] 113 | labelLevel: int = row["labelLevel"] 114 | beginTime: int = row["beginTime"] 115 | endTime: int = row["endTime"] 116 | print("live data query success, images: %s" % rows) 117 | elif status == 20: 118 | print("taskId is expired") 119 | elif status == 30: 120 | print("taskId is not exist") 121 | else: 122 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 123 | -------------------------------------------------------------------------------- /keyword/keyword_query.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | 易盾反垃圾云服务敏感词查询接口python示例代码 5 | 接口文档: http://dun.163.com/api.html 6 | python版本:python3.7 7 | 运行: 8 | 1. 修改 SECRET_ID,SECRET_KEY,BUSINESS_ID 为对应申请到的值 9 | 2. $ python keyword_query.py 10 | """ 11 | __author__ = 'yidun-dev' 12 | __date__ = '2020/01/02' 13 | __version__ = '0.2-dev' 14 | 15 | import hashlib 16 | import time 17 | import random 18 | import urllib3 19 | from urllib.parse import urlencode 20 | import json 21 | from gmssl import sm3, func 22 | 23 | 24 | class KeywordSubmitAPIDemo(object): 25 | """敏感词查询接口示例代码""" 26 | 27 | API_URL = "http://as.dun.163.com/v1/keyword/query" 28 | VERSION = "v1" 29 | 30 | def __init__(self, secret_id, secret_key, business_id): 31 | """ 32 | Args: 33 | secret_id (str) 产品密钥ID,产品标识 34 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 35 | business_id (str) 业务ID,易盾根据产品业务特点分配 36 | """ 37 | self.secret_id = secret_id 38 | self.secret_key = secret_key 39 | self.business_id = business_id 40 | self.http = urllib3.PoolManager() # 初始化连接池 41 | 42 | def gen_signature(self, params=None): 43 | """生成签名信息 44 | Args: 45 | params (object) 请求参数 46 | Returns: 47 | 参数签名md5值 48 | """ 49 | buff = "" 50 | for k in sorted(params.keys()): 51 | buff += str(k) + str(params[k]) 52 | buff += self.secret_key 53 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 54 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 55 | else: 56 | return hashlib.md5(buff.encode("utf8")).hexdigest() 57 | 58 | def check(self, params): 59 | """请求易盾接口 60 | Args: 61 | params (object) 请求参数 62 | Returns: 63 | 请求结果,json格式 64 | """ 65 | params["secretId"] = self.secret_id 66 | params["businessId"] = self.business_id 67 | params["version"] = self.VERSION 68 | params["timestamp"] = int(time.time() * 1000) 69 | params["nonce"] = int(random.random() * 100000000) 70 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 71 | params["signature"] = self.gen_signature(params) 72 | 73 | try: 74 | encoded_params = urlencode(params).encode("utf8") 75 | response = self.http.request( 76 | 'POST', 77 | self.API_URL, 78 | body=encoded_params, 79 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 80 | timeout=urllib3.Timeout(connect=1.0, read=1.0) 81 | ) 82 | content = response.data 83 | return json.loads(content) 84 | except Exception as ex: 85 | print("调用API接口失败:", str(ex)) 86 | 87 | 88 | if __name__ == "__main__": 89 | """示例代码入口""" 90 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 91 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 92 | BUSINESS_ID = "your_business_id" # 业务ID,易盾根据产品业务特点分配 93 | api = KeywordSubmitAPIDemo(SECRET_ID, SECRET_KEY, BUSINESS_ID) 94 | 95 | # 私有请求参数 96 | params = { 97 | "id": "163", 98 | "category": "100", # 100: 色情,110: 性感,200: 广告,210: 二维码,300: 暴恐,400: 违禁,500: 涉政,600: 谩骂,700: 灌水 99 | "keyword": "色情敏感词", 100 | "orderType": "1", 101 | "pageNum": "1", 102 | "pageSize": "20" 103 | } 104 | 105 | ret = api.check(params) 106 | 107 | code: int = ret["code"] 108 | msg: str = ret["msg"] 109 | if code == 200: 110 | result: object = ret["result"] 111 | words: object = result["words"] 112 | count: int = words["count"] 113 | rows: list = words["rows"] 114 | for row in rows: 115 | keyword_id: int = row["id"] 116 | word: str = row["word"] 117 | category: int = row["category"] 118 | status: int = row["status"] 119 | updateTime: int = row["updateTime"] 120 | print("敏感词查询成功,id: %s,keyword: %s,category: %s,status: %s,updateTime: %s" % (keyword_id, word, category, status, updateTime)) 121 | 122 | else: 123 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 124 | -------------------------------------------------------------------------------- /list/list_query.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | 易盾反垃圾云服务名单查询接口python示例代码 5 | 接口文档: http://dun.163.com/api.html 6 | python版本:python3.7 7 | 运行: 8 | 1. 修改 SECRET_ID,SECRET_KEY,BUSINESS_ID 为对应申请到的值 9 | 2. $ python list_query.py 10 | """ 11 | __author__ = 'yidun-dev' 12 | __date__ = '2022/06/06' 13 | __version__ = '0.2-dev' 14 | 15 | import hashlib 16 | import time 17 | import random 18 | import urllib3 19 | from urllib.parse import urlencode 20 | import json 21 | from gmssl import sm3, func 22 | 23 | 24 | class ListQueryDemo(object): 25 | """易盾反垃圾云服务名单查询接口python示例代码""" 26 | 27 | API_URL = "http://as.dun.163yun.com/v2/list/pageQuery" 28 | VERSION = "v2" 29 | 30 | def __init__(self, secret_id, secret_key, business_id): 31 | """ 32 | Args: 33 | secret_id (str) 产品密钥ID,产品标识 34 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 35 | business_id (str) 业务ID,易盾根据产品业务特点分配 36 | """ 37 | self.secret_id = secret_id 38 | self.secret_key = secret_key 39 | self.business_id = business_id 40 | self.http = urllib3.PoolManager() # 初始化连接池 41 | 42 | def gen_signature(self, params=None): 43 | """生成签名信息 44 | Args: 45 | params (object) 请求参数 46 | Returns: 47 | 参数签名md5值 48 | """ 49 | buff = "" 50 | for k in sorted(params.keys()): 51 | buff += str(k) + str(params[k]) 52 | buff += self.secret_key 53 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 54 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 55 | else: 56 | return hashlib.md5(buff.encode("utf8")).hexdigest() 57 | 58 | def query(self, params): 59 | """请求易盾接口 60 | Args: 61 | params (object) 请求参数 62 | Returns: 63 | 请求结果,json格式 64 | """ 65 | params["secretId"] = self.secret_id 66 | params["businessId"] = self.business_id 67 | params["version"] = self.VERSION 68 | params["timestamp"] = int(time.time() * 1000) 69 | params["nonce"] = int(random.random() * 100000000) 70 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 71 | params["signature"] = self.gen_signature(params) 72 | 73 | try: 74 | encoded_params = urlencode(params).encode("utf8") 75 | response = self.http.request( 76 | 'POST', 77 | self.API_URL, 78 | body=encoded_params, 79 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 80 | timeout=urllib3.Timeout(connect=10, read=10) 81 | ) 82 | content = response.data 83 | return json.loads(content) 84 | except Exception as ex: 85 | print("调用API接口失败:", str(ex)) 86 | 87 | 88 | if __name__ == "__main__": 89 | """示例代码入口""" 90 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 91 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 92 | BUSINESS_ID = "your_business_id" # 业务ID,易盾根据产品业务特点分配 93 | api = ListQueryDemo(SECRET_ID, SECRET_KEY, BUSINESS_ID) 94 | 95 | # 私有请求参数 96 | params = { 97 | "pageNum": 1, 98 | "pageSize": 20, 99 | "startTime": 1598951727666, 100 | "endTime": 1598961727666, 101 | "listType": 2, 102 | "entityType": 1 103 | } 104 | 105 | ret = api.query(params) 106 | 107 | code: int = ret["code"] 108 | msg: str = ret["msg"] 109 | if code == 200: 110 | result: dict = ret["result"] 111 | count: int = result["count"] 112 | rows: list = result["rows"] 113 | if rows is not None and len(rows) > 0: 114 | for row in rows: 115 | listType: int = row["listType"] 116 | entityType: int = row["entityType"] 117 | productId: int = row["productId"] 118 | targetId: int = row["targetId"] 119 | entity: str = row["entity"] 120 | releaseTime: int = row["releaseTime"] 121 | source: int = row["source"] 122 | spamType: int = row["spamType"] 123 | print("count:%s, rows:%s" % (count, rows)) 124 | else: 125 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 126 | -------------------------------------------------------------------------------- /mediasolution/mediasolution_submit.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | 易盾反垃圾云服务融媒体解决方案检测提交接口python示例代码 5 | 接口文档: http://dun.163.com/api.html 6 | python版本:python3.7 7 | 运行: 8 | 1. 修改 SECRET_ID,SECRET_KEY 为对应申请到的值 9 | 2. $ python mediasolution_submit.py 10 | """ 11 | __author__ = 'yidun-dev' 12 | __date__ = '2020/06/24' 13 | __version__ = '0.2-dev' 14 | 15 | import hashlib 16 | import time 17 | import random 18 | import urllib3 19 | from urllib.parse import urlencode 20 | import json 21 | from gmssl import sm3, func 22 | 23 | 24 | class MediaSolutionSubmitAPIDemo(object): 25 | """融媒体解决方案检测提交接口示例代码""" 26 | 27 | API_URL = "http://as.dun.163.com/v2/mediasolution/submit" 28 | VERSION = "v2.0" 29 | 30 | def __init__(self, secret_id, secret_key): 31 | """ 32 | Args: 33 | secret_id (str) 产品密钥ID,产品标识 34 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 35 | """ 36 | self.secret_id = secret_id 37 | self.secret_key = secret_key 38 | self.http = urllib3.PoolManager() # 初始化连接池 39 | 40 | def gen_signature(self, params=None): 41 | """生成签名信息 42 | Args: 43 | params (object) 请求参数 44 | Returns: 45 | 参数签名md5值 46 | """ 47 | buff = "" 48 | for k in sorted(params.keys()): 49 | buff += str(k) + str(params[k]) 50 | buff += self.secret_key 51 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 52 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 53 | else: 54 | return hashlib.md5(buff.encode("utf8")).hexdigest() 55 | 56 | def check(self, params): 57 | """请求易盾接口 58 | Args: 59 | params (object) 请求参数 60 | Returns: 61 | 请求结果,json格式 62 | """ 63 | params["secretId"] = self.secret_id 64 | params["version"] = self.VERSION 65 | params["timestamp"] = int(time.time() * 1000) 66 | params["nonce"] = int(random.random() * 100000000) 67 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 68 | params["signature"] = self.gen_signature(params) 69 | 70 | try: 71 | encoded_params = urlencode(params).encode("utf8") 72 | response = self.http.request( 73 | 'POST', 74 | self.API_URL, 75 | body=encoded_params, 76 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 77 | timeout=urllib3.Timeout(connect=1.0, read=1.0) 78 | ) 79 | content = response.data 80 | return json.loads(content) 81 | except Exception as ex: 82 | print("调用API接口失败:", str(ex)) 83 | 84 | 85 | if __name__ == "__main__": 86 | """示例代码入口""" 87 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 88 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 89 | api = MediaSolutionSubmitAPIDemo(SECRET_ID, SECRET_KEY) 90 | 91 | # 私有请求参数 92 | arr: list = [] 93 | text = { 94 | "type": "text", 95 | "data": "融媒体文本段落" 96 | } 97 | image = { 98 | "type": "image", 99 | "data": "http://xxx" 100 | } 101 | audio = { 102 | "type": "audio", 103 | "data": "http://xxx" 104 | } 105 | video = { 106 | "type": "video", 107 | "data": "http://xxx" 108 | } 109 | audiovideo = { 110 | "type": "audiovideo", 111 | "data": "http://xxx" 112 | } 113 | file = { 114 | "type": "file", 115 | "data": "http://xxx" 116 | } 117 | 118 | arr.append(text) 119 | arr.append(image) 120 | arr.append(audio) 121 | arr.append(video) 122 | arr.append(audiovideo) 123 | arr.append(file) 124 | 125 | params = { 126 | "title": "融媒体解决方案的标题", 127 | "content": json.dumps(arr) 128 | } 129 | 130 | ret = api.check(params) 131 | 132 | # 展示了异步结果返回示例,同步结果返回示例请参考官网开发文档 133 | code: int = ret["code"] 134 | msg: str = ret["msg"] 135 | if code == 200: 136 | result: dict = ret["result"] 137 | antispam: dict = result["antispam"] 138 | taskId: str = antispam["taskId"] 139 | dataId: str = antispam["dataId"] 140 | print("SUBMIT SUCCESS: taskId=%s, dataId=%s" % (taskId, dataId)) 141 | else: 142 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 143 | -------------------------------------------------------------------------------- /image/imagelist_query.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | 易盾反垃圾云服务图片名单查询接口python示例代码 5 | 接口文档: http://dun.163.com/api.html 6 | python版本:python3.7 7 | 运行: 8 | 1. 修改 SECRET_ID,SECRET_KEY,BUSINESS_ID 为对应申请到的值 9 | 2. $ python imagelist_query.py 10 | """ 11 | __author__ = 'yidun-dev' 12 | __date__ = '2020/10/29' 13 | __version__ = '0.2-dev' 14 | 15 | import hashlib 16 | import time 17 | import random 18 | import urllib3 19 | from urllib.parse import urlencode 20 | import json 21 | from gmssl import sm3, func 22 | 23 | 24 | class ImageListQueryDemo(object): 25 | """易盾反垃圾云服务图片名单查询接口python示例代码""" 26 | 27 | API_URL = "http://as.dun.163.com/v1/image/list/pageQuery" 28 | VERSION = "v1.0" 29 | 30 | def __init__(self, secret_id, secret_key, business_id): 31 | """ 32 | Args: 33 | secret_id (str) 产品密钥ID,产品标识 34 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 35 | business_id (str) 业务ID,易盾根据产品业务特点分配 36 | """ 37 | self.secret_id = secret_id 38 | self.secret_key = secret_key 39 | self.business_id = business_id 40 | self.http = urllib3.PoolManager() # 初始化连接池 41 | 42 | def gen_signature(self, params=None): 43 | """生成签名信息 44 | Args: 45 | params (object) 请求参数 46 | Returns: 47 | 参数签名md5值 48 | """ 49 | buff = "" 50 | for k in sorted(params.keys()): 51 | buff += str(k) + str(params[k]) 52 | buff += self.secret_key 53 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 54 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 55 | else: 56 | return hashlib.md5(buff.encode("utf8")).hexdigest() 57 | 58 | def query(self, params): 59 | """请求易盾接口 60 | Args: 61 | params (object) 请求参数 62 | Returns: 63 | 请求结果,json格式 64 | """ 65 | params["secretId"] = self.secret_id 66 | params["businessId"] = self.business_id 67 | params["version"] = self.VERSION 68 | params["timestamp"] = int(time.time() * 1000) 69 | params["nonce"] = int(random.random() * 100000000) 70 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 71 | params["signature"] = self.gen_signature(params) 72 | 73 | try: 74 | encoded_params = urlencode(params).encode("utf8") 75 | response = self.http.request( 76 | 'POST', 77 | self.API_URL, 78 | body=encoded_params, 79 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 80 | timeout=urllib3.Timeout(connect=10, read=10) 81 | ) 82 | content = response.data 83 | return json.loads(content) 84 | except Exception as ex: 85 | print("调用API接口失败:", str(ex)) 86 | 87 | 88 | if __name__ == "__main__": 89 | """示例代码入口""" 90 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 91 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 92 | BUSINESS_ID = "your_business_id" # 业务ID,易盾根据产品业务特点分配 93 | api = ImageListQueryDemo(SECRET_ID, SECRET_KEY, BUSINESS_ID) 94 | 95 | # 私有请求参数 96 | params = { 97 | "pageNum": "1", 98 | "pageSize": "20", 99 | "startTime": "1598951727666", 100 | "endTime": "1598961727666", 101 | "type": "0", 102 | "listType": "2", 103 | "status": "1", 104 | } 105 | 106 | ret = api.query(params) 107 | 108 | code: int = ret["code"] 109 | msg: str = ret["msg"] 110 | if code == 200: 111 | result: dict = ret["result"] 112 | count: int = result["count"] 113 | rows: list = result["rows"] 114 | if rows is not None and len(rows) > 0: 115 | for row in rows: 116 | businessId: int = row["businessId"] 117 | productId: int = row["productId"] 118 | uuid: str = row["uuid"] 119 | url: str = row["url"] 120 | hitCount: int = row["hitCount"] 121 | imageLabel: int = row["imageLabel"] 122 | status: int = row["status"] 123 | listType: int = row["listType"] 124 | nosPath: str = row["nosPath"] 125 | print("count:%s, rows:%s" % (count, rows)) 126 | else: 127 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 128 | -------------------------------------------------------------------------------- /video/livevideo_callback.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | 易盾反垃圾云服务视频直播离线结果获取接口python示例代码 5 | 接口文档: http://dun.163.com/api.html 6 | python版本:python3.7 7 | 运行: 8 | 1. 修改 SECRET_ID,SECRET_KEY,BUSINESS_ID 为对应申请到的值 9 | 2. $ python livevideo_callback.py 10 | """ 11 | __author__ = 'yidun-dev' 12 | __date__ = '2019/11/27' 13 | __version__ = '0.2-dev' 14 | 15 | import hashlib 16 | import time 17 | import random 18 | import urllib3 19 | from urllib.parse import urlencode 20 | import json 21 | from gmssl import sm3, func 22 | 23 | 24 | class LiveVideoCallbackAPIDemo(object): 25 | """视频直播离线结果获取接口示例代码""" 26 | 27 | API_URL = "http://as.dun.163.com/v4/livevideo/callback/results" 28 | VERSION = "v4" 29 | 30 | def __init__(self, secret_id, secret_key, business_id): 31 | """ 32 | Args: 33 | secret_id (str) 产品密钥ID,产品标识 34 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 35 | business_id (str) 业务ID,易盾根据产品业务特点分配 36 | """ 37 | self.secret_id = secret_id 38 | self.secret_key = secret_key 39 | self.business_id = business_id 40 | self.http = urllib3.PoolManager() # 初始化连接池 41 | 42 | def gen_signature(self, params=None): 43 | """生成签名信息 44 | Args: 45 | params (object) 请求参数 46 | Returns: 47 | 参数签名md5值 48 | """ 49 | buff = "" 50 | for k in sorted(params.keys()): 51 | buff += str(k) + str(params[k]) 52 | buff += self.secret_key 53 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 54 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 55 | else: 56 | return hashlib.md5(buff.encode("utf8")).hexdigest() 57 | 58 | def check(self): 59 | """请求易盾接口 60 | Returns: 61 | 请求结果,json格式 62 | """ 63 | params = {} 64 | params["secretId"] = self.secret_id 65 | params["businessId"] = self.business_id 66 | params["version"] = self.VERSION 67 | params["timestamp"] = int(time.time() * 1000) 68 | params["nonce"] = int(random.random() * 100000000) 69 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 70 | params["signature"] = self.gen_signature(params) 71 | 72 | try: 73 | encoded_params = urlencode(params).encode("utf8") 74 | response = self.http.request( 75 | 'POST', 76 | self.API_URL, 77 | body=encoded_params, 78 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 79 | timeout=urllib3.Timeout(connect=10, read=10) 80 | ) 81 | content = response.data 82 | return json.loads(content) 83 | except Exception as ex: 84 | print("调用API接口失败:", str(ex)) 85 | 86 | 87 | if __name__ == "__main__": 88 | """示例代码入口""" 89 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 90 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 91 | BUSINESS_ID = "your_business_id" # 业务ID,易盾根据产品业务特点分配 92 | api = LiveVideoCallbackAPIDemo(SECRET_ID, SECRET_KEY, BUSINESS_ID) 93 | 94 | ret = api.check() 95 | 96 | code: int = ret["code"] 97 | msg: str = ret["msg"] 98 | if code == 200: 99 | resultArray: list = ret["result"] 100 | for result in resultArray: 101 | antispam: dict = result["antispam"] 102 | taskId: str = antispam["taskId"] 103 | dataId: str = antispam["dataId"] 104 | censorSource: int = antispam["censorSource"] 105 | status: int = antispam["status"] 106 | if status == 2: 107 | evidence: dict = antispam["evidence"] 108 | labelArray: list = antispam["labels"] 109 | if len(labelArray) > 0: # 检测异常 110 | for labelItem in labelArray: 111 | label: int = labelItem["label"] 112 | level: int = labelItem["level"] 113 | rate: float = labelItem["rate"] 114 | subLabelArray: list = labelItem["subLabels"] 115 | print("异常, taskId: %s, 分类: %s, 证据信息: %s" % (taskId, labelItem, evidence)) 116 | else: 117 | print("未检测成功, status: %s" % status) 118 | else: 119 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 120 | -------------------------------------------------------------------------------- /text/text_query.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """易盾反垃圾云服务文本结果查询接口python示例代码 4 | 接口文档: http://dun.163.com/api.html 5 | python版本:python3.7 6 | 运行: 7 | 1. 修改 SECRET_ID,SECRET_KEY,BUSINESS_ID 为对应申请到的值 8 | 2. $ python text_query.py 9 | """ 10 | __author__ = 'yidun-dev' 11 | __date__ = '2019/11/27' 12 | __version__ = '0.2-dev' 13 | 14 | import hashlib 15 | import time 16 | import random 17 | import urllib3 18 | from urllib.parse import urlencode 19 | import json 20 | from gmssl import sm3, func 21 | 22 | 23 | class TextQueryByTaskIdsDemo(object): 24 | """文本结果查询接口示例代码""" 25 | 26 | API_URL = "http://as.dun.163.com/v1/text/query/task" 27 | VERSION = "v1" 28 | 29 | def __init__(self, secret_id, secret_key, business_id): 30 | """ 31 | Args: 32 | secret_id (str) 产品密钥ID,产品标识 33 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 34 | business_id (str) 业务ID,易盾根据产品业务特点分配 35 | """ 36 | self.secret_id = secret_id 37 | self.secret_key = secret_key 38 | self.business_id = business_id 39 | self.http = urllib3.PoolManager() # 初始化连接池 40 | 41 | def gen_signature(self, params=None): 42 | """生成签名信息 43 | Args: 44 | params (object) 请求参数 45 | Returns: 46 | 参数签名md5值 47 | """ 48 | buff = "" 49 | for k in sorted(params.keys()): 50 | buff += str(k) + str(params[k]) 51 | buff += self.secret_key 52 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 53 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 54 | else: 55 | return hashlib.md5(buff.encode("utf8")).hexdigest() 56 | 57 | def query(self,params): 58 | """请求易盾接口 59 | Args: 60 | params (object) 请求参数 61 | Returns: 62 | 请求结果,json格式 63 | """ 64 | params["secretId"] = self.secret_id 65 | params["businessId"] = self.business_id 66 | params["version"] = self.VERSION 67 | params["timestamp"] = int(time.time() * 1000) 68 | params["nonce"] = int(random.random() * 100000000) 69 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 70 | params["signature"] = self.gen_signature(params) 71 | 72 | try: 73 | encoded_params = urlencode(params).encode("utf8") 74 | response = self.http.request( 75 | 'POST', 76 | self.API_URL, 77 | body=encoded_params, 78 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 79 | timeout=urllib3.Timeout(connect=10, read=10) 80 | ) 81 | content = response.data 82 | return json.loads(content) 83 | except Exception as ex: 84 | print("调用API接口失败:", str(ex)) 85 | 86 | 87 | if __name__ == "__main__": 88 | """示例代码入口""" 89 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 90 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 91 | BUSINESS_ID = "your_business_id" # 业务ID,易盾根据产品业务特点分配 92 | api = TextQueryByTaskIdsDemo(SECRET_ID, SECRET_KEY, BUSINESS_ID) 93 | 94 | # 私有请求参数 95 | taskIds: list = ['c679d93d4a8d411cbe3454214d4b1fd7', '49800dc7877f4b2a9d2e1dec92b988b6'] # 查询参数taskIds 96 | params = { 97 | "taskIds": taskIds 98 | } 99 | 100 | ret = api.query(params) 101 | 102 | code: int = ret["code"] 103 | msg: str = ret["msg"] 104 | if code == 200: 105 | resultArray: list = ret["result"] 106 | for result in resultArray: 107 | action: int = result["action"] 108 | taskId: str = result["taskId"] 109 | status: int = result["status"] 110 | callback: str = result.get("callback", "") 111 | labelArray: list = result["labels"] 112 | # for labelItem in labelArray: 113 | # label: int = labelItem["label"] 114 | # level: int = labelItem["level"] 115 | # details: dict = labelItem["details"] 116 | # hintArray: list = labelItem["hint"] 117 | if action == 0: 118 | print("taskId: %s, callback: %s, 文本查询结果: 通过" % (taskId, callback)) 119 | elif action == 2: 120 | print("taskId: %s, callback: %s, 文本查询结果: 不通过, 分类信息如下: %s" % (taskId, callback, labelArray)) 121 | else: 122 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 123 | -------------------------------------------------------------------------------- /livevideosolution/livevideosolution_queryaudio.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | 易盾反垃圾云服务直播音视频解决方案查询音频断句信息接口python示例代码 5 | 接口文档: http://dun.163.com/api.html 6 | python版本:python3.7 7 | 运行: 8 | 1. 修改 SECRET_ID,SECRET_KEY 为对应申请到的值 9 | 2. $ python livevideosolution_queryaudio.py 10 | """ 11 | __author__ = 'yidun-dev' 12 | __date__ = '2020/10/29' 13 | __version__ = '0.2-dev' 14 | 15 | import hashlib 16 | import time 17 | import random 18 | import urllib3 19 | from urllib.parse import urlencode 20 | import json 21 | from gmssl import sm3, func 22 | 23 | 24 | class LiveVideoSolutionQueryAudioAPIDemo(object): 25 | """直播音视频解决方案人审查询音频断句信息接口示例代码""" 26 | 27 | API_URL = "http://as.dun.163yun.com/v1/livewallsolution/query/audio/task" 28 | VERSION = "v1.0" 29 | 30 | def __init__(self, secret_id, secret_key): 31 | """ 32 | Args: 33 | secret_id (str) 产品密钥ID,产品标识 34 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 35 | """ 36 | self.secret_id = secret_id 37 | self.secret_key = secret_key 38 | self.http = urllib3.PoolManager() # 初始化连接池 39 | 40 | def gen_signature(self, params=None): 41 | """生成签名信息 42 | Args: 43 | params (object) 请求参数 44 | Returns: 45 | 参数签名md5值 46 | """ 47 | buff = "" 48 | for k in sorted(params.keys()): 49 | buff += str(k) + str(params[k]) 50 | buff += self.secret_key 51 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 52 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 53 | else: 54 | return hashlib.md5(buff.encode("utf8")).hexdigest() 55 | 56 | def check(self, params): 57 | """请求易盾接口 58 | Args: 59 | params (object) 请求参数 60 | Returns: 61 | 请求结果,json格式 62 | """ 63 | params["secretId"] = self.secret_id 64 | params["version"] = self.VERSION 65 | params["timestamp"] = int(time.time() * 1000) 66 | params["nonce"] = int(random.random() * 100000000) 67 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 68 | params["signature"] = self.gen_signature(params) 69 | 70 | try: 71 | encoded_params = urlencode(params).encode("utf8") 72 | response = self.http.request( 73 | 'POST', 74 | self.API_URL, 75 | body=encoded_params, 76 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 77 | timeout=urllib3.Timeout(connect=1.0, read=1.0) 78 | ) 79 | content = response.data 80 | return json.loads(content) 81 | except Exception as ex: 82 | print("调用API接口失败:", str(ex)) 83 | 84 | 85 | if __name__ == "__main__": 86 | """示例代码入口""" 87 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 88 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 89 | api = LiveVideoSolutionQueryAudioAPIDemo(SECRET_ID, SECRET_KEY) 90 | 91 | # 私有请求参数 92 | params = { 93 | "taskId": "xxxx", 94 | "startTime": "1578326400000", 95 | "endTime": "1578327000000" 96 | } 97 | ret = api.check(params) 98 | 99 | code: int = ret["code"] 100 | msg: str = ret["msg"] 101 | if code == 200: 102 | resultArray: list = ret["result"] 103 | if len(resultArray) == 0: 104 | print("没有结果") 105 | else: 106 | for result in resultArray: 107 | taskId: str = result["taskId"] 108 | action: int = result["action"] 109 | startTime: int = result["startTime"] 110 | endTime: int = result["endTime"] 111 | segment_array: list = result["segments"] 112 | if action == 0: 113 | print("taskId=%s,结果:通过,时间区间【%s-%s】,证据信息如下:%s" % (taskId, startTime, endTime, segment_array)) 114 | elif action == 1 or action == 2: 115 | for segment_item in segment_array: 116 | label: int = segment_item["label"] 117 | level: int = segment_item["level"] 118 | print("taskId=%s,结果:%s,时间区间【%s-%s】,证据信息如下:%s" % (taskId, "不确定" if action == 1 else "不通过", 119 | startTime, endTime, segment_array)) 120 | else: 121 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 122 | -------------------------------------------------------------------------------- /video/videoimage_query.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | 易盾反垃圾云服务视频点播截图查询接口python示例代码 5 | 接口文档: http://dun.163.com/api.html 6 | python版本:python3.7 7 | 运行: 8 | 1. 修改 SECRET_ID,SECRET_KEY,BUSINESS_ID 为对应申请到的值 9 | 2. $ python videoimage_query.py 10 | """ 11 | __author__ = 'yidun-dev' 12 | __date__ = '2020/07/15' 13 | __version__ = '0.2-dev' 14 | 15 | import hashlib 16 | import time 17 | import random 18 | import urllib3 19 | from urllib.parse import urlencode 20 | import json 21 | from gmssl import sm3, func 22 | 23 | 24 | class VideoImageQueryDemo(object): 25 | """视频点播截图查询接口示例代码""" 26 | 27 | API_URL = "http://as.dun.163.com/v1/video/query/image" 28 | VERSION = "v1" 29 | 30 | def __init__(self, secret_id, secret_key, business_id): 31 | """ 32 | Args: 33 | secret_id (str) 产品密钥ID,产品标识 34 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 35 | business_id (str) 业务ID,易盾根据产品业务特点分配 36 | """ 37 | self.secret_id = secret_id 38 | self.secret_key = secret_key 39 | self.business_id = business_id 40 | self.http = urllib3.PoolManager() # 初始化连接池 41 | 42 | def gen_signature(self, params=None): 43 | """生成签名信息 44 | Args: 45 | params (object) 请求参数 46 | Returns: 47 | 参数签名md5值 48 | """ 49 | buff = "" 50 | for k in sorted(params.keys()): 51 | buff += str(k) + str(params[k]) 52 | buff += self.secret_key 53 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 54 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 55 | else: 56 | return hashlib.md5(buff.encode("utf8")).hexdigest() 57 | 58 | def query(self,params): 59 | """请求易盾接口 60 | Args: 61 | params (object) 请求参数 62 | Returns: 63 | 请求结果,json格式 64 | """ 65 | params["secretId"] = self.secret_id 66 | params["businessId"] = self.business_id 67 | params["version"] = self.VERSION 68 | params["timestamp"] = int(time.time() * 1000) 69 | params["nonce"] = int(random.random() * 100000000) 70 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 71 | params["signature"] = self.gen_signature(params) 72 | 73 | try: 74 | encoded_params = urlencode(params).encode("utf8") 75 | response = self.http.request( 76 | 'POST', 77 | self.API_URL, 78 | body=encoded_params, 79 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 80 | timeout=urllib3.Timeout(connect=10, read=10) 81 | ) 82 | content = response.data 83 | return json.loads(content) 84 | except Exception as ex: 85 | print("调用API接口失败:", str(ex)) 86 | 87 | 88 | if __name__ == "__main__": 89 | """示例代码入口""" 90 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 91 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 92 | BUSINESS_ID = "your_business_id" # 业务ID,易盾根据产品业务特点分配 93 | api = VideoImageQueryDemo(SECRET_ID, SECRET_KEY, BUSINESS_ID) 94 | 95 | # 私有请求参数 96 | params = { 97 | "taskId": "4bc345f4bdc74a92b64543b35412d678", 98 | "levels": "[0,1,2]", 99 | "pageNum": "1", 100 | "pageSize": "20", 101 | "orderType": "3", # 详情查看官网VideoDataOderType 102 | } 103 | 104 | ret = api.query(params) 105 | 106 | code: int = ret["code"] 107 | msg: str = ret["msg"] 108 | if code == 200: 109 | result: dict = ret["result"] 110 | status: int = result["status"] 111 | if status == 0: 112 | images: dict = result["images"] 113 | count: int = images["count"] 114 | rows: list = images["rows"] 115 | for row in rows: 116 | url: str = row["url"] 117 | label: int = row["label"] 118 | labelLevel: int = row["labelLevel"] 119 | beginTime: int = row["beginTime"] 120 | endTime: int = row["endTime"] 121 | print("成功, count: %s, url: %s, label: %s, labelLevel: %s, 开始时间: %s, 结束时间: %s" % 122 | (count, url, label, labelLevel, beginTime, endTime)) 123 | elif status == 20: 124 | print("taskId不是7天内数据") 125 | elif status == 30: 126 | print("taskId不存在") 127 | else: 128 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 129 | -------------------------------------------------------------------------------- /crawler/crawler_callback.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | 易盾反垃圾云服务网站检测解决方案结果获取接口python示例代码 5 | 接口文档: http://dun.163.com/api.html 6 | python版本:python3.7 7 | 运行: 8 | 1. 修改 SECRET_ID,SECRET_KEY 为对应申请到的值 9 | 2. $ python crawler_callback.py 10 | """ 11 | __author__ = 'yidun-dev' 12 | __date__ = '2019/11/27' 13 | __version__ = '0.2-dev' 14 | 15 | import hashlib 16 | import time 17 | import random 18 | import urllib3 19 | from urllib.parse import urlencode 20 | import json 21 | from gmssl import sm3, func 22 | 23 | 24 | class CrawlerCallbackAPIDemo(object): 25 | """网站检测解决方案检测结果获取接口示例代码""" 26 | 27 | API_URL = "http://as.dun.163.com/v3/crawler/callback/results" 28 | VERSION = "v3.0" 29 | 30 | def __init__(self, secret_id, secret_key): 31 | """ 32 | Args: 33 | secret_id (str) 产品密钥ID,产品标识 34 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 35 | """ 36 | self.secret_id = secret_id 37 | self.secret_key = secret_key 38 | self.http = urllib3.PoolManager() # 初始化连接池 39 | 40 | def gen_signature(self, params=None): 41 | """生成签名信息 42 | Args: 43 | params (object) 请求参数 44 | Returns: 45 | 参数签名md5值 46 | """ 47 | buff = "" 48 | for k in sorted(params.keys()): 49 | buff += str(k) + str(params[k]) 50 | buff += self.secret_key 51 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 52 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 53 | else: 54 | return hashlib.md5(buff.encode("utf8")).hexdigest() 55 | 56 | def check(self): 57 | """请求易盾接口 58 | Returns: 59 | 请求结果,json格式 60 | """ 61 | params = {} 62 | params["secretId"] = self.secret_id 63 | params["version"] = self.VERSION 64 | params["timestamp"] = int(time.time() * 1000) 65 | params["nonce"] = int(random.random() * 100000000) 66 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 67 | params["signature"] = self.gen_signature(params) 68 | 69 | try: 70 | encoded_params = urlencode(params).encode("utf8") 71 | response = self.http.request( 72 | 'POST', 73 | self.API_URL, 74 | body=encoded_params, 75 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 76 | timeout=urllib3.Timeout(connect=10, read=10) 77 | ) 78 | content = response.data 79 | return json.loads(content) 80 | except Exception as ex: 81 | print("调用API接口失败:", str(ex)) 82 | 83 | 84 | if __name__ == "__main__": 85 | """示例代码入口""" 86 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 87 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 88 | 89 | api = CrawlerCallbackAPIDemo(SECRET_ID, SECRET_KEY) 90 | 91 | ret = api.check() 92 | 93 | code: int = ret["code"] 94 | msg: str = ret["msg"] 95 | if code == 200: 96 | resultArray: list = ret["result"] 97 | if resultArray is None or len(resultArray) == 0: 98 | print("Can't find Callback Data") 99 | else: 100 | for resultItem in resultArray: 101 | antispam: dict = resultItem["antispam"] 102 | if antispam is None: 103 | print("Can't find antispam Data") 104 | else: 105 | taskId: str = antispam["taskId"] 106 | dataId: str = "" if antispam["dataId"] is None else antispam["dataId"] 107 | callback: str = "" if antispam["callback"] is None else antispam["callback"] 108 | url: str = "" if antispam["url"] is None else antispam["url"] 109 | siteUrl: str = "" if antispam["siteUrl"] is None else antispam["siteUrl"] 110 | siteName: str = "" if antispam["siteName"] is None else antispam["siteName"] 111 | suggestion: int = antispam["suggestion"] 112 | failureReason: int = antispam["failureReason"] 113 | resultType: int = antispam["resultType"] 114 | checkStatus: int = antispam["checkStatus"] 115 | evidences: dict = antispam["evidences"] 116 | print("SUCCESS: dataId=%s, taskId=%s, resultType=%s, checkStatus=%s, evidences=%s" % (dataId, taskId, resultType, checkStatus, evidences)) 117 | else: 118 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 119 | -------------------------------------------------------------------------------- /audio/liveaudio_querytask.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | 易盾直播音频结果获取接口python示例代码 5 | 接口文档: http://dun.163.com/api.html 6 | python版本:python3.7 7 | 运行: 8 | 1. 修改 SECRET_ID,SECRET_KEY,BUSINESS_ID 为对应申请到的值 9 | 2. $ python liveaudio_callback.py 10 | """ 11 | __author__ = 'yidun-dev' 12 | __date__ = '2019/11/27' 13 | __version__ = '0.2-dev' 14 | 15 | import hashlib 16 | import time 17 | import random 18 | import urllib3 19 | from urllib.parse import urlencode 20 | import json 21 | from gmssl import sm3, func 22 | 23 | 24 | class LiveAudioCallbackAPIDemo(object): 25 | """调用易盾反垃圾云服务查询直播语音片段离线结果接口API示例""" 26 | 27 | API_URL = "http://as.dun.163.com/v1/liveaudio/query/task" 28 | VERSION = "v1.0" 29 | 30 | def __init__(self, secret_id, secret_key, business_id): 31 | """ 32 | Args: 33 | secret_id (str) 产品密钥ID,产品标识 34 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 35 | business_id (str) 业务ID,易盾根据产品业务特点分配 36 | """ 37 | self.secret_id = secret_id 38 | self.secret_key = secret_key 39 | self.business_id = business_id 40 | self.http = urllib3.PoolManager() # 初始化连接池 41 | 42 | def gen_signature(self, params=None): 43 | """生成签名信息 44 | Args: 45 | params (object) 请求参数 46 | Returns: 47 | 参数签名md5值 48 | """ 49 | buff = "" 50 | for k in sorted(params.keys()): 51 | buff += str(k) + str(params[k]) 52 | buff += self.secret_key 53 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 54 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 55 | else: 56 | return hashlib.md5(buff.encode("utf8")).hexdigest() 57 | 58 | def check(self, params): 59 | """请求易盾接口 60 | Returns: 61 | 请求结果,json格式 62 | """ 63 | params["secretId"] = self.secret_id 64 | params["businessId"] = self.business_id 65 | params["version"] = self.VERSION 66 | params["timestamp"] = int(time.time() * 1000) 67 | params["nonce"] = int(random.random()*100000000) 68 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 69 | params["signature"] = self.gen_signature(params) 70 | 71 | try: 72 | encoded_params = urlencode(params).encode("utf8") 73 | response = self.http.request( 74 | 'POST', 75 | self.API_URL, 76 | body=encoded_params, 77 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 78 | timeout=urllib3.Timeout(connect=10, read=10) 79 | ) 80 | content = response.data 81 | return json.loads(content) 82 | except Exception as ex: 83 | print("调用API接口失败:", str(ex)) 84 | 85 | 86 | if __name__ == "__main__": 87 | """示例代码入口""" 88 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 89 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 90 | BUSINESS_ID = "your_business_id" # 业务ID,易盾根据产品业务特点分配 91 | api = LiveAudioCallbackAPIDemo(SECRET_ID, SECRET_KEY, BUSINESS_ID) 92 | 93 | params = { 94 | "taskId": "xxx", 95 | "startTime": 1578252600000, 96 | "endTime": 1578253200000 97 | } 98 | ret = api.check(params) 99 | 100 | code: int = ret["code"] 101 | msg: str = ret["msg"] 102 | if code == 200: 103 | resultArray: list = ret["result"] 104 | if len(resultArray) == 0: 105 | print("暂时没有结果需要获取, 请稍后重试!") 106 | else: 107 | for result in resultArray: 108 | taskId: str = result["taskId"] 109 | asrStatus: int = result["asrStatus"] 110 | action: int = result["action"] 111 | segmentArray: list = result["segments"] 112 | startTime: int = result["startTime"] 113 | endTime: int = result["endTime"] 114 | if action == 0: 115 | print("taskId=%s, 结果: 通过, 证据信息如下: %s, startTime:%s, endTime:%s" % (taskId, segmentArray, startTime, endTime)) 116 | elif action == 1 or action == 2: 117 | # for segmentItem in segmentArray: 118 | # label: int = segmentItem["label"] 119 | # level: int = segmentItem["level"] 120 | print("taskId=%s, 结果: %s,证据信息如下: %s, startTime:%s, endTime:%s" % (taskId, "不确定" if action == 1 else "不通过", segmentArray, startTime, endTime)) 121 | else: 122 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 123 | -------------------------------------------------------------------------------- /video/video_callback.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | 易盾反垃圾云服务视频点播离线结果获取接口python示例代码 5 | 接口文档: http://dun.163.com/api.html 6 | python版本:python3.7 7 | 运行: 8 | 1. 修改 SECRET_ID,SECRET_KEY,BUSINESS_ID 为对应申请到的值 9 | 2. $ python video_callback.py 10 | """ 11 | __author__ = 'yidun-dev' 12 | __date__ = '2019/11/27' 13 | __version__ = '0.2-dev' 14 | 15 | import hashlib 16 | import time 17 | import random 18 | import urllib3 19 | from urllib.parse import urlencode 20 | import json 21 | from gmssl import sm3, func 22 | 23 | 24 | class VideoCallbackAPIDemo(object): 25 | """视频点播离线结果获取接口示例代码""" 26 | 27 | API_URL = "http://as.dun.163.com/v4/video/callback/results" 28 | VERSION = "v4" 29 | 30 | def __init__(self, secret_id, secret_key, business_id): 31 | """ 32 | Args: 33 | secret_id (str) 产品密钥ID,产品标识 34 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 35 | business_id (str) 业务ID,易盾根据产品业务特点分配 36 | """ 37 | self.secret_id = secret_id 38 | self.secret_key = secret_key 39 | self.business_id = business_id 40 | self.http = urllib3.PoolManager() # 初始化连接池 41 | 42 | def gen_signature(self, params=None): 43 | """生成签名信息 44 | Args: 45 | params (object) 请求参数 46 | Returns: 47 | 参数签名md5值 48 | """ 49 | buff = "" 50 | for k in sorted(params.keys()): 51 | buff += str(k) + str(params[k]) 52 | buff += self.secret_key 53 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 54 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 55 | else: 56 | return hashlib.md5(buff.encode("utf8")).hexdigest() 57 | 58 | def check(self): 59 | """请求易盾接口 60 | Returns: 61 | 请求结果,json格式 62 | """ 63 | params = {} 64 | params["secretId"] = self.secret_id 65 | params["businessId"] = self.business_id 66 | params["version"] = self.VERSION 67 | params["timestamp"] = int(time.time() * 1000) 68 | params["nonce"] = int(random.random() * 100000000) 69 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 70 | params["signature"] = self.gen_signature(params) 71 | 72 | try: 73 | encoded_params = urlencode(params).encode("utf8") 74 | response = self.http.request( 75 | 'POST', 76 | self.API_URL, 77 | body=encoded_params, 78 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 79 | timeout=urllib3.Timeout(connect=10, read=10) 80 | ) 81 | content = response.data 82 | return json.loads(content) 83 | except Exception as ex: 84 | print("调用API接口失败:", str(ex)) 85 | 86 | 87 | if __name__ == "__main__": 88 | """示例代码入口""" 89 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 90 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 91 | BUSINESS_ID = "your_business_id" # 业务ID,易盾根据产品业务特点分配 92 | api = VideoCallbackAPIDemo(SECRET_ID, SECRET_KEY, BUSINESS_ID) 93 | 94 | ret = api.check() 95 | 96 | code: int = ret["code"] 97 | msg: str = ret["msg"] 98 | if code == 200: 99 | resultArray: list = ret["result"] 100 | if len(resultArray) == 0: 101 | print("暂无回调数据") 102 | else: 103 | for result in resultArray: 104 | antispam: dict = result["antispam"] 105 | status: int = antispam["status"] 106 | if status != 0: # 异常,异常码定义见官网文档 107 | print("视频异常, status: %s" % status) 108 | continue 109 | taskId: str = antispam["taskId"] 110 | callback: str = antispam["callback"] 111 | pictureArray: list = antispam["pictures"] 112 | for picture in pictureArray: 113 | pictureType: int = picture["type"] 114 | url: str = picture["url"] 115 | startTime: int = picture["startTime"] 116 | endTime: int = picture["endTime"] 117 | labels: list = picture["labels"] 118 | for labelItem in labels: 119 | label: int = labelItem["label"] 120 | level: int = labelItem["level"] 121 | rate: str = labelItem["rate"] 122 | subLabels: list = labelItem["subLabels"] 123 | else: 124 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 125 | -------------------------------------------------------------------------------- /report/report_query.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """易盾反垃圾云服务投诉举报解决方案结果查询接口python示例代码 4 | 接口文档: http://dun.163.com/api.html 5 | python版本:python3.7 6 | 运行: 7 | 1. 修改 SECRET_ID,SECRET_KEY,BUSINESS_ID 为对应申请到的值 8 | 2. $ python report_query.py 9 | """ 10 | __author__ = 'yidun-dev' 11 | __date__ = '2022/06/07' 12 | __version__ = '0.2-dev' 13 | 14 | import hashlib 15 | import time 16 | import random 17 | import urllib3 18 | from urllib.parse import urlencode 19 | import json 20 | from gmssl import sm3, func 21 | 22 | 23 | class ReportQueryByTaskIdsDemo(object): 24 | """投诉举报解决方案结果查询接口示例代码""" 25 | 26 | API_URL = "http://as.dun.163.com/v1/report/callback/query" 27 | VERSION = "v1" 28 | 29 | def __init__(self, secret_id, secret_key, business_id): 30 | """ 31 | Args: 32 | secret_id (str) 产品密钥ID,产品标识 33 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 34 | business_id (str) 业务ID,易盾根据产品业务特点分配 35 | """ 36 | self.secret_id = secret_id 37 | self.secret_key = secret_key 38 | self.business_id = business_id 39 | self.http = urllib3.PoolManager() # 初始化连接池 40 | 41 | def gen_signature(self, params=None): 42 | """生成签名信息 43 | Args: 44 | params (object) 请求参数 45 | Returns: 46 | 参数签名md5值 47 | """ 48 | buff = "" 49 | for k in sorted(params.keys()): 50 | buff += str(k) + str(params[k]) 51 | buff += self.secret_key 52 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 53 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 54 | else: 55 | return hashlib.md5(buff.encode("utf8")).hexdigest() 56 | 57 | def query(self,params): 58 | """请求易盾接口 59 | Args: 60 | params (object) 请求参数 61 | Returns: 62 | 请求结果,json格式 63 | """ 64 | params["secretId"] = self.secret_id 65 | params["businessId"] = self.business_id 66 | params["version"] = self.VERSION 67 | params["timestamp"] = int(time.time() * 1000) 68 | params["nonce"] = int(random.random() * 100000000) 69 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 70 | params["signature"] = self.gen_signature(params) 71 | 72 | try: 73 | encoded_params = urlencode(params).encode("utf8") 74 | response = self.http.request( 75 | 'POST', 76 | self.API_URL, 77 | body=encoded_params, 78 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 79 | timeout=urllib3.Timeout(connect=10, read=10) 80 | ) 81 | content = response.data 82 | return json.loads(content) 83 | except Exception as ex: 84 | print("调用API接口失败:", str(ex)) 85 | 86 | 87 | if __name__ == "__main__": 88 | """示例代码入口""" 89 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 90 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 91 | BUSINESS_ID = "your_business_id" # 业务ID,易盾根据产品业务特点分配 92 | api = ReportQueryByTaskIdsDemo(SECRET_ID, SECRET_KEY, BUSINESS_ID) 93 | 94 | # 私有请求参数 95 | taskIds: list = ['13asfda', 'adsfafd464'] # 查询参数taskIds 96 | params = { 97 | "taskIds": taskIds 98 | } 99 | 100 | ret = api.query(params) 101 | 102 | code: int = ret["code"] 103 | msg: str = ret["msg"] 104 | if code == 200: 105 | resultArray: list = ret["result"] 106 | if resultArray is None or len(resultArray) == 0: 107 | print("Can't find Callback Data") 108 | else: 109 | for result in resultArray: 110 | antispam: dict = result["antispam"] 111 | if antispam is None: 112 | print("Can't find antispam Data") 113 | else: 114 | checkStatus: int = antispam["checkStatus"] 115 | dataId: str = "" if antispam["dataId"] is None else antispam["dataId"] 116 | suggestion: int = antispam["suggestion"] 117 | callback: str = "" if antispam["callback"] is None else antispam["callback"] 118 | taskId: str = antispam["taskId"] 119 | resultType: int = antispam["resultType"] 120 | evidences: dict = antispam["evidences"] 121 | print("SUCCESS: dataId=%s, taskId=%s, resultType=%s, checkStatus=%s, evidences=%s" % (dataId, taskId, resultType, checkStatus, evidences)) 122 | else: 123 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 124 | -------------------------------------------------------------------------------- /digital/digital_query.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """易盾反垃圾云服务数字阅读解决方案结果查询接口python示例代码 4 | 接口文档: http://dun.163.com/api.html 5 | python版本:python3.7 6 | 运行: 7 | 1. 修改 SECRET_ID,SECRET_KEY,BUSINESS_ID 为对应申请到的值 8 | 2. $ python digital_query.py 9 | """ 10 | __author__ = 'yidun-dev' 11 | __date__ = '2022/06/07' 12 | __version__ = '0.2-dev' 13 | 14 | import hashlib 15 | import time 16 | import random 17 | import urllib3 18 | from urllib.parse import urlencode 19 | import json 20 | from gmssl import sm3, func 21 | 22 | 23 | class DigitalQueryByTaskIdsDemo(object): 24 | """数字阅读解决方案结果查询接口示例代码""" 25 | 26 | API_URL = "http://as.dun.163.com/v2/digital/callback/query" 27 | VERSION = "v2" 28 | 29 | def __init__(self, secret_id, secret_key, business_id): 30 | """ 31 | Args: 32 | secret_id (str) 产品密钥ID,产品标识 33 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 34 | business_id (str) 业务ID,易盾根据产品业务特点分配 35 | """ 36 | self.secret_id = secret_id 37 | self.secret_key = secret_key 38 | self.business_id = business_id 39 | self.http = urllib3.PoolManager() # 初始化连接池 40 | 41 | def gen_signature(self, params=None): 42 | """生成签名信息 43 | Args: 44 | params (object) 请求参数 45 | Returns: 46 | 参数签名md5值 47 | """ 48 | buff = "" 49 | for k in sorted(params.keys()): 50 | buff += str(k) + str(params[k]) 51 | buff += self.secret_key 52 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 53 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 54 | else: 55 | return hashlib.md5(buff.encode("utf8")).hexdigest() 56 | 57 | def query(self,params): 58 | """请求易盾接口 59 | Args: 60 | params (object) 请求参数 61 | Returns: 62 | 请求结果,json格式 63 | """ 64 | params["secretId"] = self.secret_id 65 | params["businessId"] = self.business_id 66 | params["version"] = self.VERSION 67 | params["timestamp"] = int(time.time() * 1000) 68 | params["nonce"] = int(random.random() * 100000000) 69 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 70 | params["signature"] = self.gen_signature(params) 71 | 72 | try: 73 | encoded_params = urlencode(params).encode("utf8") 74 | response = self.http.request( 75 | 'POST', 76 | self.API_URL, 77 | body=encoded_params, 78 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 79 | timeout=urllib3.Timeout(connect=10, read=10) 80 | ) 81 | content = response.data 82 | return json.loads(content) 83 | except Exception as ex: 84 | print("调用API接口失败:", str(ex)) 85 | 86 | 87 | if __name__ == "__main__": 88 | """示例代码入口""" 89 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 90 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 91 | BUSINESS_ID = "your_business_id" # 业务ID,易盾根据产品业务特点分配 92 | api = DigitalQueryByTaskIdsDemo(SECRET_ID, SECRET_KEY, BUSINESS_ID) 93 | 94 | # 私有请求参数 95 | taskIds: list = ['13asfda', 'adsfafd464'] # 查询参数taskIds 96 | params = { 97 | "taskIds": taskIds 98 | } 99 | 100 | ret = api.query(params) 101 | 102 | code: int = ret["code"] 103 | msg: str = ret["msg"] 104 | if code == 200: 105 | resultArray: list = ret["result"] 106 | if resultArray is None or len(resultArray) == 0: 107 | print("Can't find Callback Data") 108 | else: 109 | for result in resultArray: 110 | antispam: dict = result["antispam"] 111 | if antispam is None: 112 | print("Can't find antispam Data") 113 | else: 114 | checkStatus: int = antispam["checkStatus"] 115 | dataId: str = "" if antispam["dataId"] is None else antispam["dataId"] 116 | suggestion: int = antispam["suggestion"] 117 | callback: str = "" if antispam["callback"] is None else antispam["callback"] 118 | taskId: str = antispam["taskId"] 119 | resultType: int = antispam["resultType"] 120 | evidences: dict = antispam["evidences"] 121 | print("SUCCESS: dataId=%s, taskId=%s, resultType=%s, checkStatus=%s, evidences=%s" % (dataId, taskId, resultType, checkStatus, evidences)) 122 | else: 123 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 124 | -------------------------------------------------------------------------------- /image/image_submit.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | 易盾反垃圾云服务图片批量提交接口python示例代码 5 | 接口文档: http://dun.163.com/api.html 6 | python版本:python3.7 7 | 运行: 8 | 1. 修改 SECRET_ID,SECRET_KEY,BUSINESS_ID 为对应申请到的值 9 | 2. $ python image_submit.py 10 | """ 11 | __author__ = 'yidun-dev' 12 | __date__ = '2019/11/27' 13 | __version__ = '0.2-dev' 14 | 15 | import hashlib 16 | import time 17 | import random 18 | import urllib3 19 | from urllib.parse import urlencode 20 | import json 21 | from gmssl import sm3, func 22 | 23 | 24 | class ImageSubmitAPIDemo(object): 25 | """图片批量提交接口""" 26 | 27 | API_URL = "http://as.dun.163.com/v5/image/submit" 28 | VERSION = "v5" 29 | 30 | def __init__(self, secret_id, secret_key, business_id): 31 | """ 32 | Args: 33 | secret_id (str) 产品密钥ID,产品标识 34 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 35 | business_id (str) 业务ID,易盾根据产品业务特点分配 36 | """ 37 | self.secret_id = secret_id 38 | self.secret_key = secret_key 39 | self.business_id = business_id 40 | self.http = urllib3.PoolManager() # 初始化连接池 41 | 42 | def gen_signature(self, params=None): 43 | """生成签名信息 44 | Args: 45 | params (object) 请求参数 46 | Returns: 47 | 参数签名md5值 48 | """ 49 | buff = "" 50 | for k in sorted(params.keys()): 51 | buff += str(k) + str(params[k]) 52 | buff += self.secret_key 53 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 54 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 55 | else: 56 | return hashlib.md5(buff.encode("utf8")).hexdigest() 57 | 58 | def check(self, params): 59 | """请求易盾接口 60 | Args: 61 | params (object) 请求参数 62 | Returns: 63 | 请求结果,json格式 64 | """ 65 | params["secretId"] = self.secret_id 66 | params["businessId"] = self.business_id 67 | params["version"] = self.VERSION 68 | params["timestamp"] = int(time.time() * 1000) 69 | params["nonce"] = int(random.random() * 100000000) 70 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 71 | params["signature"] = self.gen_signature(params) 72 | 73 | try: 74 | encoded_params = urlencode(params).encode("utf8") 75 | response = self.http.request( 76 | 'POST', 77 | self.API_URL, 78 | body=encoded_params, 79 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 80 | timeout=urllib3.Timeout(connect=10, read=10) 81 | ) 82 | content = response.data 83 | return json.loads(content) 84 | except Exception as ex: 85 | print("调用API接口失败:", str(ex)) 86 | 87 | 88 | if __name__ == "__main__": 89 | """示例代码入口""" 90 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 91 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 92 | BUSINESS_ID = "your_business_id" # 业务ID,易盾根据产品业务特点分配 93 | api = ImageSubmitAPIDemo(SECRET_ID, SECRET_KEY, BUSINESS_ID) 94 | 95 | # 私有请求参数 96 | images: list = [] 97 | # dataId结构产品自行设计,用于唯一定位该图片数据 98 | image1 = { 99 | "name": "image1", 100 | "data": "https://nos.netease.com/yidun/2-0-0-a6133509763d4d6eac881a58f1791976.jpg", 101 | "level": "2" 102 | # "ip": "123.115.77.137" 103 | # "account": "python@163.com" 104 | # "deviceId": "deviceId" 105 | # "callbackUrl": "http://***" # 主动回调地址url,如果设置了则走主动回调逻辑 106 | } 107 | image2 = { 108 | "name": "image2", 109 | "data": "http://dun.163.com/public/res/web/case/sexy_normal_2.jpg?dda0e793c500818028fc14f20f6b492a", 110 | "level": "0" 111 | # "ip": "123.115.77.137" 112 | # "account": "python@163.com" 113 | # "deviceId": "deviceId" 114 | # "callbackUrl": "http://***" # 主动回调地址url,如果设置了则走主动回调逻辑 115 | } 116 | images.append(image1) 117 | images.append(image2) 118 | params = { 119 | "images": json.dumps(images) 120 | } 121 | 122 | ret = api.check(params) 123 | 124 | code: int = ret["code"] 125 | msg: str = ret["msg"] 126 | if code == 200: 127 | resultArray: list = ret["result"] 128 | for result in resultArray: 129 | name: str = result["name"] 130 | taskId: str = result["taskId"] 131 | dataId: str = result["dataId"] 132 | print("图片提交返回, name: %s, taskId: %s" % (name, taskId)) 133 | 134 | else: 135 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 136 | -------------------------------------------------------------------------------- /mediasolution/mediasolution_query.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """易盾反垃圾云服务融媒体解决方案结果查询接口python示例代码 4 | 接口文档: http://dun.163.com/api.html 5 | python版本:python3.7 6 | 运行: 7 | 1. 修改 SECRET_ID,SECRET_KEY,BUSINESS_ID 为对应申请到的值 8 | 2. $ python mediasolution_query.py 9 | """ 10 | __author__ = 'yidun-dev' 11 | __date__ = '2019/11/27' 12 | __version__ = '0.2-dev' 13 | 14 | import hashlib 15 | import time 16 | import random 17 | import urllib3 18 | from urllib.parse import urlencode 19 | import json 20 | from gmssl import sm3, func 21 | 22 | 23 | class MediaSolutionQueryByTaskIdsDemo(object): 24 | """融媒体解决方案结果查询接口示例代码""" 25 | 26 | API_URL = "http://as.dun.163.com/v2/mediasolution/callback/query" 27 | VERSION = "v2" 28 | 29 | def __init__(self, secret_id, secret_key, business_id): 30 | """ 31 | Args: 32 | secret_id (str) 产品密钥ID,产品标识 33 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 34 | business_id (str) 业务ID,易盾根据产品业务特点分配 35 | """ 36 | self.secret_id = secret_id 37 | self.secret_key = secret_key 38 | self.business_id = business_id 39 | self.http = urllib3.PoolManager() # 初始化连接池 40 | 41 | def gen_signature(self, params=None): 42 | """生成签名信息 43 | Args: 44 | params (object) 请求参数 45 | Returns: 46 | 参数签名md5值 47 | """ 48 | buff = "" 49 | for k in sorted(params.keys()): 50 | buff += str(k) + str(params[k]) 51 | buff += self.secret_key 52 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 53 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 54 | else: 55 | return hashlib.md5(buff.encode("utf8")).hexdigest() 56 | 57 | def query(self,params): 58 | """请求易盾接口 59 | Args: 60 | params (object) 请求参数 61 | Returns: 62 | 请求结果,json格式 63 | """ 64 | params["secretId"] = self.secret_id 65 | params["businessId"] = self.business_id 66 | params["version"] = self.VERSION 67 | params["timestamp"] = int(time.time() * 1000) 68 | params["nonce"] = int(random.random() * 100000000) 69 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 70 | params["signature"] = self.gen_signature(params) 71 | 72 | try: 73 | encoded_params = urlencode(params).encode("utf8") 74 | response = self.http.request( 75 | 'POST', 76 | self.API_URL, 77 | body=encoded_params, 78 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 79 | timeout=urllib3.Timeout(connect=10, read=10) 80 | ) 81 | content = response.data 82 | return json.loads(content) 83 | except Exception as ex: 84 | print("调用API接口失败:", str(ex)) 85 | 86 | 87 | if __name__ == "__main__": 88 | """示例代码入口""" 89 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 90 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 91 | BUSINESS_ID = "your_business_id" # 业务ID,易盾根据产品业务特点分配 92 | api = MediaSolutionQueryByTaskIdsDemo(SECRET_ID, SECRET_KEY, BUSINESS_ID) 93 | 94 | # 私有请求参数 95 | taskIds: list = ['13asfda', 'adsfafd464'] # 查询参数taskIds 96 | params = { 97 | "taskIds": taskIds 98 | } 99 | 100 | ret = api.query(params) 101 | 102 | code: int = ret["code"] 103 | msg: str = ret["msg"] 104 | if code == 200: 105 | resultArray: list = ret["result"] 106 | if resultArray is None or len(resultArray) == 0: 107 | print("Can't find Callback Data") 108 | else: 109 | for result in resultArray: 110 | antispam: dict = result["antispam"] 111 | if antispam is None: 112 | print("Can't find antispam Data") 113 | else: 114 | checkStatus: int = antispam["checkStatus"] 115 | dataId: str = "" if antispam["dataId"] is None else antispam["dataId"] 116 | suggestion: int = antispam["suggestion"] 117 | callback: str = "" if antispam["callback"] is None else antispam["callback"] 118 | taskId: str = antispam["taskId"] 119 | resultType: int = antispam["resultType"] 120 | evidences: dict = antispam["evidences"] 121 | print("SUCCESS: dataId=%s, taskId=%s, resultType=%s, checkStatus=%s, evidences=%s" % (dataId, taskId, resultType, checkStatus, evidences)) 122 | else: 123 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 124 | -------------------------------------------------------------------------------- /video/video_query.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | 易盾反垃圾云服务视频点播结果查询接口python示例代码 5 | 接口文档: http://dun.163.com/api.html 6 | python版本:python3.7 7 | 运行: 8 | 1. 修改 SECRET_ID,SECRET_KEY,BUSINESS_ID 为对应申请到的值 9 | 2. $ python video_query.py 10 | """ 11 | __author__ = 'yidun-dev' 12 | __date__ = '2019/11/27' 13 | __version__ = '0.2-dev' 14 | 15 | import hashlib 16 | import time 17 | import random 18 | import urllib3 19 | from urllib.parse import urlencode 20 | import json 21 | from gmssl import sm3, func 22 | 23 | 24 | class VideoQueryByTaskIdsDemo(object): 25 | """视频点播查询接口示例代码""" 26 | 27 | API_URL = "http://as.dun.163.com/v4/video/query/task" 28 | VERSION = "v4" 29 | 30 | def __init__(self, secret_id, secret_key, business_id): 31 | """ 32 | Args: 33 | secret_id (str) 产品密钥ID,产品标识 34 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 35 | business_id (str) 业务ID,易盾根据产品业务特点分配 36 | """ 37 | self.secret_id = secret_id 38 | self.secret_key = secret_key 39 | self.business_id = business_id 40 | self.http = urllib3.PoolManager() # 初始化连接池 41 | 42 | def gen_signature(self, params=None): 43 | """生成签名信息 44 | Args: 45 | params (object) 请求参数 46 | Returns: 47 | 参数签名md5值 48 | """ 49 | buff = "" 50 | for k in sorted(params.keys()): 51 | buff += str(k) + str(params[k]) 52 | buff += self.secret_key 53 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 54 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 55 | else: 56 | return hashlib.md5(buff.encode("utf8")).hexdigest() 57 | 58 | def query(self,params): 59 | """请求易盾接口 60 | Args: 61 | params (object) 请求参数 62 | Returns: 63 | 请求结果,json格式 64 | """ 65 | params["secretId"] = self.secret_id 66 | params["businessId"] = self.business_id 67 | params["version"] = self.VERSION 68 | params["timestamp"] = int(time.time() * 1000) 69 | params["nonce"] = int(random.random() * 100000000) 70 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 71 | params["signature"] = self.gen_signature(params) 72 | 73 | try: 74 | encoded_params = urlencode(params).encode("utf8") 75 | response = self.http.request( 76 | 'POST', 77 | self.API_URL, 78 | body=encoded_params, 79 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 80 | timeout=urllib3.Timeout(connect=10, read=10) 81 | ) 82 | content = response.data 83 | return json.loads(content) 84 | except Exception as ex: 85 | print("调用API接口失败:", str(ex)) 86 | 87 | 88 | if __name__ == "__main__": 89 | """示例代码入口""" 90 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 91 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 92 | BUSINESS_ID = "your_business_id" # 业务ID,易盾根据产品业务特点分配 93 | api = VideoQueryByTaskIdsDemo(SECRET_ID, SECRET_KEY, BUSINESS_ID) 94 | 95 | # 私有请求参数 96 | taskIds: list = ['c679d93d4a8d411cbe3454214d4b1fd7', '49800dc7877f4b2a9d2e1dec92b988b6'] # 查询参数taskIds 97 | params = { 98 | "taskIds": taskIds 99 | } 100 | 101 | ret = api.query(params) 102 | 103 | code: int = ret["code"] 104 | msg: str = ret["msg"] 105 | if code == 200: 106 | resultArray: list = ret["result"] 107 | for result in resultArray: 108 | status: int = result["status"] 109 | if status != 0: # -1:提交检测失败,0:正常,10:检测中,20:不是7天内数据,30:taskId不存在,110:请求重复,120:参数错误,130:解析错误,140:数据类型错误 110 | print("获取结果异常, status: %s" % status) 111 | continue 112 | taskId: str = result["taskId"] 113 | antispam: dict = result["antispam"] 114 | pictureArray: list = antispam["pictures"] 115 | for picture in pictureArray: 116 | pictureType: int = picture["type"] 117 | url: str = picture["url"] 118 | startTime: int = picture["startTime"] 119 | endTime: int = picture["endTime"] 120 | labels: list = picture["labels"] 121 | for labelItem in labels: 122 | label: int = labelItem["label"] 123 | level: int = labelItem["level"] 124 | rate: str = labelItem["rate"] 125 | subLabels: list = labelItem["subLabels"] 126 | else: 127 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 128 | -------------------------------------------------------------------------------- /video/liveimage_query.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | 易盾反垃圾云服务视频直播截图查询接口python示例代码 5 | 接口文档: http://dun.163.com/api.html 6 | python版本:python3.7 7 | 运行: 8 | 1. 修改 SECRET_ID,SECRET_KEY,BUSINESS_ID 为对应申请到的值 9 | 2. $ python liveimage_query.py 10 | """ 11 | __author__ = 'yidun-dev' 12 | __date__ = '2020/07/15' 13 | __version__ = '0.2-dev' 14 | 15 | import hashlib 16 | import time 17 | import random 18 | import urllib3 19 | from urllib.parse import urlencode 20 | import json 21 | from gmssl import sm3, func 22 | 23 | 24 | class LiveVideoImageQueryDemo(object): 25 | """视频直播截图查询接口示例代码""" 26 | 27 | API_URL = "http://as.dun.163.com/v1/livevideo/query/image" 28 | VERSION = "v1" 29 | 30 | def __init__(self, secret_id, secret_key, business_id): 31 | """ 32 | Args: 33 | secret_id (str) 产品密钥ID,产品标识 34 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 35 | business_id (str) 业务ID,易盾根据产品业务特点分配 36 | """ 37 | self.secret_id = secret_id 38 | self.secret_key = secret_key 39 | self.business_id = business_id 40 | self.http = urllib3.PoolManager() # 初始化连接池 41 | 42 | def gen_signature(self, params=None): 43 | """生成签名信息 44 | Args: 45 | params (object) 请求参数 46 | Returns: 47 | 参数签名md5值 48 | """ 49 | buff = "" 50 | for k in sorted(params.keys()): 51 | buff += str(k) + str(params[k]) 52 | buff += self.secret_key 53 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 54 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 55 | else: 56 | return hashlib.md5(buff.encode("utf8")).hexdigest() 57 | 58 | def query(self,params): 59 | """请求易盾接口 60 | Args: 61 | params (object) 请求参数 62 | Returns: 63 | 请求结果,json格式 64 | """ 65 | params["secretId"] = self.secret_id 66 | params["businessId"] = self.business_id 67 | params["version"] = self.VERSION 68 | params["timestamp"] = int(time.time() * 1000) 69 | params["nonce"] = int(random.random() * 100000000) 70 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 71 | params["signature"] = self.gen_signature(params) 72 | 73 | try: 74 | encoded_params = urlencode(params).encode("utf8") 75 | response = self.http.request( 76 | 'POST', 77 | self.API_URL, 78 | body=encoded_params, 79 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 80 | timeout=urllib3.Timeout(connect=10, read=10) 81 | ) 82 | content = response.data 83 | return json.loads(content) 84 | except Exception as ex: 85 | print("调用API接口失败:", str(ex)) 86 | 87 | 88 | if __name__ == "__main__": 89 | """示例代码入口""" 90 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 91 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 92 | BUSINESS_ID = "your_business_id" # 业务ID,易盾根据产品业务特点分配 93 | api = LiveVideoImageQueryDemo(SECRET_ID, SECRET_KEY, BUSINESS_ID) 94 | 95 | # 私有请求参数 96 | params = { 97 | "taskId": "87aa24884d614ae8b8cc4d472b37be51", 98 | "levels": "[0,1,2]", 99 | "pageNum": "1", 100 | "pageSize": "20", 101 | "callbackStatus": "1", # 详情查看官网CallbackStatus 102 | "orderType": "3", # 详情查看官网LiveVideoDataOderType 103 | } 104 | 105 | ret = api.query(params) 106 | 107 | code: int = ret["code"] 108 | msg: str = ret["msg"] 109 | if code == 200: 110 | result: dict = ret["result"] 111 | status: int = result["status"] 112 | if status == 0: 113 | images: dict = result["images"] 114 | count: int = images["count"] 115 | rows: list = images["rows"] 116 | for row in rows: 117 | url: str = row["url"] 118 | label: int = row["label"] 119 | labelLevel: int = row["labelLevel"] 120 | callbackStatus: int = row["callbackStatus"] 121 | beginTime: int = row["beginTime"] 122 | endTime: int = row["endTime"] 123 | print("成功, count: %s, url: %s, label: %s, labelLevel: %s, callbackStatus: %s, 开始时间: %s, 结束时间: %s" % 124 | (count, url, label, labelLevel, callbackStatus, beginTime, endTime)) 125 | elif status == 20: 126 | print("taskId不是7天内数据") 127 | elif status == 30: 128 | print("taskId不存在") 129 | else: 130 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 131 | -------------------------------------------------------------------------------- /image/image_query.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | 易盾反垃圾云服务图片结果查询接口python示例代码 5 | 接口文档: http://dun.163.com/api.html 6 | python版本:python3.7 7 | 运行: 8 | 1. 修改 SECRET_ID,SECRET_KEY,BUSINESS_ID 为对应申请到的值 9 | 2. $ python image_query.py 10 | """ 11 | __author__ = 'yidun-dev' 12 | __date__ = '2019/11/27' 13 | __version__ = '0.2-dev' 14 | 15 | import hashlib 16 | import time 17 | import random 18 | import urllib3 19 | from urllib.parse import urlencode 20 | import json 21 | from gmssl import sm3, func 22 | 23 | 24 | class ImageQueryByTaskIdsDemo(object): 25 | """易盾图片离线查询结果获取接口示例代码""" 26 | 27 | API_URL = "http://as.dun.163.com/v1/image/query/task" 28 | VERSION = "v1" 29 | 30 | def __init__(self, secret_id, secret_key, business_id): 31 | """ 32 | Args: 33 | secret_id (str) 产品密钥ID,产品标识 34 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 35 | business_id (str) 业务ID,易盾根据产品业务特点分配 36 | """ 37 | self.secret_id = secret_id 38 | self.secret_key = secret_key 39 | self.business_id = business_id 40 | self.http = urllib3.PoolManager() # 初始化连接池 41 | 42 | def gen_signature(self, params=None): 43 | """生成签名信息 44 | Args: 45 | params (object) 请求参数 46 | Returns: 47 | 参数签名md5值 48 | """ 49 | buff = "" 50 | for k in sorted(params.keys()): 51 | buff += str(k) + str(params[k]) 52 | buff += self.secret_key 53 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 54 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 55 | else: 56 | return hashlib.md5(buff.encode("utf8")).hexdigest() 57 | 58 | def query(self, params): 59 | """请求易盾接口 60 | Args: 61 | params (object) 请求参数 62 | Returns: 63 | 请求结果,json格式 64 | """ 65 | params["secretId"] = self.secret_id 66 | params["businessId"] = self.business_id 67 | params["version"] = self.VERSION 68 | params["timestamp"] = int(time.time() * 1000) 69 | params["nonce"] = int(random.random() * 100000000) 70 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 71 | params["signature"] = self.gen_signature(params) 72 | 73 | try: 74 | encoded_params = urlencode(params).encode("utf8") 75 | response = self.http.request( 76 | 'POST', 77 | self.API_URL, 78 | body=encoded_params, 79 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 80 | timeout=urllib3.Timeout(connect=10, read=10) 81 | ) 82 | content = response.data 83 | return json.loads(content) 84 | except Exception as ex: 85 | print("调用API接口失败:", str(ex)) 86 | 87 | 88 | if __name__ == "__main__": 89 | """示例代码入口""" 90 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 91 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 92 | BUSINESS_ID = "your_business_id" # 业务ID,易盾根据产品业务特点分配 93 | api = ImageQueryByTaskIdsDemo(SECRET_ID, SECRET_KEY, BUSINESS_ID) 94 | 95 | # 私有请求参数 96 | taskIds: list = ['093238e25fa54a3993849e72eb6040af', '8d26fded48d74263a9ad30e8199fdac7'] # 查询参数taskIds 97 | params = { 98 | "taskIds": taskIds 99 | } 100 | 101 | ret = api.query(params) 102 | 103 | code: int = ret["code"] 104 | msg: str = ret["msg"] 105 | if code == 200: 106 | resultArray: list = ret["result"] 107 | for result in resultArray: 108 | name: str = result.get("name", "") 109 | taskId: str = result["taskId"] 110 | status: int = result["status"] 111 | labelArray: list = result["labels"] 112 | print("taskId: %s, status: %s, name: %s, labels: %s" % (taskId, status, name, labelArray)) 113 | maxLevel: int = -1 114 | # 产品需根据自身需求,自行解析处理,本示例只是简单判断分类级别 115 | for labelItem in labelArray: 116 | label: int = labelItem["label"] 117 | level: int = labelItem["level"] 118 | rate: float = labelItem["rate"] 119 | print("label: %s, level: %s, rate: %s" % (label, level, rate)) 120 | maxLevel = level if level > maxLevel else maxLevel 121 | if maxLevel == 0: 122 | print("#图片查询结果: 最高等级为\"正常\"\n") 123 | elif maxLevel == 1: 124 | print("#图片查询结果: 最高等级为\"嫌疑\"\n") 125 | elif maxLevel == 2: 126 | print("#图片查询结果: 最高等级为\"确定\"\n") 127 | else: 128 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 129 | -------------------------------------------------------------------------------- /image/image_callback.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | """ 4 | 易盾反垃圾云服务图片离线检测结果获取接口python示例代码 5 | 接口文档: http://dun.163.com/api.html 6 | python版本:python3.7 7 | 运行: 8 | 1. 修改 SECRET_ID,SECRET_KEY,BUSINESS_ID 为对应申请到的值 9 | 2. $ python image_callback.py 10 | """ 11 | __author__ = 'yidun-dev' 12 | __date__ = '2019/11/27' 13 | __version__ = '0.2-dev' 14 | 15 | import hashlib 16 | import time 17 | import random 18 | import urllib3 19 | from urllib.parse import urlencode 20 | import json 21 | from gmssl import sm3, func 22 | 23 | 24 | class ImageCallbackAPIDemo(object): 25 | """易盾图片离线检测结果获取接口示例代码""" 26 | 27 | API_URL = "http://as.dun.163.com/v5/image/callback/results" 28 | VERSION = "v5" 29 | 30 | def __init__(self, secret_id, secret_key, business_id): 31 | """ 32 | Args: 33 | secret_id (str) 产品密钥ID,产品标识 34 | secret_key (str) 产品私有密钥,服务端生成签名信息使用 35 | business_id (str) 业务ID,易盾根据产品业务特点分配 36 | """ 37 | self.secret_id = secret_id 38 | self.secret_key = secret_key 39 | self.business_id = business_id 40 | self.http = urllib3.PoolManager() # 初始化连接池 41 | 42 | def gen_signature(self, params=None): 43 | """生成签名信息 44 | Args: 45 | params (object) 请求参数 46 | Returns: 47 | 参数签名md5值 48 | """ 49 | buff = "" 50 | for k in sorted(params.keys()): 51 | buff += str(k) + str(params[k]) 52 | buff += self.secret_key 53 | if "signatureMethod" in params.keys() and params["signatureMethod"] == "SM3": 54 | return sm3.sm3_hash(func.bytes_to_list(bytes(buff, encoding='utf8'))) 55 | else: 56 | return hashlib.md5(buff.encode("utf8")).hexdigest() 57 | 58 | def check(self): 59 | """请求易盾接口 60 | Returns: 61 | 请求结果,json格式 62 | """ 63 | params = {} 64 | params["secretId"] = self.secret_id 65 | params["businessId"] = self.business_id 66 | params["version"] = self.VERSION 67 | params["timestamp"] = int(time.time() * 1000) 68 | params["nonce"] = int(random.random() * 100000000) 69 | # params["signatureMethod"] = "SM3" # 签名方法,默认MD5,支持SM3 70 | params["signature"] = self.gen_signature(params) 71 | 72 | try: 73 | encoded_params = urlencode(params).encode("utf8") 74 | response = self.http.request( 75 | 'POST', 76 | self.API_URL, 77 | body=encoded_params, 78 | headers={'Content-Type': 'application/x-www-form-urlencoded'}, 79 | timeout=urllib3.Timeout(connect=10, read=10) 80 | ) 81 | content = response.data 82 | return json.loads(content) 83 | except Exception as ex: 84 | print("调用API接口失败:", str(ex)) 85 | 86 | 87 | if __name__ == "__main__": 88 | """示例代码入口""" 89 | SECRET_ID = "your_secret_id" # 产品密钥ID,产品标识 90 | SECRET_KEY = "your_secret_key" # 产品私有密钥,服务端生成签名信息使用,请严格保管,避免泄露 91 | BUSINESS_ID = "your_business_id" # 业务ID,易盾根据产品业务特点分配 92 | api = ImageCallbackAPIDemo(SECRET_ID, SECRET_KEY, BUSINESS_ID) 93 | 94 | ret = api.check() 95 | 96 | code: int = ret["code"] 97 | msg: str = ret["msg"] 98 | if code == 200: 99 | resultList: list = ret["result"] 100 | for resultItem in resultList: 101 | antispamResult: dict = resultItem["antispam"] 102 | if antispamResult is None: 103 | print("暂时没有审核结果需要获取, 请稍后重试!") 104 | else: 105 | name: str = antispamResult["name"] 106 | taskId: str = antispamResult["taskId"] 107 | suggestion: int = antispamResult["suggestion"] 108 | resultType: int = antispamResult["resultType"] 109 | censorSource: int = antispamResult["censorSource"] 110 | censorTime: int = antispamResult["censorTime"] 111 | labelArray: list = antispamResult["labels"] 112 | print("taskId: %s, name: %s, suggestion: %s" % (taskId, name, suggestion)) 113 | # 产品需根据自身需求,自行解析处理,本示例只是简单判断分类级别 114 | for labelItem in labelArray: 115 | label: int = labelItem["label"] 116 | level: int = labelItem["level"] 117 | rate: float = labelItem["rate"] 118 | print("label: %s, level: %s, rate: %s" % (label, level, rate)) 119 | if suggestion == 0: 120 | print("#图片审核结果: 最高等级为\"正常\"\n") 121 | elif suggestion == 2: 122 | print("#图片审核结果: 最高等级为\"确定\"\n") 123 | 124 | else: 125 | print("ERROR: code=%s, msg=%s" % (ret["code"], ret["msg"])) 126 | --------------------------------------------------------------------------------