UWP编写快递查询

在UWP中,如果使用.NET framework4.5以上或者UWP中的.NET Core的话,就可以使用HTTPClient进行更方便的网络访问。

在本次项目中,选择“快递100”网站进行爬取。


首先随便查询一个快递,在F12开发人员工具中,可以发现请求的url为

http://www.kuaidi100.com/query?type={0}&postid={1}", com, ExpressNum

其中com为公司的代码,如“顺丰”则代替为shunfeng,

postid为快递单号。

获取到正确的url后,需要解析返回的json数据。

推荐使用开源的Newtonsoft.Json;免得在反序列化的路上折磨自己。


过程代码:

var client = new HttpClient();
//快递单号格式http://www.kuaidi100.com/query?type=shunfeng&postid=xxxxxxxx
var response = await client.GetAsync(String.Format("http://www.kuaidi100.com/query?type={0}&postid={1}", com, ExpressNum));
var result = await response.Content.ReadAsStringAsync();
ExpressData reExpress = (ExpressData)JsonConvert.DeserializeObject<ExpressData>(result);


得到的reExpress就是我们要的数据,具体ExpressData是什么后面说。
比较容易理解过程。注意GetAsync为异步方法,所以需要await,函数也声明为async

class ExpressItem
    {
        //com为快递公司的字符串转换,ExpressNum为快递单号,userInfo为数据绑定的集合。
        public static async void GetResponse(string com, string ExpressNum, ObservableCollection<Detail> userInfo)
        {
            var client = new HttpClient();
            var response = await client.GetAsync(String.Format("http://www.kuaidi100.com/query?type={0}&postid={1}", com, ExpressNum));
            var result = await response.Content.ReadAsStringAsync();
            ExpressData reExpress = (ExpressData)JsonConvert.DeserializeObject<ExpressData>(result);

            userInfo.Clear();
            //倒序显示。
            for (int i = reExpress.data.Count - 1; i >= 0; --i)
                //reExpress.data.ForEach(p => userInfo.Add(p));
                userInfo.Add(reExpress.data[i]);
        }
    }


类定义:

public class ExpressData
    {
        public int status;
        public int errCode;
        public string message;
        public string html;
        public int mailTo;
        public string tel;
        public string expTextName;
        public List<Detail> data;
    }
    public class Detail
    {
        public string time;
        public string context;
    }

这个是根据获得的json数据包含的内容设置的,类型也是自选,因为返回的序列化数据为json字符串。

可以在在线json解析网站先观察一下。

使用jsonconverter后,可以获得我们想要的类型的数据。


如果是在python中使用,获得json字符串后

eval(result)

即可。

至此,一个快递查询核心已完毕,剩余应当是异常处理等,不再赘述。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值