快递100接口解析与Volley自定义XML解析

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010046908/article/details/48998517 ...
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010046908/article/details/48998517

标题:快递100接口解析与Volley自定义XML解析

1.申请快递100的秘钥:

1、应用场景
(1)电商网站用户打开“我的订单”时调用此API显示结果
(2)物流系统对帐前调用此API查一次所有运单的签收状态
2、是否需要授权
是,请到  快递查询API申请地址 申请
3、请求地址
http://api.kuaidi100.com/api?id=[]&com=[]&nu=[]&valicode=[]&show=[0|1|2|3]&muti=[0|1]&order=[desc|asc]
(使用时请先将上述地址中的 中括号 替换成下面相应的值)

4.输入参数

名称 类型 是否必需 描述
id String 身份授权key,请 快递查询接口 进行申请(大小写敏感)
com String 要查询的快递公司代码,不支持中文,对应的公司代码见 
API URL 所支持的快递公司及参数说明》和《支持的国际类快递及参数说明》。 
如果找不到您所需的公司,请发邮件至 kuaidi@kingdee.com 咨询(大小写不敏感)
nu String 要查询的快递单号,请勿带特殊符号,不支持中文(大小写不敏感)
valicode String 已弃用字段,无意义,请忽略。
show String 返回类型: 
0:返回json字符串, 
1:返回xml对象, 
2:返回html对象, 
3:返回text文本。 
如果不填,默认返回json字符串。
muti String 返回信息数量: 
1:返回多行完整的信息, 
0:只返回一行信息。 
不填默认返回多行。 
order String 排序: 
desc:按时间由新到旧排列, 
asc:按时间由旧到新排列。 
不填默认返回倒序(大小写不敏感)

5.返回结果

字段名称 字段含义
com 物流公司编号
nu 物流单号
time 每条跟踪信息的时间
context 每条跟综信息的描述
state 快递单当前的状态 :  
0:在途,即货物处于运输过程中;
1:揽件,货物已由快递公司揽收并且产生了第一条跟踪信息;
2:疑难,货物寄送过程出了问题;
3:签收,收件人已签收;
4:退签,即货物由于用户拒签、超区等原因退回,而且发件人已经签收;
5:派件,即快递正在进行同城派件;
6:退回,货物正处于退回发件人的途中;
该状态还在不断完善中,若您有更多的参数需求,欢迎发邮件至kuaidi@kingdee.com 提出。
status 查询结果状态: 
0:物流单暂无结果, 
1:查询成功, 
2:接口出现异常,
message 无意义,请忽略
condition 无意义,请忽略
ischeck 无意义,请忽略

6.返回示例

XML格式
            <xml>
            <message>ok</message>
            <nu>1200722815552</nu>
            <ischeck>1</ischeck>
            <com>yunda</com>
            <status>1</status>
            <condition>F00</condition>
            <data>
            <time>2013-03-03 19:24:48</time>
            <context>江苏泗阳县公司:进行揽件扫描</context>
            </data>
            <data>
            <time>2013-03-03 19:25:10</time>
            <context>江苏泗阳县公司:进行发出扫描,将发往:江苏淮安中转站</context>
            </data>
            <data>
            <time>2013-03-03 21:44:47</time>
            <context>江苏淮安中转站:快件进入分拨中心进行分拨</context>
            </data>
            <data>
            <time>2013-03-04 03:22:44</time>
            <context>江苏南京中转站:从站点发出,本次转运目的地:江苏南京栖霞区仙林公司</context>
            </data>
            <data>
            <time>2013-03-04 08:25:03</time>
            <context>江苏南京栖霞区仙林公司:到达目的地网点,快件将很快进行派送</context>
            </data>
            <data>
            <time>2013-03-04 13:09:58</time>
            <context>江苏南京栖霞区仙林公司:进行派件扫描;派送业务员:孙;(</context>
            </data>
            <data>
            <time>2013-03-04 13:19:47</time>
            <context>江苏南京栖霞区仙林公司:快件已被 图片 签收</context>
            </data>
            <state>3</state>
            </xml>


2.自定义XML解析

public class XMLRequest extends Request<XmlPullParser> {


private final Listener<XmlPullParser> mListener;


public XMLRequest(int method, String url, Listener<XmlPullParser> listener,
ErrorListener errorListener) {
super(method, url, errorListener);
mListener = listener;
}


public XMLRequest(String url, Listener<XmlPullParser> listener,
ErrorListener errorListener) {
this(Method.GET, url, listener, errorListener);
}


@Override
protected Response<XmlPullParser> parseNetworkResponse(
NetworkResponse response) {
try {
String xmlString = new String(response.data,
HttpHeaderParser.parseCharset(response.headers));
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser xmlPullParser = factory.newPullParser();
xmlPullParser.setInput(new StringReader(xmlString));
return Response.success(xmlPullParser,
HttpHeaderParser.parseCacheHeaders(response));
} catch (UnsupportedEncodingException e) {
return Response.error(new ParseError(e));
} catch (XmlPullParserException e) {
return Response.error(new ParseError(e));
}
}


@Override
protected void deliverResponse(XmlPullParser response) {
mListener.onResponse(response);
}


}



3、自定义实体

public class KuaiDi {
/**
 * com 物流公司编号
nu 物流单号
time 每条跟踪信息的时间
context 每条跟综信息的描述
state 快递单当前的状态 :  
0:在途,即货物处于运输过程中;
1:揽件,货物已由快递公司揽收并且产生了第一条跟踪信息;
2:疑难,货物寄送过程出了问题;
3:签收,收件人已签收;
4:退签,即货物由于用户拒签、超区等原因退回,而且发件人已经签收;
5:派件,即快递正在进行同城派件;
6:退回,货物正处于退回发件人的途中;
该状态还在不断完善中,若您有更多的参数需求,欢迎发邮件至 kuaidi@kingdee.com 提出。
status 查询结果状态: 
0:物流单暂无结果, 
1:查询成功, 
2:接口出现异常,
message 无意义,请忽略
condition 无意义,请忽略
ischeck 无意义,请忽略
 */

private String nu;//运单号
private String comcontact;//联系电话
private String companytype;
private String com;
private String condition;
private String status;
private String codenumber;
private String state;
private String message;
private String ischeck;
private String comurl;
private List<Data> data;
public String getNu() {
return nu;
}
public void setNu(String nu) {
this.nu = nu;
}
public String getComcontact() {
return comcontact;
}
public void setComcontact(String comcontact) {
this.comcontact = comcontact;
}
public String getCompanytype() {
return companytype;
}
public void setCompanytype(String companytype) {
this.companytype = companytype;
}
public String getCom() {
return com;
}
public void setCom(String com) {
this.com = com;
}
public String getCondition() {
return condition;
}
public void setCondition(String condition) {
this.condition = condition;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getCodenumber() {
return codenumber;
}
public void setCodenumber(String codenumber) {
this.codenumber = codenumber;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String getIscheck() {
return ischeck;
}
public void setIscheck(String ischeck) {
this.ischeck = ischeck;
}
public String getComurl() {
return comurl;
}
public void setComurl(String comurl) {
this.comurl = comurl;
}
public List<Data> getData() {
return data;
}
public void setData(List<Data> data) {
this.data = data;
}
public KuaiDi(String nu, String comcontact, String companytype, String com,
String condition, String status, String codenumber, String state,
String message, String ischeck, String comurl, List<Data> data) {
super();
this.nu = nu;
this.comcontact = comcontact;
this.companytype = companytype;
this.com = com;
this.condition = condition;
this.status = status;
this.codenumber = codenumber;
this.state = state;
this.message = message;
this.ischeck = ischeck;
this.comurl = comurl;
this.data = data;
}
public KuaiDi() {
super();
}
@Override
public String toString() {
return "KuaiDi [nu=" + nu + ", comcontact=" + comcontact
+ ", companytype=" + companytype + ", com=" + com
+ ", condition=" + condition + ", status=" + status
+ ", codenumber=" + codenumber + ", state=" + state
+ ", message=" + message + ", ischeck=" + ischeck + ", comurl="
+ comurl + ", data=" + data + "]";
}
}
public class Data implements Serializable{


/**
* 
*/
private static final long serialVersionUID = 1L;
private String time;//时间
private String location;//位置
private String context;//详细信息

@Override
public String toString() {
return "Data [time=" + time + ", location=" + location + ", context="
+ context + "]";
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getLocation() {
return location;
}
public void setLocation(String location) {
this.location = location;
}
public String getContext() {
return context;
}
public void setContext(String context) {
this.context = context;
}
public Data() {
super();
}


}



4.解析物流信息:

RequestQueue mRequestQueue = Volley.newRequestQueue(this);
mRequestQueue.start();
XMLRequest xmlRequest = new XMLRequest(  
       "http://api.kuaidi100.com/api?id=xxxxxxxxxx&com=huitongkuaidi&nu=70017301113085&&show=1&muti=1&order=desc",  
       new com.android.volley.Response.Listener<XmlPullParser>() {  
            KuaiDi kuaidi;
            List<Data> datas;
            Data data;
@Override  
           public void onResponse(XmlPullParser response) {  
               try {  
                   int eventType = response.getEventType();  
                   while (eventType != XmlPullParser.END_DOCUMENT) {  
                   String nodeName = response.getName();
                       switch (eventType) {  
//                                                            解析到文档开始的时候
                       case XmlPullParser.START_DOCUMENT:
                            kuaidi = new KuaiDi();
                            datas = new ArrayList<Data>();
                       break;
                       case XmlPullParser.START_TAG:  
                           if (nodeName.equals("data")) {  
                           data = new Data();
                           }else if(nodeName.equals("time")){
                           data.setTime(response.nextText());
                           }else if(nodeName.equals("location")){
                           data.setLocation(response.nextText());
                           }else if(nodeName.equals("context")){
                           data.setContext(response.nextText());
                           }else if(nodeName.equals("nu")){
                           kuaidi.setNu(response.nextText());
                           }else if(nodeName.equals("comcontact")){
                           kuaidi.setComcontact(response.nextText());
                           }else if(nodeName.equals("companytype")){
                           kuaidi.setCompanytype(response.nextText());
                           }else if(nodeName.equals("com")){
                           kuaidi.setCom(response.nextText());
                           }else if(nodeName.equals("condition")){
                           kuaidi.setCondition(response.nextText());
                           }else if(nodeName.equals("status")){
                           kuaidi.setStatus(response.nextText());
                           }else if(nodeName.equals("state")){
                           kuaidi.setState(response.nextText());
                           }else if(nodeName.equals("message")){
                           kuaidi.setMessage(response.nextText());
                           }else if(nodeName.equals("codenumber")){
                           kuaidi.setCodenumber(response.nextText());
                           }else if(nodeName.equals("ischeck")){
                           kuaidi.setIscheck(response.nextText());
                           }else if(nodeName.equals("comurl")){
                           kuaidi.setComurl(response.nextText());
                           }
                           break;  
                       case XmlPullParser.END_TAG:
                           if (nodeName.equals("data") && data != null) {
                           datas.add(data);
                               data = null;
                           } 
                           break;
                      default:
                     break;
                       }  
     
                       eventType = response.next();  
                   }  
               } catch (XmlPullParserException e) {  
                   e.printStackTrace();  
               } catch (IOException e) {  
                   e.printStackTrace();  
               } 
               kuaidi.setData(datas);
               System.out.println("----333333---------"+kuaidi.toString());
           }  
       }, new com.android.volley.Response.ErrorListener() {  
           @Override  
           public void onErrorResponse(VolleyError error) {  
               Log.e("TAG", error.getMessage(), error); 
               Toast.makeText(getApplicationContext(), "网络不给力,请待会再试", 1).show();
           }  
       });  
   mRequestQueue.add(xmlRequest); 
}


5.解析的结果展示:



相关文章
|
5天前
|
数据采集 JSON API
深入解析:使用 Python 爬虫获取淘宝店铺所有商品接口
本文介绍如何使用Python结合淘宝开放平台API获取指定店铺所有商品数据。首先需注册淘宝开放平台账号、创建应用并获取API密钥,申请接口权限。接着,通过构建请求、生成签名、调用接口(如`taobao.items.search`和`taobao.item.get`)及处理响应,实现数据抓取。代码示例展示了分页处理和错误处理方法,并强调了调用频率限制、数据安全等注意事项。此技能对开发者和数据分析师极具价值。
|
2月前
|
数据可视化 前端开发 测试技术
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。
|
1天前
|
Web App开发 移动开发 前端开发
React音频播放器样式自定义全解析:从入门到避坑指南
在React中使用HTML5原生&lt;audio&gt;标签时,开发者常面临视觉一致性缺失、样式定制局限和交互体验割裂等问题。通过隐藏原生控件并构建自定义UI层,可以实现完全可控的播放器视觉风格,避免状态不同步等典型问题。结合事件监听、进度条拖拽、浏览器兼容性处理及性能优化技巧,可构建高性能、可维护的音频组件,满足跨平台需求。建议优先使用成熟音频库(如react-player),仅在深度定制需求时采用原生方案。
44 12
|
6天前
|
机器学习/深度学习 JSON 算法
淘宝拍立淘按图搜索API接口系列的应用与数据解析
淘宝拍立淘按图搜索API接口是阿里巴巴旗下淘宝平台提供的一项基于图像识别技术的创新服务。以下是对该接口系列的应用与数据解析的详细分析
|
5天前
|
存储 缓存 监控
如何高效爬取天猫商品数据?官方API与非官方接口全解析
本文介绍两种天猫商品数据爬取方案:官方API和非官方接口。官方API合法合规,适合企业长期使用,需申请企业资质;非官方接口适合快速验证需求,但需应对反爬机制。详细内容涵盖开发步骤、Python实现示例、反爬策略、数据解析与存储、注意事项及扩展应用场景。推荐工具链包括Playwright、aiohttp、lxml等。如需进一步帮助,请联系作者。
|
3月前
|
XML Java 数据格式
使用idea中的Live Templates自定义自动生成Spring所需的XML配置文件格式
本文介绍了在使用Spring框架时,如何通过创建`applicationContext.xml`配置文件来管理对象。首先,在resources目录下新建XML配置文件,并通过IDEA自动生成部分配置。为完善配置,特别是添加AOP支持,可以通过IDEA的Live Templates功能自定义XML模板。具体步骤包括:连续按两次Shift搜索Live Templates,配置模板内容,输入特定前缀(如spring)并按Tab键即可快速生成完整的Spring配置文件。这样可以大大提高开发效率,减少重复工作。
使用idea中的Live Templates自定义自动生成Spring所需的XML配置文件格式
|
3月前
|
设计模式 XML Java
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
本文详细介绍了Spring框架的核心功能,并通过手写自定义Spring框架的方式,深入理解了Spring的IOC(控制反转)和DI(依赖注入)功能,并且学会实际运用设计模式到真实开发中。
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
|
4月前
|
消息中间件 缓存 安全
Future与FutureTask源码解析,接口阻塞问题及解决方案
【11月更文挑战第5天】在Java开发中,多线程编程是提高系统并发性能和资源利用率的重要手段。然而,多线程编程也带来了诸如线程安全、死锁、接口阻塞等一系列复杂问题。本文将深度剖析多线程优化技巧、Future与FutureTask的源码、接口阻塞问题及解决方案,并通过具体业务场景和Java代码示例进行实战演示。
91 3
|
5月前
|
XML Web App开发 JavaScript
XML DOM 解析器
XML DOM 解析器
|
4月前
|
JSON 前端开发 JavaScript
API接口商品详情接口数据解析
商品详情接口通常用于提供特定商品的详细信息,这些信息比商品列表接口中的信息更加详细和全面。以下是一个示例的JSON数据格式,用于表示一个商品详情API接口的响应。这个示例假定API返回一个包含商品详细信息的对象。

推荐镜像

更多