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" ...
随机推荐
- 解决 The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
这个时候我们只需要flush privileges 一下就OK了,mysql> flush privileges;Query OK, 0 rows affected (0.01 sec)
- MyEclipse生成WAR包并在Tomcat下部署发布(转发)
从来没有想过web项目还能打包的,但是有要求,就不得不去实现,在网上找了一下,发现挺简单的. 首先是使用MyEclipse将web项目打包,如下图所示. 右键选中项目,选择export. 然后选择J2 ...
- 11.外观模式(Facade Pattern)
using System; namespace ConsoleApplication4 { class Program { /// <summary> /// 不使用外观模式的情况 /// ...
- C#动态方法调用
此篇将介绍C#如何在运行时动态调用方法.当某些类型是运行时动态确定时,编译时的静态编码是无法解决这些动态对象或类的方法调用的.此篇则给你一把利剑,让动态对象的方法调用成为可能. 1.动态调用dll里的 ...
- Oracle ASM
一 Oracle ASM簡介 Oracle 10g推出的管理磁盤的新方式,用於取代LVM技術.主要用于RAC環境 二 Oracle ASM的配置安裝 1.安裝asm包 RedHat Linux5.x ...
- hdu 5033 单调栈 ****
看出来是单调栈维护斜率,但是不会写,2333,原来是和询问放在一起的 #include <iostream> #include <cstdio> #include <cs ...
- DateTime还是DateTimeOffset?Now还是UtcNow?
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:新年第一篇文章,就来谈谈关于时间的简单技术问题:该用DateTime还是DateTim ...
- 您的 PHP 似乎没有安装运行 WordPress 所必需的 MySQL 扩展”处理方法
转自:http://www.xuebuyuan.com/1549022.html 这已经是一个老掉牙的问题了,部分人使用自己的服务器安装WordPress程序之后,会出现“您的 PHP 似乎没有安装运 ...
- Android学习网站推荐(转)
收集了一些比较好的Android学习网站,希望对大家有所帮助: 1.http://developer.android.com/ Android官方网站,可惜被屏蔽了,需要使用FQ软件 2.http:/ ...
- canvas加载进度条
<!DOCTYPE html> <html><head><meta http-equiv="Content-Type" content=& ...