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)

即可。

至此,一個快遞查詢核心已完畢,剩餘應當是異常處理等,不再贅述。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章