zoukankan      html  css  js  c++  java
  • 手动撸一个快递接口

    开发环境:win-xp  python2.7.9  firefox

    使用的库 标准库

    最近有做查物流相关项目,需要用到物流接口,先百度下,看有没有现成的

    还一天限制500次,还要填那么多信息,玩个蛋

    自己撸一个得了

    先看下在线查询的网站,百度第一个出来的是快递100,上面广告不算

    就撸你了,谁让你排第一个

    1,打开网站,按f12,查看元素,调掉网络,开始监控数量

    2输入一个单号

    可以看下发送了不少请求,选xhr过滤下,下面2条就是我们需要跟踪的请求数据

    一条条来分析

    第二条是一个post请求,看下请求参数,参数就一个text,值就是单号

    请求链接是 http://www.kuaidi100.com/autonumber/autoComNum?text=XXXXXXX

    返回参数如下,就一个comCode,看来这个请求是判断单号是什么快递的

    ok,看另外一条请求

    链接是

    http://www.kuaidi100.com/query?type=shentong&postid=xxxx&id=1&valicode=&temp=0.462558009486876

    响应如下,这个就是物流信息,是一个json数据

    回头再看下链接,几个字段type,postid,id,temp

    type明显是快递名称,postid就是单号,id貌似固定是1,temp看情况是时间戳,valicode是空的

    去掉temp直接再浏览器打开链接,看到可以获取数据,没啥用的数据

    到这里,可以看出网站提供了2个接口,第一个是用来判断物流公司

    第二个接口才是真正查询接口

    还要什么申请啊,这不有现成的么

    基本分析完成了,接下来就是python开撸

    先写第一个接口

    #!/usr/bin/env python
    #coding:utf-8
    import urllib,urllib2
    import json,sys
    reload(sys)
    sys.setdefaultencoding("utf-8")
    
    
    #获取快递名称
    def get_kd_name(danhao):
        url = "http://www.kuaidi100.com/autonumber/autoComNum?text="
        if type(danhao)!=long:
            return False
        try:
            return json.loads(urllib2.urlopen(url+str(danhao)).read())["auto"][0]['comCode']
        except Exception, e:
            return False

    先判断下单号是不是long类型数值

    然后拼接url,访问数据,讲真,其实还要伪装下浏览器啥的,懒的弄了

    这样就可以通过单号判断物流公司了

    下面第二个接口

    #获取物流信息
    def get_wuliu(danhao):
        url = "http://www.kuaidi100.com/query?id=1&valicode="
        code = get_kd_name(danhao)
        if code:
            url = url+"&type=%s&postid=%s"%(code,danhao)
            try:
                return json.loads(urllib2.urlopen(url).read())["data"]
            except Exception, e:
                return False
        else:
            return False

    这个接口用到了第一个的接口,只需要输入单号就可以得到物流信息

    不过如果知道物流公司的话,type就不用获取了,可以省一次访问接口,速度更快

    #获取物流信息
    def get_wuliu(code,danhao):
        url = "http://www.kuaidi100.com/query?id=1&valicode="
        if code:
            url = url+"&type=%s&postid=%s"%(code,danhao)
            try:
                return json.loads(urllib2.urlopen(url).read())["data"]
            except Exception, e:
                return False
        else:
            return False

     就这样,一个快递接口就撸出来了,后面在集成到自己程序里面,想怎么查就怎么查

     今天的分享就到这里,如果大家觉得还可以呀,记得打赏呦

  • 相关阅读:
    Base64编码与图片互转
    YUI Compressor–另一款压缩JS/CSS的小工具
    布局和展现相关的建议──给用户体验设计者
    实现左右边框的最低碳代码~~
    三角的一个特殊做法(一个奇技淫巧~)
    数组指针和指针数组
    vs2008建win32基本项目
    vs2008快捷键
    (转)HTML特殊字符
    (转)html5 Placeholder属性兼容IE6、7方法
  • 原文地址:https://www.cnblogs.com/darkspr/p/7604090.html
Copyright © 2011-2022 走看看