单行应用
monobank的Python项目详细描述
python monobank
Monobank API的Python客户端(https://api.monobank.ua/docs/)
安装
pip install monobank
用法
个人API
使用该令牌初始化客户端:
importmonobanktoken='xxxxxxxxxxxxxxx'mono=monobank.Client(token)user_info=mono.get_client_info()print(user_info)
方法
获取货币
>>>mono.get_currency()[{'currencyCodeA':840,'currencyCodeB':980,'date':1561686005,'rateBuy':25.911,'rateSell':26.2357},{'currencyCodeA':978,'currencyCodeB':980,'date':1561686005,'rateBuy':29.111,'rateSell':29.7513},...
获取客户信息
>>>mono.get_client_info(){'name':'Dmitriy Dubilet''accounts':[{'id':'accidxxxxx''balance':100000000,'cashbackType':'UAH','creditLimit':100000000,'currencyCode':980,}],}
获取语句
>>>mono.get_statements('accidxxxxx',date(2019,1,1),date(2019,1,30))[{'id':'iZDPhf8v32Qass','amount':-127603,'balance':99872397,'cashbackAmount':2552,'commissionRate':0,'currencyCode':978,'description':'Smartass club','hold':True,'mcc':5411,'operationAmount':4289,'time':1561658263},...]
您还可以传递datetime对象
>>>mono.get_statements('accidxxxxx',datetime(2019,1,1,11,15),datetime(2019,1,2,11,15))
公司API
文档在这里-https://api.monobank.ua/docs/corporate.html
公司api与公共api有相同的方法,但它没有速率限制,如果您处理数据用于商业用途(或只是存储大量个人数据),则建议使用这种方法。
访问
1)生成私钥
openssl ecparam -genkey -name secp256k1 -rand /dev/urandom -out priv.key
openssl ecparam -genkey -name secp256k1 -rand /dev/urandom -out priv.key
这将输出文件priv.key
警告:不要与任何人共享,不要将其存储在公共git存储库中
2)生成公钥
openssl ec -in priv.key -pubout -out pub.key
openssl ec -in priv.key -pubout -out pub.key
这将输出文件pub.key
3)请求API访问
向api@monobank.ua发送电子邮件-描述您的项目,并附加pub.key(!!!不是私人钥匙!!!)
请求Monobank用户的许可
一旦Monobank团队批准了您的应用程序,您就可以开始使用公司API:
1)创建Monobank用户访问请求
private_key='/path/to/your/priv.key'request=monobank.access_request('ps',private_key)
如果一切正常,您应该收到以下信息:
print(request){'tokenRequestId':'abcdefg_Wg','acceptUrl':'https://mbnk.app/auth/abcdefg_Wg'}
您应该将tokenrequestid保存到数据库,然后向用户提供链接accepturl
注意:要获得用户接受通知,您可以使用web回调:
monobank.access_request('ps',private_key,callback_url='https://yourserver.com/callback/')
2)检查用户是否接受
您可以检查用户是否接受这样的访问请求:
request_token='abcdefg_Wg'# the token from access_request resultprivate_key='/path/to/your/priv.key'mono=monobank.CorporateClient(request_token,private_key)mono.check()# returns True if user accepted, False if not
3)使用方法
一旦用户接受您的访问请求,您就可以开始使用与公共api相同的所有方法了
mono.get_statements(....)
处理错误
如果使用个人api,可能会遇到“请求过多”错误。要正确捕获并重试,请使用monobank.toomanyrequests异常
try:mono.get_statements(....)exceptmonobank.TooManyRequest:time.sleep(1)# try again:mono.get_statements(....)
您可以使用RateLimitor库(如https://pypi.org/project/ratelimiter/)下载所有事务