思路描述:主要使用正则表达式解析。

返回一个跟踪步骤列表。

  1. public
    class TrackingData
  2.     {
  3.         public
    string time { get; set; }
  4.         public
    string context { get; set; }
  5.     }
  6.  
  7.     public
    class DHLExpressTrackingHelper
  8.     {
  9.         private
    static
    string urlFormat = "http://webtrack.dhlglobalmail.com/?trackingnumber={0}";
  10.  
  11.         public
    static List<TrackingData> GetTrackingData(string trackCode)
  12.         {
  13.             //trackCode = "A150529020091";
  14.             WebMocker dhlMocker = new WebMocker();
  15.             var url = string.Format(urlFormat, trackCode);
  16.             var html = dhlMocker.Get(url);
  17.  
  18.             //1
  19.             var patternOLTag = "<ol.*?>(?<olvalue>.*?)</ol>";
  20.             var match = Regex.Match(html, patternOLTag, RegexOptions.Multiline | RegexOptions.Singleline);
  21.             if (match.Success)
  22.             {
  23.                 var olValue = match.Groups["olvalue"].Value;
  24.                 return ParseTrackingData(olValue);
  25.             }
  26.  
  27.             return
    new List<TrackingData>();
  28.         }
  29.  
  30.         private
    static List<TrackingData> ParseTrackingData(string olValue)
  31.         {
  32.             var patternLITag = "<li.*? class=\"(?<className>.*?)\".*?>(?<content>.*?)</li>";
  33.  
  34.             var list = new List<TrackingData>();
  35.  
  36.             string datePrefix = null;
  37.  
  38.             foreach (Match item in Regex.Matches(olValue, patternLITag, RegexOptions.Singleline | RegexOptions.Multiline | RegexOptions.IgnoreCase))
  39.             {
  40.                 var className = item.Groups["className"].Value;
  41.                 var content = item.Groups["content"].Value;
  42.                 if (className == "timeline-date")
  43.                 {
  44.                     datePrefix = content;
  45.                 }
  46.                 else
    if (className.Contains("timeline-event"))
  47.                 {
  48.                     var pp = "<div.*?class=\"(?<divClassName>.*?)\".*?>(?<divContent>.*?)</div>";
  49.  
  50.                     TrackingData trackingData = null;
  51.  
  52.                     foreach (Match subItem in Regex.Matches(content, pp, RegexOptions.Singleline | RegexOptions.Multiline | RegexOptions.IgnoreCase))
  53.                     {
  54.                         var divClassName = subItem.Groups["divClassName"].Value.Trim();
  55.                         var subContent = subItem.Groups["divContent"].Value.Trim();
  56.                         if (divClassName == "timeline-time")
  57.                         {
  58.                             subContent = Regex.Replace(subContent, "<[^<]*>", "");
  59.                             trackingData = new TrackingData();
  60.                             trackingData.time = datePrefix + "
    " + subContent;
  61.                         }
  62.                         else
    if (divClassName == "timeline-location")
  63.                         {
  64.                             trackingData.context += subContent + "
    ";
  65.                         }
  66.                         else
    if (divClassName == "timeline-description")
  67.                         {
  68.                             trackingData.context += subContent + "
    ";
  69.                         }
  70.                         //else if (divClassName == "timeline-location timeline-location-responsive")
  71.                         //{
  72.                         // trackingData.Description += subContent;
  73.                         //}
  74.                     }
  75.  
  76.                     list.Add(trackingData);
  77.                 }
  78.             }
  79.  
  80.             //foreach (var item in list)
  81.             //{
  82.             // Console.WriteLine(item.DateString + "--" + item.Description);
  83.             //}
  84.             return list;
  85.         }
  86.     }

DHL 快递跟踪查询的更多相关文章

  1. 阿里云全国快递物流查询api接口

    口地址: https://market.aliyun.com/products/56928004/cmapi021863.html?spm=5176.730005.productlist.d_cmap ...

  2. C#快递跟踪(基于快递100深度定制)

    本文主要介绍快递跟踪的相关信息.如根据快递单号预测所属快递公司,判断快递是否已被签收,以及改良官方model后可在不用申请授权的情况下实现json,html,xml及text等多种格式以及单行多行,降 ...

  3. (24)ASP.NET Core EF查询(查询的工作原理、跟踪与非跟踪查询)

    1.查询生命周期 在进入正题时候,我们先来了解EF Core查询的生命周期. 1.1LINQ查询会由Entity Framework Core处理并生成给数据库提供程序可处理的表示形式(说白了就是生成 ...

  4. 【VBA研究】VBA通过HTTP协议实现邮件轨迹跟踪查询

    作者:iamlasong 1.接口说明 通过互联网訪问,运单跟踪信息查询接口基于HTTP协议开发,接口为RESTFul风格的Web Service,信息交互过程为用户按我方提供的web service ...

  5. 微信小程序调用快递物流查询API的实现方法

    一. 创建index.wxml.index.wxss.index.js 附上代码: <view class='container'> <input class='info' plac ...

  6. .netcore 写快递100的快递物流信息查询接口

    快递100的物流信息查询接口,官方提供了一些demo;还好官方提供的代码是.netcore版本写的,不过写的有点low;根据官方提供的代码,我按照.netcore 的风格重构了代码:核心代码如下: / ...

  7. APISpace 全球快递物流查询API接口 免费好用

    前言   随着我国电子商务的迅猛发展,物流行业也开始突飞猛进,人们的日常生活越来越离不开快递服务,查快递.寄快递的需求越来越大,随之而来,常用快递接口的需求也越来越大. 全国快递查询接口,支持各大快递 ...

  8. 数据库SQL调优的几种方式 EFcore读的情况下使用 AsNoTracking非跟踪查询

    不要用GUID 当主键 没有规律 可以用雪花ID DBA 优化法则 硬件资源是根本,DBA是为了充分利用硬件资源 一般清空下可以不使用外键 可以提高性能 合理使用临时表 临时表分页; 一些查询语句加w ...

  9. c#读取快递100查询返回的JSON信息

    {"message":"ok","nu":"1105016801203","companytype" ...

随机推荐

  1. function与感叹号

    原文链接:https://swordair.com/function-and-exclamation-mark/ 最近有空可以让我静下心来看看各种代码,function与感叹号的频繁出现,让我回想起2 ...

  2. Stanford大学机器学习公开课(四):牛顿法、指数分布族、广义线性模型

    (一)牛顿法解最大似然估计 牛顿方法(Newton's Method)与梯度下降(Gradient Descent)方法的功能一样,都是对解空间进行搜索的方法.其基本思想如下: 对于一个函数f(x), ...

  3. Mysql手册—基本规范与数据类型

    第十章      本章主要介绍了一些语法规范,如 对于表,函数,字段,在Linux上大小写敏感,Windows和MacOS上却不敏感: Mysql是如何识别函数的及用户在定义自定义函数时命名要求:通过 ...

  4. 有关Java的优秀博客集锦

    1. 在java编程中,多线程并发总有些疑惑:如为什么会产生并发?并发会有什么影响?java中提供了哪些处理并发的技术(机制) 关于并发产生的原因,我查了一些资料目前发现有两种原因:一,存在共享的资源 ...

  5. iOS开发人员不容错过的10大工具

    内容简介 1.iOS简介 2.iOS开发十大实用工具之开发环境 3.iOS开发十大实用工具之图标设计 4.iOS开发十大实用工具之原型设计 5.iOS开发十大实用工具之演示工具 6.iOS开发十大实用 ...

  6. 设计模式之构建者模式(Builder):初步理解

    构建者(Builder)设计模式(又叫生成器设计模式): 当一个类的内部数据过于复杂的时候(通常是负责持有数据的类,比如Config.VO.PO.Entity...),要创建的话可能就需要了解这个类的 ...

  7. Ubuntu16.04 + Win 10 双系统 时间同步,启动项顺序,NumLock指示灯常亮

    1. Ubuntu & win10 双系统时间同步: 先在ubuntu下更新一下时间,确保时间无误: sudo apt-get install ntpdate sudo ntpdate tim ...

  8. 【openGL】画圆

    #include "stdafx.h" #include <GL/glut.h> #include <stdlib.h> #include <math ...

  9. Oracle优化的几个简单步骤

    数据库优化的讨论可以说是一个永恒的主题.资深的Oracle优化人员通常会要求提出性能问题的人对数据库做一个statspack,贴出数据库配置等等.还有的人认为要抓出执行最慢的语句来进行优化.但实际情况 ...

  10. HR外包系统 - 客户员工 发薪需求/个税需求 设置

    最好,客户公司层面进行设置,如果单一情况,只需要设置公司,如果不是单一情况,设置员工, 另外员工只能从公司设置好的地方选择过来. 增强系统简便设置和设置的灵活性.