python模块查询巴西邮局的发货方式
pyBRPost的Python项目详细描述
巴西邮局模块
本模块旨在帮助任何需要API查询巴西邮局的人了解:
- 包裹何时到达
- 要多少钱
- 可以查询不同的运输方式
安装
要安装此模块,只需通过pip添加它即可
pip install pyBRPost
它需要一些额外的模块:
pip install requests xmltodict
用法
要使用这个模块,您只需要配置包信息并执行get_fare() 方法。下面是一个简单的测试:
from br_posts import fare, options
tst = fare.Fare()
tst.requestServices = [
options.Service.SEDEX_10_RETAIL,
options.Service.SEDEX_12,
options.Service.SEDEX_CASH,
options.Service.SEDEX_RETAIL,
options.Service.SEDEX_TODAY_RETAIL,
options.Service.PAC_CASH,
options.Service.PAC_RETAIL
]
tst.dimensions['weight'] = 0.875
tst.dimensions['length'] = 16
tst.dimensions['width'] = 11
tst.dimensions['height'] = 10
tst.dimensions['diameter'] = 10
tst.cepDestination = '09571000'
tst.cepOrigin = '24738791'
tst.value = 2500.75
tst.packageFormat = options.ObjectType.BOX
tst.extras['receiving_warning'] = True
try:
fare_return = tst.get_fare()
except Exception as error:
print(error)
exit(-1)
for ret in fare_return:
print('Service: {serv}'.format(serv=ret['service']))
error_code = ret['error_code']
if error_code != 0:
print('Error ({code}): {desc}'.format(code=error_code, desc=ret['error_msg']))
else:
print('Time: {time} day{mult}'.format(time=ret['delivery_time'], mult='s' if ret['delivery_time'] > 1 else ''))
print('Value: R$ {val}'.format(val=ret['value']))
print('Deliver on saturday? {sat}'.format(sat=ret['delivery_saturday']))
print('Delivery on: {delivery_date}'.format(
delivery_date=tst.get_estimated_delivery_day(add_days=1,
travel_days=ret['delivery_time'],
deliver_on_saturday=ret['delivery_saturday']).strftime('%d/%m/%Y')))
print('')
这有点大,所以让我们用3个简单的步骤来深入了解这个示例:
导入
from br_posts import fare, options
这些是基本导入,还有一个“ship.errors”导入可用于捕获 例外情况。
“ship.options”文件包含枚举类服务和objecttype,它们负责配置 发送包的方法和包的格式。
这些是服务枚举的选项:
- SEDEX_零售-普通SEDEX类型
- sedex_to_charge-sedex将在接收器上充电
- SEDEX_10_零售-SEDEX 10
- Sedex_Today_零售-Sedex同日
- SEDEX_现金-SEDEX现金支付
- SEDEX货到付款-SEDEX货到付款
- SEDEX_12-SEDEX 12
- pac_零售-普通pac
- pac_cash-pac on cash
- 货到付款-货到付款
这些是objecttype enum的选项:
- 盒子-大型产品最常见的SEDEX
- 辊-有时可称为“棱镜”
- 信件-任何可以作为电子信封发送的内容
您可以在Correios site上找到更多这些选项。
设置
导入后,需要实例化“ship.fare.fare”对象,并创建初始设置:
tst = fare.Fare()
tst.requestServices = [
options.Service.SEDEX_10_RETAIL,
options.Service.SEDEX_12,
options.Service.SEDEX_CASH,
options.Service.SEDEX_RETAIL,
options.Service.SEDEX_TODAY_RETAIL,
options.Service.PAC_CASH,
options.Service.PAC_RETAIL
]
tst.dimensions['weight'] = 0.875
tst.dimensions['length'] = 16
tst.dimensions['width'] = 11
tst.dimensions['height'] = 10
tst.dimensions['diameter'] = 10
tst.cepDestination = '09571000'
tst.cepOrigin = '24738791'
tst.value = 2500.75
tst.packageFormat = options.ObjectType.BOX
tst.extras['receiving_warning'] = True
在所有这些选项中,只有那些是必需的:
- 请求服务
- 尺寸
- cepDestination
- ceporigin
- 包格式
如果其中一些丢失或错误,则在 执行get-fare()方法:
- 无效参数错误
- 丢失参数错误
获得票价
导入并设置要查询的信息后,应调用get_fare()方法:
try:
fare_return = tst.get_fare()
except Exception as error:
print(error)
exit(-1)
如果有任何错误,此方法将在correios api中发布之前创建的设置 安装程序会引发异常。如果一切顺利,它会返回一个列表 有了所有结果(通常是“requestservice”的结果),您可以轻松地将其作为字典阅读:
for ret in fare_return:
print('Service: {serv}'.format(serv=ret['service']))
error_code = ret['error_code']
if error_code != 0:
print('Error ({code}): {desc}'.format(code=error_code, desc=ret['error_msg']))
else:
print('Time: {time} day{mult}'.format(time=ret['delivery_time'], mult='s' if ret['delivery_time'] > 1 else ''))
print('Value: R$ {val}'.format(val=ret['value']))
print('Deliver on saturday? {sat}'.format(sat=ret['delivery_saturday']))
这个包中有一个“礼物”与correios api无关, 估计交货方式,您可以打电话获取交货日期:
print('Delivery on: {delivery_date}'.format(
delivery_date=tst.get_estimated_delivery_day(add_days=1,
travel_days=ret['delivery_time'],
deliver_on_saturday=ret['delivery_saturday']).strftime('%d/%m/%Y')))
print('')