Php 获取DHL跟踪状态

Php 获取DHL跟踪状态,php,tracking,shipping,dhl,Php,Tracking,Shipping,Dhl,请帮助我找出我应该使用什么PHP API或PHP脚本从DHL获取装运状态,只有物流公司提供的DHL跟踪代码,物流公司通过电子商务网站完成订单的装运。我的任务是创建一个PHP CronJob代码,该代码将检查并注册DHL Tracking Shipping的状态,以便在后端报告中使用它们 如果有任何建议能帮助我找到正确的方向,我将不胜感激。我仍在寻找正确的方法来完成我的任务。到目前为止,考虑到只有可用的跟踪号码,我认为除了解析DHL跟踪网页之外,没有其他方法,这似乎不足以将它们用于某些API。DH

请帮助我找出我应该使用什么PHP API或PHP脚本从DHL
获取装运状态
,只有物流公司提供的
DHL跟踪代码
,物流公司通过电子商务网站完成订单的装运。我的任务是创建一个PHP CronJob代码,该代码将检查并注册DHL Tracking Shipping的状态,以便在后端报告中使用它们


如果有任何建议能帮助我找到正确的方向,我将不胜感激。

我仍在寻找正确的方法来完成我的任务。到目前为止,考虑到只有可用的跟踪号码,我认为除了解析DHL跟踪网页之外,没有其他方法,这似乎不足以将它们用于某些API。DHL API需要登录凭据、密钥等。。。然而,我当前的解析代码可能对寻找类似解决方案的人有用。只需包含您的跟踪代码,并在本地主机或甚至在以下主机上运行代码:

$tracking_array=array('000000000000','1111111');//跟踪码
函数create_track_url($track)
{
$separator='%2C+';
$count=计数($track);
$url='';
如果($count<2&$count>0){
$url=$track[0];
}否则,如果($count>1){
foreach($k=>v)
{
$sep=($count-2);
如果($k>$sep){
$separator='';
}
$url.=$v.$分隔符;
}
}
返回$url;
}
//加载html
$dom=新的DOMDocument();
$html=$dom->loadHTMLFile(“https://nolp.dhl.de/nextt-online-public/en/search?piececode=“.create_track_url($tracking_array));
//丢弃空白
$dom->preserveWhiteSpace=false;
//通过其标记名创建表
$xpath=newdomxpath($dom);
$expression='.//h2[包含(@class,“面板标题”)];
$track_codes=array();
foreach($xpath->evaluate($expression)作为$div){
$track_code[]=preg_replace('/[^0-9]/','$div->nodeValue);
}
$tables=$dom->getElementsByTagName('table');
$table=array();
foreach($key=>$val的轨道\代码)
{
//从表中获取所有行
$rows=$tables->item($key)->getElementsByTagName('tr');
//按标记名获取每个列
$cols=$rows->item($key)->getElementsByTagName('th');
$row_headers=NULL;
foreach($cols作为$node){
//打印$node->nodeValue。“\n”;
$row_headers[]=$node->nodeValue;
}  
//从表中获取所有行
$rows=$tables->item(0)->getElementsByTagName('tr');
foreach($行作为$行)
{   
//按标记名获取每个列
$cols=$row->getElementsByTagName('td');
$row=array();
$i=0;
foreach($cols作为$node){
#代码。。。
//打印$node->nodeValue。“\n”;
if($row\u headers==NULL)
$row[]=$node->nodeValue;
其他的
$row[$row\U头文件[$i]=$node->nodeValue;
$i++;
}   
$table[$val][]=$row;
}
}   
打印“”;
打印(表格);

谢谢你的建议亲爱的@AhmedGinani:我已经分析了剧本。PHP代码似乎需要DHL Airbil编号,这与DHL跟踪代码有所不同。Airbill编号-长度为10个字符的编号;跟踪代码-长度为12个字符的数字;您是否找到了从DHL获取跟踪详细信息的解决方案?如果你们能分享我在上面分享的例子,根据我的需要定制,这将非常有帮助。因此,我创建了一个每天运行几次的脚本:首先,它检查所有尚未完成的发货,其次更新最近的更改,然后如果客户在24小时内没有收到订单,则:1)通知销售部门;自动向客户发送电子邮件,通知他们提货。是的,这大大减少了DHL的高额回报。
$tracking_array=Array('000000000000', '1111111111111'); // Tracking Codes

function create_track_url($track)
{
    $separator = '%2C+';
    $count = count($track);
    $url = '';
    if ($count < 2 && $count > 0){
       $url =  $track[0];
    }else if ($count >1){
        foreach ($track as $k => $v)
        {
          $sep = ($count-2);
            if ($k > $sep){
                $separator ='';
            }
          $url .=  $v.$separator;
        }
    }


   return $url; 
}
//load the html  
$dom = new DOMDocument(); 
$html = $dom->loadHTMLFile("https://nolp.dhl.de/nextt-online-public/en/search?piececode=".create_track_url($tracking_array));  

  //discard white space   
$dom->preserveWhiteSpace = false;  
  //the table by its tag name  


$xpath = new DOMXpath($dom);

$expression = './/h2[contains(@class, "panel-title")]';

$track_codes =array();
foreach ($xpath->evaluate($expression) as $div) {
  $track_codes[]= preg_replace( '/[^0-9]/', '', $div->nodeValue );
}

$tables = $dom->getElementsByTagName('table'); 
$table = array();
foreach($track_codes as $key => $val)

{
    //get all rows from the table  
$rows = $tables->item($key)->getElementsByTagName('tr');   
  // get each column by tag name  
$cols = $rows->item($key)->getElementsByTagName('th');   
$row_headers = NULL;
foreach ($cols as $node) {
    //print $node->nodeValue."\n";   
    $row_headers[] = $node->nodeValue;
}  

  //get all rows from the table  
$rows = $tables->item(0)->getElementsByTagName('tr');   
foreach ($rows as $row)   
{   
   // get each column by tag name  
    $cols = $row->getElementsByTagName('td');   
    $row = array();
    $i=0;
    foreach ($cols as $node) {
        # code...
        //print $node->nodeValue."\n";   
        if($row_headers==NULL)
            $row[] = $node->nodeValue;
        else
            $row[$row_headers[$i]] = $node->nodeValue;
        $i++;
    }   
    $table[$val][] = $row;
}
}   
print '<pre>';
print_r($table);