1 import http.client, mimetypes, urllib, json, time, requests
2
3
4 class YDMHttp:
5 apiurl = 'http://api.yundama.com/api.php'
6 username = ''
7 password = ''
8 appid = ''
9 appkey = ''
10
11 def __init__(self, username, password, appid, appkey):
12 self.username = username
13 self.password = password
14 self.appid = str(appid)
15 self.appkey = appkey
16
17 def request(self, fields, files=[]):
18 response = self.post_url(self.apiurl, fields, files)
19 response = json.loads(response)
20 return response
21
22 def balance(self):
23 data = {'method': 'balance', 'username': self.username, 'password': self.password, 'appid': self.appid,
24 'appkey': self.appkey}
25 response = self.request(data)
26 if (response):
27 if (response['ret'] and response['ret'] < 0):
28 return response['ret']
29 else:
30 return response['balance']
31 else:
32 return -9001
33
34 def login(self):
35 data = {'method': 'login', 'username': self.username, 'password': self.password, 'appid': self.appid,
36 'appkey': self.appkey}
37 response = self.request(data)
38 if (response):
39 if (response['ret'] and response['ret'] < 0):
40 return response['ret']
41 else:
42 return response['uid']
43 else:
44 return -9001
45
46 def upload(self, filename, codetype, timeout):
47 data = {'method': 'upload', 'username': self.username, 'password': self.password, 'appid': self.appid,
48 'appkey': self.appkey, 'codetype': str(codetype), 'timeout': str(timeout)}
49 file = {'file': filename}
50 response = self.request(data, file)
51 if (response):
52 if (response['ret'] and response['ret'] < 0):
53 return response['ret']
54 else:
55 return response['cid']
56 else:
57 return -9001
58
59 def result(self, cid):
60 data = {'method': 'result', 'username': self.username, 'password': self.password, 'appid': self.appid,
61 'appkey': self.appkey, 'cid': str(cid)}
62 response = self.request(data)
63 return response and response['text'] or ''
64
65 def decode(self, filename, codetype, timeout):
66 cid = self.upload(filename, codetype, timeout)
67 if (cid > 0):
68 for i in range(0, timeout):
69 result = self.result(cid)
70 if (result != ''):
71 return cid, result
72 else:
73 time.sleep(1)
74 return -3003, ''
75 else:
76 return cid, ''
77
78 def report(self, cid):
79 data = {'method': 'report', 'username': self.username, 'password': self.password, 'appid': self.appid,
80 'appkey': self.appkey, 'cid': str(cid), 'flag': '0'}
81 response = self.request(data)
82 if (response):
83 return response['ret']
84 else:
85 return -9001
86
87 def post_url(self, url, fields, files=[]):
88 for key in files:
89 files[key] = open(files[key], 'rb')
90 res = requests.post(url, files=files, data=fields)
91 return res.text
92
93
94 def parse_code_img(username, password, appid, appkey, filename, codetype):
95 # 用户名
96 username = username
97 # 密码
98 password = password
99 # 软件ID,开发者分红必要参数。登陆开发者后台【个人软件】得到!
100 appid = appid
101 # 软件密钥,开发者分红必要参数。登陆开发者后台【个人软件】得到!
102 appkey = appkey
103 # 图片文件
104 filename = filename
105 # 验证码类型,# 例:1004表示4位字母数字,不一样类型收费不一样。请准确填写,不然影响识别率。在此查询全部类型 http://www.yundama.com/price.html
106 codetype = codetype
107 # 超时时间,秒
108 timeout = 30
109
110 # 检查
111 if (username == ''):
112 print('请设置好相关参数再测试')
113 else:
114 # 初始化
115 yundama = YDMHttp(username, password, appid, appkey)
116 # 登录云打码
117 uid = yundama.login()
118 print('uid: %s' % uid)
119 # 查询余额
120 balance = yundama.balance()
121 print('balance: %s' % balance)
122 # 开始识别,图片路径,验证码类型ID,超时时间(秒),识别结果
123 cid, result = yundama.decode(filename, codetype, timeout)
124 print('cid: %s, result: %s' % (cid, result))
125 return result