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" ...
随机推荐
- Android笔记:四大组件
1.Activity(是用户可以看到的主要的界面,使用时需要在AndroidManifest.xml中编辑声明.) 启动模式: 启动模式一共有四种,分别是standard.singleTop.sing ...
- 躲避大龙(codevs 1961)
题目描述 Description 你早上起来,慢悠悠地来到学校门口,发现已经是八点整了!(这句话里有一个比较重要的条件) 学校共有N个地点,编号为1~N,其中1号为学校门口(也就是你现在所处的位置), ...
- SQLServer基本操作
SQL 全名是结构化查询语言(Structured Query Language),是关系数据库管理系统的标准语言 1.分离数据库:将当前数据库文件和数据库引擎的关系断开,没有任何关系了,这样就可以随 ...
- python基础——map/reduce
python基础——map/reduce Python内建了map()和reduce()函数. 如果你读过Google的那篇大名鼎鼎的论文“MapReduce: Simplified Data Pro ...
- 兼容iOS 10:配置获取隐私数据权限声明
原文链接 iOS 10的一大变化是更强的隐私数据保护.在文档中是这么描述的: You must statically declare your app’s intended use of protec ...
- Mysql手册—SQLStatementSyntax
14.1.1 ALTER DATABASE Syntax,可用于修改数据库字符集和校验规则 查看校验规则可如下: 由于utf8的校验规则都是ci(case insensitive),所以是不区分大小写 ...
- IOS中定时器NSTimer的开启与关闭
调用一次计时器方法: myTimer = [NSTimer scheduledTimerWithTimeInterval:1.5 target:self selector:@selector(scro ...
- core
http://blog.csdn.net/xiaoxiaoniaoer1/article/details/7740820 1.core文件的生成开关和大小限制--------------------- ...
- Swift - 初始化Initialization
Ps:苹果官方文档-Initialization 自定义控件初始化中常见的几种错误(指定构造器和便利构造器)截图: 意思是:1.没有添加重写符override(重写父类方法)2.没有重写initW ...
- Maven构建Hadoop Maven构建Hadoop工程
一.安装maven linux eclipse3.6.1 maven安装 二:官网依赖库 我们可以直接去官网查找我们需要的依赖包的配置pom,然后加到项目中. 官网地址:http://mvnrepos ...