python模块查询巴西邮局的发货方式

pyBRPost的Python项目详细描述


巴西邮局模块

本模块旨在帮助任何需要API查询巴西邮局的人了解:

  1. 包裹何时到达
  2. 要多少钱
  3. 可以查询不同的运输方式

安装

要安装此模块,只需通过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('')

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
在Java中为上传的文件设计强制的文件夹结构   java我如何在下面的代码中解决这个>错误HTTP Status 404   java如何在方面字段Lucene上添加分页   java My 安卓应用程序在尝试10次后崩溃   java“找不到Spring NamespaceHandler”错误   连接到Dynamodb时发生java AWS lambda错误   过程的价值。JAVA中的exitValue()   eclipse vscode java正在尝试设置项目   JavaEclipse不再自动在javadocs中添加标签   java找不到LoggerFactory类   在Java中实现延迟   设置onClickListener时的java NullPointerException   用jsoup解析HTML:Android和Java的区别