2017-06-07 8 views
0

DHLから入手するのにPHP APIまたはPHPスクリプトを使用する必要がありますか?the shipment statusesDHL Tracking Codesは、電子商取引Webサイトからの注文を配送するロジスティック企業が提供しています。私の仕事は、バックエンドレポートでそれらを使用するためのDHL追跡出荷のステータスをチェックして登録するPHP CronJobコードを作成することです。DHLトラッキングステータスを取得

正しい方向性を見つけるのに役立つ提案をいただければ幸いです。

+0

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

+0

が提案親愛なる@AhmedGinaniをありがとう:私はそのスクリプトを分析しました。 PHPコードでは、DHL追跡コードとは異なるDHLエアロビル番号が必要です。 エアービル番号 - 10文字の長さ。 トラッキングコード - 12文字の長さ。 –

答えて

0

私はまだ自分の仕事を達成するための正しい方法を探しています。だから、DHLトラッキングWebページを解析する以外の方法は見当たりません。トラッキング番号のみを利用できると考えています。これは、一部の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);