V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
XadillaX
V2EX  ›  Node.js

查快递的包又来啦——xto

  •  
  •   XadillaX · 2015-02-02 16:03:50 +08:00 · 5537 次点击
    这是一个创建于 3342 天前的主题,其中的信息可能已经有所发展或是发生改变。
    好久之前发过的包,不过那个时候初学 node,包括回调设计、API 设计方面都是乱来的。

    最近想把最近初学 node 的时候不科学的包重新理一遍,就从这个 `xto` 入手了。

    首先是包的 Repo 地址:

    > https://github.com/XadillaX/xto

    ## 安装

    安装很简单,直接

    ```sh
    $ npm install xto --save
    ```

    就好了。

    > 为什么叫 XTO 呢?因为咱国内的很多快递都叫**x通**,然后英文名都叫 `zto`、`gto`、`sto` 等,于是我这个包就叫 `xto` 了。

    ## 使用

    直接 `require` 进来调用 `query` 方法即可。

    ```javascript
    var xto = require("xto");

    xto.query(NUMBER, COMPANY_NAME, function(err, express) {
    //... Do something
    });
    ```

    > `NUMBER` 就是运单号,然后 `COMPANY_NAME` 是快递公司名、短名以及公司标识其中之一。对照表在[这里](https://github.com/XadillaX/xto#companies-supported)。

    然后 `callback` 的 `express` 对象的格式结构大概是:

    ```json
    {
    "message": "ok",
    "nu": "1000****4443",
    "ischeck": "1",
    "com": "yuantong",
    "updatetime": "2015-02-02 15:57:18",
    "status": "200",
    "condition": "F00",
    "data": [
    {
    "time": "2014-11-06 18:32:19",
    "location": "",
    "context": "浙江省宁波市科技园区公司 已签收",
    "ftime": "2014-11-06 18:32:19"
    },
    {
    "time": "2014-11-06 09:14:58",
    "location": "",
    "context": "浙江省宁波市科技园区公司 派件中",
    "ftime": "2014-11-06 09:14:58"
    },
    {
    "time": "2014-11-06 09:04:52",
    "location": "",
    "context": "浙江省宁波市科技园区公司 已收入",
    "ftime": "2014-11-06 09:04:52"
    },
    {
    "time": "2014-11-06 05:31:40",
    "location": "",
    "context": "宁波转运中心公司 已发出",
    "ftime": "2014-11-06 05:31:40"
    },
    {
    "time": "2014-11-06 05:16:43",
    "location": "",
    "context": "宁波转运中心公司 已收入",
    "ftime": "2014-11-06 05:16:43"
    },
    {
    "time": "2014-11-06 00:21:40",
    "location": "",
    "context": "杭州转运中心公司 已打包",
    "ftime": "2014-11-06 00:21:40"
    },
    {
    "time": "2014-11-06 00:20:37",
    "location": "",
    "context": "杭州转运中心公司 已收入",
    "ftime": "2014-11-06 00:20:37"
    },
    {
    "time": "2014-11-05 20:35:27",
    "location": "",
    "context": "浙江省杭州市文三路公司 已收件",
    "ftime": "2014-11-05 20:35:27"
    }
    ],
    "state": "3"
    }
    ```

    其中 `"state"` 字段是快递状态,可以通过 `xto.stateToText` 进行转化成可读的中文状态,比如 `3` 转化后就是 `"已签收"`。

    ## 其它

    XTO 目前支持 446 家快递公司的查询,具体的快递公司已在上方连接中列出。
    21 条回复    2015-02-03 01:14:12 +08:00
    program2000
        1
    program2000  
       2015-02-02 16:21:32 +08:00
    楼主加油,这东西听起来不错
    binux
        2
    binux  
       2015-02-02 16:23:35 +08:00
    这种有时效性的包,放在包管理器里好吗?
    typcn
        3
    typcn  
       2015-02-02 16:30:57 +08:00
    @binux 放哪都无所谓吧,装的人也会看更新时间的
    而且又不只是作者更新,也许有“热心网友”帮忙更新
    XadillaX
        4
    XadillaX  
    OP
       2015-02-02 16:34:08 +08:00
    @binux 这个是我 13 年写的(没记错的话

    反正一直到现在没有失效过,我重写只是因为代码太 2 了,于是用现在的能力不改变太多的情况下修改了一遍。
    XadillaX
        5
    XadillaX  
    OP
       2015-02-02 16:34:31 +08:00
    @binux 期间我一直有更新快递公司库。
    qiukun
        6
    qiukun  
       2015-02-02 16:41:28 +08:00 via Android
    Orz
    XadillaX
        7
    XadillaX  
    OP
       2015-02-02 16:43:40 +08:00
    @qiukun 哎唷,好久不见。
    f0rger
        8
    f0rger  
       2015-02-02 16:45:14 +08:00
    果然是kuaidi100的link
    xiashali
        9
    xiashali  
       2015-02-02 16:47:14 +08:00 via Android
    宁波人啊,这里小港的
    sobigfish
        10
    sobigfish  
       2015-02-02 16:48:25 +08:00
    快递100的API wrapper?
    从http://baidu.kuaidi100.com/query 采集?
    XadillaX
        11
    XadillaX  
    OP
       2015-02-02 17:00:19 +08:00
    @xiashali 啊咧?不是已经改成杭州了么
    dgsrz
        12
    dgsrz  
       2015-02-02 18:04:30 +08:00
    Orz
    akfish
        13
    akfish  
       2015-02-02 18:21:10 +08:00
    建议加个命令行脚本,然后install时-g,查快递时就可以
    ```
    xto 快递单号
    ```
    XadillaX
        14
    XadillaX  
    OP
       2015-02-02 19:01:09 +08:00
    @akfish 这个可以有。
    xiashali
        15
    xiashali  
       2015-02-02 19:14:55 +08:00 via Android
    @XadillaX 快递信息
    XadillaX
        16
    XadillaX  
    OP
       2015-02-02 19:16:05 +08:00
    @xiashali 哦,这个不是我的信息。
    invite
        17
    invite  
       2015-02-02 21:38:24 +08:00
    LZ 自己直接从官网搞吧.
    ETiV
        18
    ETiV  
       2015-02-02 21:40:18 +08:00
    帖子太长没细看...

    能做成 快递100 那种, 输入单号自动解析出快递公司么?
    XadillaX
        19
    XadillaX  
    OP
       2015-02-02 23:21:58 +08:00 via Android
    @ETiV 几乎每个公司的 object 都有个单号的正则,你自己可以遍历去 test。
    akfish
        20
    akfish  
       2015-02-02 23:48:17 +08:00   ❤️ 1
    @XadillaX

    根据下图的逻辑:


    接下来@ETiV 是不是应该说:
    sudo 能做成 快递100 那种, 输入单号自动解析出快递公司么?
    ETiV
        21
    ETiV  
       2015-02-03 01:14:12 +08:00
    @akfish 这么用法不对啊...

    应该去银行:

    sudo give me 9,999,999 dollars now
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   989 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 21:58 · PVG 05:58 · LAX 14:58 · JFK 17:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.