bam-bam-bigelow / shipment-tracker
通过简单抓取数据解析多个承运商的跟踪信息,如UPS、USPS、DHL和GLS。无需任何API访问权限。
Requires
- php: >=7.1
- ext-dom: *
- ext-json: *
- guzzlehttp/guzzle: >=3.9
- nesbot/carbon: >=1.20
Requires (Dev)
- phpunit/phpunit: ~9.4.0
- roave/security-advisories: dev-latest
- dev-master
- 0.8.5
- 0.8.4
- 0.8.3
- 0.8.2
- 0.8.1
- 0.8.0
- 0.7.8
- 0.7.7
- 0.7.6
- 0.7.5
- 0.7.4
- 0.7.3
- 0.7.2
- 0.7.1
- 0.7.0
- 0.6.4
- 0.6.3
- 0.6.2
- 0.6.1
- 0.6
- 0.5.8
- 0.5.7
- 0.5.6
- 0.5.5
- 0.5.4
- 0.5.3
- 0.5.2
- 0.5.1
- 0.5
- 0.4.14
- 0.4.13
- 0.4.12
- 0.4.11
- 0.4.10
- 0.4.9
- 0.4.8
- 0.4.7
- 0.4.6
- 0.4.5
- 0.4.4
- 0.4.3
- 0.4.2
- 0.4.1
- 0.4.0
- 0.3.0
- 0.2.5
- 0.2.4
- 0.2.3
- 0.2.2
- 0.2.1
- 0.2.0
- 0.1.1
- 0.1.0
- dev-pkgLbsWgt
- dev-patch-1
This package is auto-updated.
Last update: 2024-09-26 11:41:23 UTC
README
一个简单的工具,用于抓取DHL、DHL Express、GLS、UPS、FedEx、USPS、瑞士邮政服务以及奥地利邮政服务的包裹跟踪数据
一些包裹服务在注册商家或开发者账户时会让你感到非常困难。你真正想要的只是简单地跟踪一个包裹并关注其状态。是的,你可以不断刷新跟踪页面,但有时你还有更重要的事情要做。
因此,这里有一个可以自动执行此操作的工具,没有任何开发者账户和API的繁琐。它只是简单地抓取包含跟踪信息的网站,并将数据转换成人类和计算机都易于消费的格式。让我向您展示它是如何工作的!
安装
只需通过composer或将其添加到您的composer.json文件中拉取此包
$ composer require sauladam/shipment-tracker
别忘了运行
$ composer update
之后。
支持的承运商
以下承运商和语言目前由该包支持
- DHL (de, en)
- DHL Express (de, en)(目前仅适用于运单号,不适用于单个件货的运单号)
- GLS (de, en)
- UPS (de, en)
- Fedex (en)(感谢 @avrahamappel)
- USPS (en)
- PostCH (瑞士邮政服务) (de, en)
- PostAT (奥地利邮政服务) (de, en)
基本用法
require_once 'vendor/autoload.php'; use Sauladam\ShipmentTracker\ShipmentTracker; $dhlTracker = ShipmentTracker::get('DHL'); /* track with the standard settings */ $track = $dhlTracker->track('00340434127681930812'); // scrapes from http://nolp.dhl.de/nextt-online-public/set_identcodes.do?lang=de&idc=00340434127681930812 /* override the standard language */ $track = $dhlTracker->track('00340434127681930812', 'en'); // scrapes from http://nolp.dhl.de/nextt-online-public/set_identcodes.do?lang=en&idc=00340434127681930812 /* pass additional params to the URL (or override the default ones) */ $track = $dhlTracker->track('00340434127681930812', 'en', ['zip' => '12345']); // scrapes from http://nolp.dhl.de/nextt-online-public/set_identcodes.do?lang=en&idc=00340434127681930812&zip=12345
就是这样。让我们检查这个包裹是否已送达
if($track->delivered()) { echo "Delivered to " . $track->getRecipient(); } else { echo "Not delivered yet, The current status is " . $track->currentStatus(); }
可能的状态有
Track::STATUS_IN_TRANSITTrack::STATUS_DELIVEREDTrack::STATUS_PICKUPTrack::STATUS_EXCEPTIONTrack::STATUS_WARNINGTrack::STATUS_UNKNOWN
那么现在它在哪里?它发生了什么?
$latestEvent = $track->latestEvent(); echo "The parcel was last seen in " . $latestEvent->getLocation() . " on " . $latestEvent->getDate()->format('Y-m-d'); echo "What they did: " . $latestEvent->description(); echo "The status was " . $latestEvent->getStatus();
您可以使用$track->events()获取整个事件历史记录的数组。事件按日期降序排序。日期是一个 Carbon 对象。
还有其他什么吗?
你只是想构建跟踪网站的URL?没问题
$url = $dhlTracker->trackingUrl('00340434127681930812'); // http://nolp.dhl.de/nextt-online-public/set_identcodes.do?lang=de&idc=00340434127681930812
哦,你需要链接到英文版本?当然可以
$url = $dhlTracker->trackingUrl('00340434127681930812', 'en'); // http://nolp.dhl.de/nextt-online-public/set_identcodes.do?lang=en&idc=00340434127681930812
“但是,如果需要带有附加参数的URL怎么办?” - 好吧,只需传递它们即可
$url = $dhlTracker->trackingUrl('00340434127681930812', 'en', ['zip' => '12345']); // http://nolp.dhl.de/nextt-online-public/set_identcodes.do?lang=en&idc=00340434127681930812&zip=12345
其他功能
附加详细信息
跟踪和事件都可以包含附加详细信息,例如通过$track->getAdditionalDetails('foo')访问。目前,这仅适用于GLS和UPS
-
GLS
$track->getAdditionalDetails('parcelShop')获取包裹店详细信息以及包裹投递到那里时的营业时间
-
UPS
$track->getAdditionalDetails('accessPoint')获取如果包裹投递到某个地点,则该地点的地址$track->getAdditionalDetails('pickupDueDate')获取作为Carbon实例的取件截止日期
-
DHL Express (运单)
$track->getAdditionalDetails('pieces')获取属于此托运的个别件货的跟踪号码$event->getAdditionalDetails('pieces')获取此事件适用的个别件货的跟踪号码
-
FedEx
$track->getAdditionalDetails('totalKgsWgt')如果退货,则获取以kg为单位的托运重量$track->getAdditionalDetails('totalLbsWgt')如果退货,则获取以磅为单位的托运重量
数据提供者
默认情况下,此包使用 Guzzle 以及 PHP Http 客户端(即 file_get_contents())来获取数据。如果您需要,可以传递自己的提供者,例如,如果您在缓存中某处有页面内容。只需确保它实现了 Sauladam\ShipmentTracker\DataProviders\DataProviderInterface,该接口只需要一个 get() 方法。
然后,您只需将其传递给工厂:$dhlTracker = ShipmentTracker::get('DHL', new CacheDataProvider);
如果您传递了数据提供者,它将默认使用,但您稍后如果想也可以将其替换掉。
$dhlTracker->useDataProvider('guzzle');
目前可用的提供者包括
- guzzle
- php
- 自定义(指您传递的提供者)
注意
请记住,这只是一个让您生活更轻松的工具。我不建议在关键环境中使用它,因为由于它的工作方式,一旦数据提取来源的跟踪网站更改了结构或重命名/改述了事件描述,它就可能崩溃。所以请自行承担风险!
此外,总有可能无法解决状态,因为此包不知道事件描述,即使最常见的活动也应该可以正确解决。
此外,跟踪数据,因此此包提供的数据,是承运人的财产(我想),所以您绝对不应该将其用于商业用途(如出售或集成到商业服务中)。它仅供个人使用。