2017-06-07 71 views
0

请帮我弄清楚我应该用什么PHP API或PHP脚本从DHL the shipment statuses获得,它只有物流公司提供的DHL Tracking Codes,这些物流公司提供电子商务网站的订单运输服务。我的任务是创建一个PHP CronJob代码,该代码将检查并注册DHL Tracking Shipping的状态,以便在后端报告中使用它们。获取DHL跟踪状态

我非常感谢任何可能帮助我找到正确方向的建议。

+0

https://github.com/jklz/DHL-API-Tracking-PHP –

+0

谢谢你的建议亲爱的@AhmedGinani:我分析了这个脚本。看起来PHP代码要求DHL安全号码与DHL跟踪代码有所不同。 Airbill Number - 10个字符的长度编号; 追踪代码 - 12个字符的长度数字; –

回答

0

我仍在寻找找到正确的方式来完成我的任务。所以,我认为除了解析DHL跟踪网页外,没有其他方法考虑只有跟踪编号可用,它似乎不足以将它们用于某些API。 DHL API需要登录凭证,密钥等......但是,我目前的解析代码可能对寻找类似解决方案的人有用。只需提供您的跟踪代码,并在您的本地主机或者甚至http://phpfiddle.org/运行代码:

$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);