You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
12306/damatuCode/damatuWeb.py

124 lines
4.2 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# -*- coding=utf-8 -*-
import hashlib
import json
import base64
import requests
from myException.balanceException import balanceException
def md5str(str): # md5加密字符串
m = hashlib.md5(str.encode(encoding="utf-8"))
return m.hexdigest()
def md5(byte): # md5加密byte
return hashlib.md5(byte).hexdigest()
class DamatuApi():
ID = '40838'
KEY = 'ca9507e17e8d5ddf7c57cd18d8d33010'
HOST = 'http://api.dama2.com:7766/app/'
def __init__(self, username, password, file_path=None):
self.username = username
self.password = password
self.file_path = file_path
def getSign(self, param=b''):
return (md5(bytes(self.KEY) + bytes(self.username) + param))[:8]
def getPwd(self):
return md5str(self.KEY + md5str(md5str(self.username) + md5str(self.password)))
def post(self, path, params={}):
data = params
url = self.HOST + path
response = requests.post(url, data)
return response.content
# 查询余额 return 是正数为余额 如果为负数 则为错误码
def getBalance(self):
data = {'appID': self.ID,
'user': self.username,
'pwd': self.getPwd(),
'sign': self.getSign()
}
res = self.post('d2Balance', data)
res = str(res)
jres = json.loads(res)
if jres['ret'] == 0:
return jres['balance']
else:
return jres['ret']
# 上传验证码 参数filePath 验证码图片路径 如d:/1.jpg type是类型查看http://wiki.dama2.com/index.php?n=ApiDoc.Pricedesc return 是答案为成功 如果为负数 则为错误码
def decode(self, type):
f = open(self.file_path, 'rb')
fdata = f.read()
filedata = base64.b64encode(fdata)
f.close()
data = {'appID': self.ID,
'user': self.username,
'pwd': self.getPwd(),
'type': type,
'fileDataBase64': filedata,
'sign': self.getSign(fdata)
}
res = self.post('d2File', data)
res = str(res)
jres = json.loads(res)
if jres['ret'] == 0:
# 注意这个json里面有retidresultcookie根据自己的需要获取
return jres['result']
else:
return jres['ret']
# url地址打码 参数 url地址 type是类型(类型查看http://wiki.dama2.com/index.php?n=ApiDoc.Pricedesc) return 是答案为成功 如果为负数 则为错误码
def decodeUrl(self, url, type):
data = {'appID': self.ID,
'user': self.username,
'pwd': self.getPwd(),
'type': type,
'url': url,
'sign': self.getSign(url.encode(encoding="utf-8"))
}
res = self.post('d2Url', data)
res = str(res,)
jres = json.loads(res)
if jres['ret'] == 0:
# 注意这个json里面有retidresultcookie根据自己的需要获取
return (jres['result'])
else:
return jres['ret']
# 报错 参数id(string类型)由上传打码函数的结果获得 return 0为成功 其他见错误码
def reportError(self, id):
data = {'appID': self.ID,
'user': self.username,
'pwd': self.getPwd(),
'id': id,
'sign': self.getSign(id.encode(encoding="utf-8"))
}
res = self.post('d2ReportError', data)
res = str(res)
jres = json.loads(res)
return jres['ret']
def main(self):
result = self.decode(287)
img_code = result.replace('|', ',') if not isinstance(result, int) else ""
print("验证码识别坐标为{0}".format(img_code))
return img_code
# # 调用类型实例:
# # 1.实例化类型 参数是打码兔用户账号和密码
# dmt = DamatuApi("wenxianping", "wen1995")
# # 2.调用方法:
# print(dmt.getBalance()) # 查询余额
# print(dmt.decode('tkcode', 287)) # 上传打码
# # print(dmt.decodeUrl('https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew?module=login&rand=sjrand&0.7586344633015405', 310)) # 上传打码
# # print(dmt.reportError('894657096')) # 上报错误