DHL 快递跟踪查询
思路描述:主要使用正则表达式解析。
返回一个跟踪步骤列表。
- public
class TrackingData - {
- public
string time { get; set; } - public
string context { get; set; } - }
- public
class DHLExpressTrackingHelper - {
- private
static
string urlFormat = "http://webtrack.dhlglobalmail.com/?trackingnumber={0}"; - public
static List<TrackingData> GetTrackingData(string trackCode) - {
- //trackCode = "A150529020091";
- WebMocker dhlMocker = new WebMocker();
- var url = string.Format(urlFormat, trackCode);
- var html = dhlMocker.Get(url);
- //1
- var patternOLTag = "<ol.*?>(?<olvalue>.*?)</ol>";
- var match = Regex.Match(html, patternOLTag, RegexOptions.Multiline | RegexOptions.Singleline);
- if (match.Success)
- {
- var olValue = match.Groups["olvalue"].Value;
- return ParseTrackingData(olValue);
- }
- return
new List<TrackingData>(); - }
- private
static List<TrackingData> ParseTrackingData(string olValue) - {
- var patternLITag = "<li.*? class=\"(?<className>.*?)\".*?>(?<content>.*?)</li>";
- var list = new List<TrackingData>();
- string datePrefix = null;
- foreach (Match item in Regex.Matches(olValue, patternLITag, RegexOptions.Singleline | RegexOptions.Multiline | RegexOptions.IgnoreCase))
- {
- var className = item.Groups["className"].Value;
- var content = item.Groups["content"].Value;
- if (className == "timeline-date")
- {
- datePrefix = content;
- }
- else
if (className.Contains("timeline-event")) - {
- var pp = "<div.*?class=\"(?<divClassName>.*?)\".*?>(?<divContent>.*?)</div>";
- TrackingData trackingData = null;
- foreach (Match subItem in Regex.Matches(content, pp, RegexOptions.Singleline | RegexOptions.Multiline | RegexOptions.IgnoreCase))
- {
- var divClassName = subItem.Groups["divClassName"].Value.Trim();
- var subContent = subItem.Groups["divContent"].Value.Trim();
- if (divClassName == "timeline-time")
- {
- subContent = Regex.Replace(subContent, "<[^<]*>", "");
- trackingData = new TrackingData();
- trackingData.time = datePrefix + "
" + subContent; - }
- else
if (divClassName == "timeline-location") - {
- trackingData.context += subContent + "
"; - }
- else
if (divClassName == "timeline-description") - {
- trackingData.context += subContent + "
"; - }
- //else if (divClassName == "timeline-location timeline-location-responsive")
- //{
- // trackingData.Description += subContent;
- //}
- }
- list.Add(trackingData);
- }
- }
- //foreach (var item in list)
- //{
- // Console.WriteLine(item.DateString + "--" + item.Description);
- //}
- return list;
- }
- }
DHL 快递跟踪查询的更多相关文章
- 阿里云全国快递物流查询api接口
口地址: https://market.aliyun.com/products/56928004/cmapi021863.html?spm=5176.730005.productlist.d_cmap ...
- C#快递跟踪(基于快递100深度定制)
本文主要介绍快递跟踪的相关信息.如根据快递单号预测所属快递公司,判断快递是否已被签收,以及改良官方model后可在不用申请授权的情况下实现json,html,xml及text等多种格式以及单行多行,降 ...
- (24)ASP.NET Core EF查询(查询的工作原理、跟踪与非跟踪查询)
1.查询生命周期 在进入正题时候,我们先来了解EF Core查询的生命周期. 1.1LINQ查询会由Entity Framework Core处理并生成给数据库提供程序可处理的表示形式(说白了就是生成 ...
- 【VBA研究】VBA通过HTTP协议实现邮件轨迹跟踪查询
作者:iamlasong 1.接口说明 通过互联网訪问,运单跟踪信息查询接口基于HTTP协议开发,接口为RESTFul风格的Web Service,信息交互过程为用户按我方提供的web service ...
- 微信小程序调用快递物流查询API的实现方法
一. 创建index.wxml.index.wxss.index.js 附上代码: <view class='container'> <input class='info' plac ...
- .netcore 写快递100的快递物流信息查询接口
快递100的物流信息查询接口,官方提供了一些demo;还好官方提供的代码是.netcore版本写的,不过写的有点low;根据官方提供的代码,我按照.netcore 的风格重构了代码:核心代码如下: / ...
- APISpace 全球快递物流查询API接口 免费好用
前言 随着我国电子商务的迅猛发展,物流行业也开始突飞猛进,人们的日常生活越来越离不开快递服务,查快递.寄快递的需求越来越大,随之而来,常用快递接口的需求也越来越大. 全国快递查询接口,支持各大快递 ...
- 数据库SQL调优的几种方式 EFcore读的情况下使用 AsNoTracking非跟踪查询
不要用GUID 当主键 没有规律 可以用雪花ID DBA 优化法则 硬件资源是根本,DBA是为了充分利用硬件资源 一般清空下可以不使用外键 可以提高性能 合理使用临时表 临时表分页; 一些查询语句加w ...
- c#读取快递100查询返回的JSON信息
{"message":"ok","nu":"1105016801203","companytype" ...
随机推荐
- VS工程目标文件名设置
默认的输出文件名是$(ProjectName) 可以在项目属性-配置属性-常规-目标文件名中设置 例如我想在Debug版本的输出文件加一个后缀d,那么我可以这样设置:$(ProjectName)d
- [Android Pro] AAR and JAR
svn status svn log --limit 3 > RELEASE_NOTE.txt cat RELEASE_NOTE.txt pwd project_name_prefix=&quo ...
- python基础——调试
python基础——调试 程序能一次写完并正常运行的概率很小,基本不超过1%.总会有各种各样的bug需要修正.有的bug很简单,看看错误信息就知道,有的bug很复杂,我们需要知道出错时,哪些变量的值是 ...
- 项目配置laungchImage
- Android 录音
想要实现wav格式的编码时我们也就不能再使用MediaRecorder,而只能使用AudioRecord进行处理
- NYOJ题目170网络的可靠性
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAs8AAANvCAIAAACte6C6AAAgAElEQVR4nOydPbLcNhOu7yaUayGOZy
- IOS 开发,调用打电话,发短信,打开网址
IOS 开发,调用打电话,发短信,打开网址 1.调用 自带mail [[UIApplication sharedApplication] openURL:[NSURL URLWithString: ...
- Java -- 子类使用super调用父类的方法A,A 调用了方法B,子类也override方法B,那么super.A()最终调用到了子类的B方法
public class SuperClass{ public void printA(){ System.out.print("SuperClass-printA"); prin ...
- 大话数据结构–1.基础知识+2.算法
2.算法: 算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每个指令表现为一个或多个操作. 特性:输入.输出.有穷性.确定性.可行性. 2.9.1.算法时间复杂度: 语句 ...
- 重温WCF之WCF传输安全(十三)(3)基于SSL的WCF对客户端验证(转)
转载地址:http://www.cnblogs.com/lxblog/archive/2012/09/18/2690719.html 上文我们演示了,客户端对服务器端身份的验证,这一篇来简单演示一下对 ...