Python查询快递信息

目录

1.介绍

2.准备工作

(1)快递100企业管理后台

(2)查看接口文档

(3)获取调用权限

3.代码实现

(1)项目结构

(2) 编写logistics_info.py

(3)编写logistics_info_analysis.py

(4) 编写test.py

4.测试

(1)运行test.py

(2)查看wuliu.json


1.介绍

         本篇文章将介绍使用Python调用快递100的API实现快递信息的查询,您也可以访问我的主页查看其他文章:

代码写不完了代码写不完了擅长Python项目,python爬虫,python操作文件,等方面的知识,代码写不完了关注pandas,python,django,pygame,spark,pip,virtualenv,numpy,flask领域.https://blog.csdn.net/spx_0108        话不多说,开始!

2.准备工作

(1)快递100企业管理后台

https://api.kuaidi100.com/manager/page/myinfo/enterprise

注册并登录账号成为测试账号.

(2)查看接口文档

实时快递查询接口技术文档-快递100API开放平台 (kuaidi100.com)

(3)获取调用权限

这里我们需要用到的是授权keycustomer,还需确认已开通实时查询.

3.代码实现

(1)项目结构

(2) 编写logistics_info.py

import hashlib
import json
import requests

# 授权信息可通过链接查看:https://api.kuaidi100.com/manager/page/myinfo/enterprise

class LogisticsInfo():

    def __init__(self, num, com):
        self.key = '换成你的key'  # 客户授权key
        self.customer = '换成你的customer'  # 查询公司customer编号
        self.com = com  # 快递公司
        self.num = num  # 快递单号

    def logistics(self):
        param = {
            'com': self.com,  # 查询的快递公司的编码,一律用小写字母
            'num': self.num,  # 查询的快递单号,单号的最大长度是32个字符
            'phone': '',  # 收件人或寄件人的手机号或固话(也可以填写后四位,如果是固话,请不要上传分机号)
            'from': '',  # 出发地城市,省-市-区,非必填,填了有助于提升签收状态的判断的准确率,请尽量提供
            'to': '',  # 目的地城市,省-市-区,非必填,填了有助于提升签收状态的判断的准确率,且到达目的地后会加大监控频率,请尽量提供
            'resultv2': '4',  # 添加此字段表示开通行政区域解析功能。0:关闭(默认),1:开通行政区域解析功能,4:开通行政解析功能并且返回出发、目的及当前城市信息
            'show': '0',  # 返回数据格式。0:json(默认),1:xml,2:html,3:text
            'order': 'desc'  # 返回结果排序方式。desc:降序(默认),asc:升序
        }

        pjson = json.dumps(param)  # 转json字符串

        postdata = {
            'customer': self.customer,  # 查询公司customer 编号
            'param': pjson  # 参数数据
        }

        # 签名加密, 用于验证身份, 按param + key + customer 的顺序进行MD5加密(注意加密后字符串要转大写), 不需要“+”号
        str = pjson + self.key + self.customer
        md = hashlib.md5()
        md.update(str.encode())
        sign = md.hexdigest().upper()
        postdata['sign'] = sign  # 加密签名

        url = 'http://poll.kuaidi100.com/poll/query.do'  # 实时查询请求地址

        result = requests.post(url, postdata)  # 发送请求
        result = json.loads(result.text)
        # print(type(result))
        # print(result)
        with open('../data/wuliu.json', 'w', encoding='utf-8') as f:
            json.dump(result, f, ensure_ascii=False, indent=2)

        return result

(3)编写logistics_info_analysis.py

import datetime

class LogisticsInfoAnalysis():
    def __init__(self, logistics_info):
        self.logistics_info = logistics_info

    def logistics_info_analysis(self):
        times = []
        print('*'*100)
        print(f'快递单号:{self.logistics_info["nu"]}')
        print(f'快递公司:{self.logistics_info["com"]}')
        print('*'*100)
        print("物流跟踪信息:")
        for item in self.logistics_info['data']:
            times.append(item['time'])
            print(item['time'], item['context'])


        time_str1 = times[-1]   # 物流开始时间
        time_str2 = times[0]   # 物流结束时间

        time1 = datetime.datetime.strptime(time_str1, '%Y-%m-%d %H:%M:%S')
        time2 = datetime.datetime.strptime(time_str2, '%Y-%m-%d %H:%M:%S')

        diff = time2 - time1
        total_seconds = diff.total_seconds()

        # 计算天数、小时数、分钟数和秒数
        days, seconds = divmod(total_seconds, 86400)
        hours, seconds = divmod(seconds, 3600)
        minutes, seconds = divmod(seconds, 60)

        print('*'*100)
        # 格式化输出
        print(f'这个快递的物流总耗时 {int(days)} 天 {int(hours)} 时 {int(minutes)} 分 {int(seconds)} 秒')
        print('*'*100)

(4) 编写test.py

from logistics_info import LogisticsInfo
from logistics_info_analysis import LogisticsInfoAnalysis

if __name__ == '__main__':

    num = '7835562143****'  # 快递单号
    com = 'zhongtong'    # 快递公司

    info = LogisticsInfo(num, com).logistics()  # 物流信息
    # print(test)
    LogisticsInfoAnalysis(info).logistics_info_analysis()   # 分析并输出物流信息

 注意事项:

可在快递100官网下载快递公司编码:

4.测试

(1)运行test.py

(2)查看wuliu.json

在data/wuliu.json中也保存了调用API获取到的数据:

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只程序猿子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值