InfoFrame: Digitaler Bilderrahmen (Anzeige von Anrufen, E-Mails, Termine, Wetter...)

grüss euch,

seit einiger zeit ärgere ich mich, das mein calendar auch nicht mehr ausgelesen wird, komischerweise das benzinplugin auch nicht mehr.
was ist da passiert? ich dachte zuerst es liegt an meinem qnap. eigentlich wollte ich seit gefühlten 2 monaten auf einen größeren umsteigen, jedoch meckert das system immer wieder mal woanders. ich bekomme meinen neuen 221 einfach nicht stabil installiert. und dann merke ich das hier im ippf ja noch meine alte emailadresse steht und ich deswegen wohl einiges verpasst hab
 
Hallo friday,

die unglaublich detaillierte Fehlerbeschreibung "geht nicht" macht es nicht sonderlich leicht Dir zu helfen aber ich wage mal eine Vermutung:
Das BenzinPlugin steht in Deiner Konfiguration vermutlich hinter dem CalendarPlugin und wird, da der Infoframe beim CalendarPlugin aussteigt, gar nicht ausgeführt.

und dann merke ich das hier im ippf ja noch meine alte emailadresse steht und ich deswegen wohl einiges verpasst hab
na dann hast Du ja noch eine Menge zu lesen ;)

Gruß, Michael...

P.S.
Man hat es Dir bestimmt schon einmal gesagt, aber schau trotzdem mal unter http://de.wikipedia.org/wiki/Umschalttaste
 
Zuletzt bearbeitet:
Danke!

Mit dem Tip
konnte ich was anfangen!

Nun habe ich eine Verbindung zu Google, zumindest werden mir Zugriffe auf die API gemeldet!

Als nächstes kommt jetzt noch die Fehlermeldung:

CalendarPlugin -> insertCalendarData: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 's Eve (Germany)',''), ('#fbe983','2014-12-24','2014-12-25','Christmas Eve (Germa' at line 1

Hab es jetzt doch noch geschafft!!!!!

Ich habe die Zeichenlänge der ID auf 100 in der SQL-Datenbank abgeändert!

So, nun fehlt mir nur das Benzin PlugIn, das will noch nicht!;)

Hannes

Hannes
 
Zuletzt bearbeitet:
Hallo friday,

welche QNAP FW Version hast Du drauf? Ich musste bei meinem QNAP erst noch ein Update auf die neue 4.1.1 machen, damit es ging.
Wegen dem Benzin Plugin hat marvin recht, versuche mal das Calendar Plugin in der Config.ini mit ";" auszukommentieren und schau ob es dann funktioniert.
 
hallo Thomas,

ja ohne Calendar geht es

meine Firmware ist noch 4.0.7, ich würde ja gerne updaten bzw. umziehen auf meinen kürzlich erworbenen 221, jedoch macht der nur probleme.
ich hatte auf dem neuen schon die 4.1.0 drauf, dann mit großen Schwierigkeiten die 4.1.1 betairgendwas, dann 4.1.1 b1003 und dann wieder 4.0.7 weil die noch am stabilsten war was die Erreichbarkeit und das Handling betrifft. seit Gestern mal wieder probiert die 4.1.1 b1101, aber nur immer ganz komische probleme. Firmware auf dem neuen ist drauf, aber der 221 ist total träge und teilweise garnicht erreichbar.

ich bin drauf und dran den wieder zu verkaufen, denn irgend etwas stimmt mit dem nicht.
 
Hallo friday,

wenn Du möchtest könnte ich mal per Team Viewer auf deinen QNAP draufschauen und es mit Dir nochmal einrichten. Gerne auch den 221. Zumindest probieren. Ich habe grad die 4.1.1 drauf. Bis auf den Anti Virus der Grotten langsam ist, geht die Firmware. An die Version 3.8.x kommt die natürlich nicht ran^^
 
sehr gerne, denn ich will endlich mal wissen was mit dem los ist
 
Tach zusammen
Ich habe ein neues kleines Problem.
Mein PaketPlugin geht nicht mehr,bei der Eingabe kommt folgender Fehler:
Code:
Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in C:\xampp\htdocs\infoframe\plugins\tracking.php on line 64
Paket und trackingPlugin wurden nicht geändert.Im Infoframe steht immer Sendung nicht gefunden, obwohl ich sie schon bekommen habe.
Kann es sein das es an der neuen xampp Version liegt?? Gibt es dafür eine Lösung??

Volker
 
Die Meldung sagt dir eigentlich nur, dass in naher Zukunft die MySQL-Extension entfernt wird und Du stattdessen mysqli oder PDO verwenden sollst. Das ansich ist kein Fehler - es ist eine Warnung.

[EDIT]
und ja, es liegt an der neuen Version. Mit der neuen Version kam ein neues PHP und damit eine neue mysql-extension. Die ist deprecated...
[/EDIT]
 
Zuletzt bearbeitet:
Hallo Volker,

wie MaverrikTM bereits gesagt hat, eine Warnung, keine Fehlermeldung (ist doch ganz nett von PHP, denn jetzt wissen wir, dass wir uns mit der Portierung nach PDO beeilen sollten und werden nicht so überrascht, wie bei der Abschaltung der Google Calendar API v1).

Aber daran kann es nicht liegen, denn
  • alle anderen Plugins laufen auch noch mit der alten MySQL-Extension, die würden dann auch nicht mehr funktionieren.
  • die Fehlermeldung kommt von "tracking.php", nicht vom PaketPlugin.

Das Problem mit dem PaketPlugin ist, dass keine offizielle API genutzt wird, sondern der Output der Webpage ausgewertet wird. Wenn der Paketdienst meint, was an der Seite zu ändern steht das Script natürlich aufm Schlauch und funktioniert nicht mehr. Ich habe es aufgegeben das PaketPlugin aktuell zu halten :(

Welcher Teil funktioniert denn nicht, DHL, UPS ... ?

Gruß...
 
Zuletzt bearbeitet:
Guten Morgen zusammen
Danke euch Beiden für die Hilfe .
Also es betrifft aktuell DHL,das ging eigentlich immer.was schon länger nicht funktioniert ist Hermes,das ist aber nicht schlimm.
Liegt es denn an DHL?

Volker
 
Hi Volker,

habe gerade keine Paketnummer. beim nächsten DHL Paket schau ich mal rein.
Poste derweil mal Dein PaketPlugin.

Gruß, Michael...
 
Hallo Michael
Hier mein Paketplugin
PHP:
<?php
/***************************************************************************
 * InfoFrame (image generator for digital picture frames)
 * Copyright (C) 2009  Tobias Kolb
 * 
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see http://www.gnu.org/licenses/
 ***************************************************************************/

class PaketPlugin implements IPlugin
{
  private $dbconn = NULL;
	private $config = NULL;
	
	public function __construct($dbconn, $config) {
		$this->dbconn = $dbconn;
		$this->config = $config;		
	}
		
	
public function doUpdate() {
	// hole Dienstleister aus der Datenbank
	$query = "SELECT * FROM if_paket";
	$result = mysql_query($query, $this->dbconn)or die(mysql_error());
if (mysql_num_rows($result) == 0) return;
	 	while ($row = mysql_fetch_assoc($result)) {
	 		$id = $row['ID'];
	 		$trackingnumber = $row['paketnummer'];
	 		if ($row['dienst'] == 'DHL') {
	 			list($stat_txt, $datum, $bild, $id, $posi, $shedule) = $this->dhlTracking($trackingnumber, $id);
						
      } elseif($row['dienst'] == 'GLS') {
     		list($stat_txt, $datum, $bild, $id, $posi, $shedule) = $this->glsTracking($trackingnumber, $id);
    	
      } elseif($row['dienst'] == 'hermes') {
     		list($stat_txt, $datum, $bild, $id, $posi, $shedule) = $this->hermesTracking($trackingnumber, $id);
    	
      } elseif($row['dienst'] == 'UPS') {
     		list($stat_txt, $datum, $bild, $id, $posi, $shedule) = $this->upsTracking($trackingnumber, $id);
     	
      } elseif($row['dienst'] == 'DPD') {
     	  list($stat_txt, $datum, $bild, $id, $posi, $shedule) = $this->dpdTracking($trackingnumber, $id);
     
      } elseif($row['dienst'] == 'TNT') {
     	    return;
     
     }    
       $this->addPaket($stat_txt, $datum, $bild, $id, $posi, $shedule);    	
    }
    mysql_free_result($result);
  }	


public function doOutput($image, $style, $updateData, &$yoffset) {	
	 
    if ($updateData)
           	$this->doUpdate();

		$query = "SELECT * FROM `if_paket`";
		$result = mysql_query($query, $this->dbconn);
		if (mysql_num_rows($result) == 0) return;
		
		// define styles
		$opt_header = array(
			'width' => imagesx($image)-290,
			'line_height' => 18,
			'align' => ALIGN_LEFT
		);
		
		$opt_entry = array(
			'width' => imagesx($image)-290,
			'height' => 12,
			'line_height' => 12,
			'align' => ALIGN_LEFT,
			'word_wrap_hyphen' => '...',
			'aggressive_word_wrap' => TRUE,
		);
		
/********************************************* Roundboxtrans funktioniert, fuer upload daektiviert************************		
		$entrylimit = $this->config['max_displayed_trackings'];
    $db_zeilenc = mysql_num_rows($result);
  	$db_zeilen = $db_zeilenc;
  	if ($entrylimit < $db_zeilenc) $db_zeilen = $entrylimit+1;
 // 	if ($row['liefertermin']) $db_zeilen = $db_zeilen+1;
  	$ba = 8;
   	$ue_hoehe = 18;
   	$inhalt_hoehe = 18;
   if ( (mysql_num_rows($result) <= 2) && ($yoffset <= (imagesy($image)-60)) ) $inhalt_hoehe = 60;  
	  roundbox_trans($image, 0, 0, 0, 0, 0, 0, $ba, $db_zeilen, $ue_hoehe, $inhalt_hoehe, $yoffset);
******************************************************************************************************************************/
											
		// print header
		$text = 'Paketverfolgung';
		imagettftextboxopt($image, 18, 0, 40, $yoffset, $style['textcolor'], $style['font'], $text, $opt_header);
	  $icon = ImageCreateFromPNG ( 'resources/icons/tracking.png' );
		ImageCopy($image, $icon, 8, $yoffset-3, 0, 0, imagesx($icon), imagesy($icon));
		ImageDestroy($icon);
		$yoffset += 25;
								
	 // print entries
		$counter = 0;
    while ($row = mysql_fetch_assoc($result)) {
         $counter++;
         $rest = (mysql_num_rows($result) - $counter) + 1;
							if ( (($entrylimit) && ($counter > $entrylimit)) || (($yoffset >= (imagesy($image) - 25)) && ($rest > 1)) ) {
								  if ($rest > 1)
                    $text = "... $rest weitere Pakete";
                else
                    $text = "... $rest weiteres Paket";
                
								imagettftextboxopt($image, 12, 0, 30, $yoffset, $style['textcolor'], $style['fontb'], $text, $opt_entry);
								$yoffset += 15;
								break;
							}	
				if ($row['datum'] and $row['status'])	{	
					// print entry text
					$text = $row['datum'].'Uhr:  '.$row['status'];
					// dirty trick for replacing inch-symbol \xE2\x80\xB3 by nomal " (because not supported by imagettftext)
					$text = str_replace("\xE2\x80\xB3", "\"", $text);
				} else {
					$text = 'Sendung  "'.$row['paketnummer'].'"  nicht gefunden!';
				}	
	//*********************************große Symbole wenn weniger als 2 Trackings gleichzeitig und mehr als 60px Platz	*************	
				if ( ((mysql_num_rows($result) <= 2) && ($yoffset <= (imagesy($image)-60))) ) {
					$xoffset = 0;
					$bilder = explode('|', $row['bild']);	
					if ( ($row['dienst'] == "UPS") || ($row['dienst'] == "DPD") ){ 
									$bild = $bilder[$row['position']];
									$icon = ImageCreateFromPng($bild);
									ImageCopy($image, $icon, 45+$xoffset, $yoffset+5, 0, 0, imagesx($icon), imagesy($icon));
    							ImageDestroy($icon);						
						}else{					
							if (($row['dienst']) == "GLS") { 
          				$xoffset += 75; 				
							} elseif ( ($row['dienst'] == "DHL") || ($row['dienst'] == "hermes") ){ 
									$xoffset += 45;								
									for ($i=0; $i<=$row['position']; $i++) {										
										$bild = $bilder[$i];
										$icon = ImageCreateFromPng($bild);
										ImageCopy($image, $icon, 45+($xoffset*$i), $yoffset+5, 0, 0, imagesx($icon), imagesy($icon));
    								ImageDestroy($icon);
    							}
    						}
    					}							
					imagettftextboxopt($image, 11, 0, 43, $yoffset+45, $style['textcolor'], $style['fontb'], $text, $opt_entry);
					if ($row['liefertermin']) {
								$yoffset += 13;
								imagettftextboxopt($image, 11, 0, 43, $yoffset+45, $style['textcolor'], $style['fontb'], $row['liefertermin'], $opt_entry);
				 }
					$yoffset += 60;
  //*********************************************************************************************************************************************					
        } else {	
				$xoffset = 0;	
  // ***********************************icons nach dienstleister, wenn mehr als 3 pakete oder weniger als 60px platz ****************************
				if (($row['dienst']) == "DHL") {
             $icon = ImageCreateFromPNG('resources/icons/dhl_logo.png');
             $xoffset = 6;
           } elseif (($row['dienst']) == "GLS") {
             $icon = ImageCreateFromPNG('resources/icons/gls_logo.png');
           } elseif (($row['dienst']) == "UPS") {          	 
             $icon = ImageCreateFromPNG('resources/icons/ups_logo.png');
             $xoffset = -2;
           } elseif (($row['dienst']) == "DPD") {
             $icon = ImageCreateFromPNG('resources/icons/dpd_logo.png');
             $xoffset = 3;  
           } elseif (($row['dienst']) == "TNT") {
             $icon = ImageCreateFromPNG('resources/icons/tnt_logo.png');
             $xoffset = 12; 
           } elseif (($row['dienst']) == "hermes") {
             $icon = ImageCreateFromPNG('resources/icons/hermes_logo.png');
             $xoffset = 4;  
           } else {
           	 $icon = ImageCreateFromPNG('resources/icons/lieferung.png');
           } 
  //********************************************************************************************************************************************                                    
				ImageCopy($image, $icon, 23-$xoffset, $yoffset+0, 0, 0, imagesx($icon), imagesy($icon));
        ImageDestroy($icon);
				imagettftextboxopt($image, 11, 0, 55, $yoffset, $style['textcolor'], $style['font'], $text, $opt_entry);
				$yoffset += 18;
				}
	}
		$yoffset += 10;	
		
}

// eigentliche Tracking funtionen
	private function glsTracking($trackingnumber, $id) {
		$datum=$stat_txt=$bild=$posi=$shedule='';
		$bild_name = array('erfasst', 'Transport', 'Zustellung', 'zugestellt');
		$bild_nr = array('0', '1', '2', '3');
		$stat_bild = array(
									'erfasst' => array('Paket erfasst', 'Paket eingeliefert'),
 									'Transport' => array('Transport', 'Paket am Umschlagplatz', 'Paket im Zielland', 'Paket hat Deutschland verlassen', 'Paket in der Verzollung', 'Paket im Zieldepot'),
 									'Zustellung' => 'Paket in Zustellung', 
 									'zugestellt' => array("Paket zugestellt", 'Im PaketShop zugestellt', 'Zwischenlagerung im GLS-Depot', 'Zustellung nicht möglich')
 								  );
 		$url ='http://www.gls-germany.com/de/online/paketstatus_xml.php3?datatype=paketnr&filter=all&paketliste[0]='.$trackingnumber;
		$glsxml = file_get_contents($url);
		$glsxml = simplexml_load_string($glsxml);
		if(!empty($glsxml)) {
			$path = '/paketstatus/paketdaten';
				if (!$glsxml = $glsxml->xpath($path)) {
					return;
				} else {
						$stat_txt = $glsxml[0]->stat_txt;
						$stat_txt = $this->glsStatusReplace($stat_txt);
        		$datum = $glsxml[0]->ps_dat.' '.$glsxml[0]->ps_zeit;
						$posi = str_replace($bild_name, $bild_nr, recursive_array_search($stat_txt, $stat_bild));
 						for ($i=0; $i<=$posi; $i++) {
	 						$bild[$i] = 'resources/icons/gls_'.$bild_name[$i].'.png';
 							if ($i == '3') {
 									if ($stat_txt == 'Paket zugestellt') $bild[$i] = 'resources/icons/gls_zugestellt.png';								 
 									if (strpos($stat_txt, 'PaketShop') !== FALSE) $bild[$i] = 'resources/icons/gls_paketshop.png';
 									if (strpos($stat_txt, 'Zwischenlagerung') !== FALSE) $bild[$i] = 'resources/icons/gls_zwischenlagerung.png';
 									if (strpos($stat_txt, 'nicht') !== FALSE) $bild[$i] = 'resources/icons/gls_nicht.png'; 									 
 							}
     		   	}     		   					
 	 	 		}        		        		
    }
    return array($stat_txt, $datum, $bild, $id, $posi, $shedule);
 }	
 
	
	private function dhlTracking($trackingnumber, $id) {
   		$i=0; $datum=$stat_txt=$inhalt=$posi=$bild=$shedule='';
   		$trans = array('Die ' => '', 'wurde ' => '', 'zu dieser Sendung wurden vom Absender ' => '', 'an DHL ' => '');
			$stat_bild = array('übermittelt' => array('Auftragsdaten elektronisch übermittelt', 'Paket eingeliefert', 'Sendung vom Absender in der Filiale eingeliefert'),
									 			 'transport' => array('Sendung wird zum Ziel-Paketzentrum transportiert', 'Sendung im Start-Paketzentrum bearbeitet'),
									 			 'Paketzentrum' => array('Sendung im Ziel-Paketzentrum bearbeitet', 'Sendung wird zur Zustellbasis transportiert'),
									 			 'Zustellung' => array('Zustellung', 'Sendung in das Zustellfahrzeug geladen'),
									 			 'zugestellt' => 'Sendung erfolgreich zugestellt'
									 			);
   		$bild_name = array(0 => 'übermittelt', 1 => 'transport', 2 => 'Paketzentrum', 3 => 'Zustellung', 4 => 'zugestellt');
			$uri  = '/nextt-online-public/set_identcodes.do?lang=de&idc='.$trackingnumber;
			//header("Content-type: text/html");
			$sock = fsockopen("nolp.dhl.de", 80, $errno, $errstr, 5); // 80 = Port, 5 = Timeout
			if (!$sock) {
				return; 
			} else {
				fputs($sock, "GET ".$uri." HTTP/1.1\r\n");
				fputs($sock, "User-Agent: Mozilla/5.0 (X11; U; Linux i686; de-DE; rv:1.2.1) Gecko/20021204\r\n");
				fputs($sock, "Host: www.nolp.dhl.de\r\n");
				fputs($sock, "Connection: close\r\n\r\n");
				while(!feof($sock)) {					
					$zeile[$i++] = trim(fgets($sock));
				}
				fclose($sock);
			}

			for ($j=0; $j<$i; $j++) 
		      $inhalt .= strip_tags(trim($zeile[$j]));		 
			if ($inhalt) {
				preg_match('#Status vom [A-Za-z]{2}, (\d{2}\.\d{2}\.\d{4}\s\d{1,2}:\d{2}) Uhr(.*?)\.&nbsp;(N.chster Schritt(.*?)\.)?#iuS', $inhalt, $treffer);
    			$datum = $treffer[1];   
    			 if ( ($treffer[4]) and (strpos($treffer[4], 'Paketzentrum transportiert') !== FALSE) ) {
 	 					$stat_txt = strtr($treffer[4], $trans);
 	 				} else {	
					$stat_txt = strtr($treffer[2], $trans);
				}								
					$posi = array_search(recursive_array_search($stat_txt, $stat_bild), $bild_name);
						for ($i=0; $i<=$posi; $i++)
									$bild[$i] = 'resources/icons/dhl_'.$bild_name[$i].'.png'; 							  	 					  	 					 	 				  
 			}	else	{
					$stat_txt = 'Sendung nicht gefunden';
					$datum = date('d.m.Y H:m:s', time());
			}	 			
 	 			return array($stat_txt, $datum, $bild, $id, $posi);
 }
	
	
	private function upsTracking($trackingnumber, $id) {
			$i=0; $datum=$stat_txt=$posi=$bild=$content=$shedule='';
			$search = array('&nbsp;', 'On:', 'To:', 'at ', '. ', ' Pünktlich', ',');
			$replace = array('', '|', '|', '', '', '', ' ');
	 		$url = 'http://wwwapps.ups.com/ietracking/tracking.cgi?tracknum='.$trackingnumber.'&IATA=de&Lang=ger';
	 		$bild_name = array(0 => 'erfasst', 1 => 'Transport', 2 => 'Zustellung', 3 => 'zugestellt', 4 =>'fehler');
			$stat_bild = array(
									'erfasst' => array('Auftrag bearbeitet: Für UPS bereit', 'Scan in der Abholniederlassung'),
 									'Transport' => array('Paket wird transportiert', 'Zollabfertigung abgeschlossen', 'Zollabfertigung läuft', 'Umschlagplatz ausgang', 'Bestimmungsort-Scan'),
 									'Zustellung' => 'Paket in der Zustellung', 
 									'zugestellt' => array('Paket zugestellt', 'Im örtlichen Postamt', 'Abgabe in einem UPS Store', 'Für die Zustellung an das örtliche Postamt übergeben'),
 									'fehler' => array('Ausnahme: Aktion erforderlich', 'Ausnahme', 'Zustellung nicht möglich',  'Zurückgesendet an Absender', 'Zurück an den Absender', 'Sendungsinformationen storniert')
 								  );	 		
			$file = fopen ($url,"r");
			if (!$file) {
				return;// 
			} else {
				while (!feof($file)) {
					$zeile[$i++] = fgets($file);
				}
				fclose($file);
			}
			for ($j=0; $j<$i; $j++) {
		  $content .= trim($zeile[$j]);
		 }
			if ($content) {
				
				preg_match('#<td class="nowrap">(.*?)</td><td class="nowrap">(\d{2}/\d{2}/\d{4})</td><td class="nowrap">(\d{1,2}:\d{2}\s[A|P]\.M\.)</td><td>(.*?)</td>#', $content, $matches);
				preg_match('#Scheduled Delivery:</label></dt><dd>(.*?),(.*?)(\d{2}/\d{2}/\d{4}),(.*?)</dd>#', $content, $match);
				if ($match) {
						 $shedule_date = datumDeutsch($match[1]).'  '.strftime('%d.%m.%Y', strtotime($match[3]));						
					   $shedule = 'Voraussichtliche Lieferung:  '.$shedule_date;
					}				
					$ups_stat_txt = str_replace($search, $replace, $this->upsStatusReplace($matches[4]));					
					$datum = strftime('%d.%m.%Y - %H:%m', strtotime($matches[2].$matches[3]));
					$posi = array_search(recursive_array_search($ups_stat_txt, $stat_bild), $bild_name);
					$stat_txt = $matches[1].': '.$ups_stat_txt;
					for ($i=0; $i<=$posi; $i++)
	 									$bild[$i] = 'resources/icons/ups_'.$bild_name[$i].'.png';						
			}	else	{
					$stat_txt = 'Sendung nicht gefunden';
					$datum = date('d.m.Y H:m:s', time());			
			}				
				return array($stat_txt, $datum, $bild, $id, $posi, $shedule);	
		}
	
	private function dpdTracking($trackingnumber, $id) {
   		$i=0; $zeit=$status=$shedule=$posi=$bild=$inhalt='';
   		$trans = array('&nbsp;' => '', '&bull;' => '');
   		$bild_name = array(0 => 'Eingang', 1 => 'Transport', 2 => 'Auslieferung', 3 => 'zugestellt', 4 =>'fehler');
   		$stat_bild = array(
   								 'Eingang' => array('Einrollung', 'Erfasst'),
   								 'Transport' => array('Eingang', 'HUB-Durchlauf', 'In Verzollung', 'Konsolidierung'),
   								 'Auslieferung' => array('Lager', 'Ausrollung'),
   								 'zugestellt' => array('Zustellung', 'zugestellt'),
   								 'fehler' => array('Zustellversuch nicht erfolgreich', 'System-Retoure', 'Ausrollretoure')
   								 );
			$uri  = '/cgi-bin/delistrack?typ=1&lang=de&pknr='.$trackingnumber;
			$sock = fsockopen("extranet.dpd.de", 80, $errno, $errstr, 5); // 80 = Port, 5 = Timeout
			if (!$sock) {
				return;
			} else {
				fputs($sock, "GET ".$uri." HTTP/1.1\r\n");
				fputs($sock, "User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1) Gecko/20021204\r\n");
				fputs($sock, "Host: www.extranet.dpd.de\r\n");
				fputs($sock, "Connection: close\r\n\r\n");
				while(!feof($sock)) {					
					$zeile[$i++] = trim(fgets($sock));
				}
				fclose($sock);
			}
		for ($j=5; $j<$i; $j++) {
		$inhalt .= strip_tags(trim($zeile[$j]), '<td><b>'); 
	 }
	 if ($inhalt) {
			$inhalt = strtr($inhalt, $trans);
			preg_match_all('#(\d{2}\.\d{2}\.\d{4}\s\d{1,2}:\d{2})(.*?)</b>(.*?)</td><td style="padding-left: 10px;">(.*?)</td>#is', $inhalt, $matches);
			$last_matches = array_reverse_recursive($matches); 
			$dpd_stat_txt = $last_matches[0][0];
			if (strpos($last_matches[0][0], 'Zustellung') !== FALSE ){ 
					$last_matches[0][0] = str_replace('Zustellung', 'zugestellt',(substr($last_matches[0][0], 12)));
					$dpd_stat_txt = 'zugestellt';
			}
			$stat_txt = $last_matches[0][0].'  '.$last_matches[1][0];
			$datum = $last_matches[3][0];
			$posi = array_search(recursive_array_search($dpd_stat_txt, $stat_bild), $bild_name);
			for ($i=0; $i<=$posi; $i++)
	 		 					$bild[$i] = 'resources/icons/ups_'.$bild_name[$i].'.png';
	 		}	else {
					$stat_txt = 'Sendung nicht gefunden';
					$datum = date('d.m.Y H:m:s', time());			
			}			 			
		 				 
		 return array($stat_txt, $datum, $bild, $id, $posi, $shedule);
 }
 
	
 	private function hermesTracking($trackingnumber, $id) {
		$i=0; $inhalt=$bild=$posi=$shedule='';
		$trans = array('an die Hermes Logistik Gruppe' => '', 'Hermes' => '','Die' => '', 'Sendung wurde' =>'Sendung ', 'ist' => '', 'für den weiteren Transport' => '');
		$patterns = array('übermittelt', 'verlassen', 'übernommen', 'sortiert', 'eingetroffen', 'Zustellung', 'zugestellt'); 
								
 // aktuelle session id holen
 	 	$url = 'https://www.myhermes.de/wps/portal/paket/Home/privatkunden/sendungsverfolgung';
    	$ch = curl_init();
    	$options = array(CURLOPT_SSL_VERIFYPEER => TRUE, CURLOPT_HEADER => FALSE, CURLOPT_URL => $url, CURLOPT_SSLVERSION => 3, CURLOPT_RETURNTRANSFER => TRUE);
			curl_setopt_array($ch, $options);    
    	$result = curl_exec($ch);  
    	curl_close($ch);  
   		preg_match('#<form name="mhStatusForm" id="mhStatusForm" action="(.*?)" onsubmit=.*?>#i', $result, $matches);
 
 // mit aktueller session id  die trackingnummer abfragen  	 
   	$url = 'https://www.myhermes.de'.preg_replace('#<!.*>$#', '', $matches[1]).'?action=trace&shipmentID='.$trackingnumber.'&receiptID=';
   		$file = 'cache/hermes.txt';
			$handle = fopen($file, 'w+');
    	$ch = curl_init();
    	$options = array(CURLOPT_SSL_VERIFYPEER => TRUE, CURLOPT_URL => $url, CURLOPT_SSLVERSION => 3, CURLOPT_RETURNTRANSFER => TRUE, CURLOPT_FILE => $handle);
			curl_setopt_array($ch, $options);   
    	curl_exec($ch);   
			curl_close($ch); 
			rewind($handle);
			while(!feof($handle)) {
				$zeile[$i++] = trim(utf8_decode(fgets($handle)));
			}	
			fclose($handle);
			
			for ($j=0; $j<$i; $j++)  {
		      $inhalt .= strip_tags($zeile[$j], '<tbody>');
		    }
		  $inhalt = str_replace($trackingnumber, ' ', $inhalt);	
		  preg_match_all('#<tbody>(\d{2}\.\d{2}\.\d{4})(\d{2}:\d{2}:\d{2})(.+)</tbody>#', $inhalt, $matches);
		  $datum = $matches[1][0].'  '.$matches[2][0];
		  $stat_txt = strtr(substr($matches[3][0], 0 , strpos($matches[3][0], '.')), $trans);
			foreach ($patterns as $pattern) {	
			 	if(strpos($stat_txt, $pattern) !== FALSE){
			 		$posi = array_search($pattern, $patterns);
			 		for ($k=0; $k<=$posi; $k++)
						$bild[$k] = 'resources/icons/hermes_'.$patterns[$k].'.png'; 
					}
				}
					if ( ($posi >= 2) and ($posi <= 3) )
									unset($bild[1]);
					if ($posi >= 4)
									unset($bild[1], $bild[3]);
				$bild = array_values($bild);
				return array($stat_txt, $datum, $bild, $id, $posi, $shedule);
 }

	
// Ausgabe Bereinigung, falls zu unübersichtlich in der Trackingfunktion selber	
  private function glsStatusReplace($stat_txt) {
  $glsStatus = array('HSC: Abgabe Empfaenger', 'HSC: Rollkartenscannung', 'Eingang I-Punkt EPL', 'ZUP-Durchlauf NORMAL', 'Eingang APL I-Punkt', 'NIF-Eingang', 'NIF-Ausgang', 'Kunde nicht angetroffen',
  									 'PK im Verzollungsprozess', 'Paket im Lager', 'STAT_DEFAULT', 'Fix-Termin', 'Adresse falsch', 'RUP-Durchlauf'
  									 );
  $normalisiert = array('Paket zugestellt', 'Paket in Zustellung', 'Paket im Zieldepot', 'Paket am Umschlagplatz', 'Paket eingeliefert', 'Paket im Zielland', 'Paket hat Deutschland verlassen', 'Kunde nicht angetroffen',
  											'Paket in der Verzollung', 'Zwischenlagerung im GLS-Depot', 'Paket erfasst', 'Termin mit Kunden', 'Adresse falsch', 'Paket am Umschlagplatz'
  											);
	return str_replace($glsStatus, $normalisiert, $stat_txt);
 }
 
  private function upsStatusReplace($stat_txt){
	$englisch = array('Delivered', 'In Transit', 'Out For Delivery', 'Arrival Scan', 'At Local Post Office', 'Clearance Completed', 'Clearance in Progress', 'Departure Scan', 
										'Destination Scan', 'Dropped off at a UPS Retail Location', 'Exception: Action Required', 'Exception', 'Order Processed: Ready for UPS', 'Origin Scan',
										'Returned to Sender', 'Returning to Sender', 'Shipment Information Voided', 'Transferred to Local Post Office for Delivery', 'On Time'
										);
	$deutsch = array('Paket zugestellt', 'Paket wird transportiert', 'Paket in der Zustellung', 'Umschlagplatz eingang', 'Im örtlichen Postamt', 'Zollabfertigung abgeschlossen', 'Zollabfertigung läuft', 'Umschlagplatz ausgang', 
									 'Bestimmungsort-Scan', 'Abgabe in einem UPS Store', 'Ausnahme: Aktion erforderlich', 'Ausnahme', 'Auftrag bearbeitet: Für UPS bereit', 'Scan in der Abholniederlassung',
									 'Zurückgesendet an Absender', 'Zurück an den Absender', 'Sendungsinformationen storniert', 'Für die Zustellung an das örtliche Postamt übergeben', 'Pünktlich'
									 );
   	return str_replace($englisch, $deutsch, $stat_txt);
 }
 


// In die Datenbank schreiben
	private function addPaket($stat_txt, $datum, $bild, $id, $posi, $shedule) {	 				
 		$bild = implode('|',$bild);
		if ( (strpos($stat_txt, 'zugestellt') !== FALSE) and (time() - strtotime($datum) >= 36000) ) {
					$query = "DELETE FROM `if_paket` WHERE id='$id'";
			}else{ 		
 				$query = "UPDATE `if_paket` SET datum='".mysql_real_escape_string($datum)."', status='".mysql_real_escape_string($stat_txt)."', bild='".mysql_real_escape_string($bild)."', position='$posi', liefertermin='".mysql_real_escape_string($shedule)."' WHERE id='$id'";
			}
	   	mysql_query($query, $this->dbconn) or die ('PaketPlugin'.mysql_error());
 }

}



?>

Volker
 
Habe letzte Woche DHL und hermes Pakete bekommen.

Hier meine zwei Funktionen:
PHP:
 	private function hermesTracking($trackingnumber, $id) {
		$i=0; $inhalt=$bild=$posi=$shedule='';
		$trans = array('an die Hermes Logistik Gruppe' => '', 'Hermes' => '','Die' => '', 'Sendung wurde' =>'Sendung ', 'ist' => '', 'für den weiteren Transport' => '');
		$patterns = array('übermittelt', 'verlassen', 'übernommen', 'sortiert', 'eingetroffen', 'Zustellung', 'zugestellt'); 
								
 // aktuelle session id holen
 	 	$url = 'https://www.myhermes.de/wps/portal/paket/Home/privatkunden/sendungsverfolgung';
    	$ch = curl_init();
    	$options = array(CURLOPT_HEADER => FALSE, CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => TRUE);
			curl_setopt_array($ch, $options);    
    	$result = curl_exec($ch);  
    	curl_close($ch);  
   		preg_match('#<form name="mhStatusForm" id="mhStatusForm" action="(.*?)" onsubmit=.*?>#i', $result, $matches);
 
 // mit aktueller session id  die trackingnummer abfragen   	 
   	$url = 'https://www.myhermes.de'.preg_replace('#<!.*>$#', '', $matches[1]).'?action=trace&shipmentID='.$trackingnumber.'&receiptID=';
   	$i=0;
		  $xml = new DOMDocument();
		  $xml->loadHTMLFile($url, LIBXML_NOBLANKS);
		  $xpath = new DOMXPath($xml);

		  $table = $xpath->query('//*[@class="content_table table_shipmentDetails"]')->item(0)->childNodes->item(1)->firstChild;	
		//  var_dump($table);	  
		  if($table->hasChildNodes()){
		  	$datum = trim(preg_replace('#\s+#', ' ', $table->childNodes->item(0)->nodeValue.' '.$table->childNodes->item(2)->nodeValue));
		  	$stat_txt = trim(preg_replace('#\s+#', ' ', utf8_decode($table->childNodes->item(4)->nodeValue)));	 	
				$stat_txt = strtr($stat_txt, $trans);
	
			  if ($stat_txt == ' Sendung  auf Tour gegangen') $stat_txt = 'Sendung in Zustellung';
				foreach ($patterns as $pattern) {	
				 	if(strpos($stat_txt, $pattern) !== FALSE){
				 		$posi = array_search($pattern, $patterns);
				 		for ($k=0; $k<=$posi; $k++)
							$bild[$k] = 'resources/icons/hermes_'.$patterns[$k].'.png'; 
						}
					}
						if ( ($posi >= 2) AND ($posi <= 3) )
										unset($bild[1]);
						if ($posi >= 4)
										unset($bild[1], $bild[3]);
					$bild = array_values($bild);
			}	else	{
					$stat_txt = 'Sendung nicht gefunden';
					$datum = date('d.m.Y H:m:s', time());
			}
			return array($stat_txt, $datum, $bild, $id, $posi);
 }

	private function dhlTracking($trackingnumber, $id) {
   		$i=0; $datum=$stat_txt=$inhalt=$posi=$bild=$shedule='';
   		$i=0; $datum=$stat_txt=$inhalt=$posi=$bild=$shedule='';
   		$trans = array('Die ' => '', 'wurde ' => '', 'zu dieser Sendung wurden vom Absender ' => '', 'an DHL ' => '', 'im Zustell-Depot ' => '');
			$stat_bild = array('eingeliefert' => array('Auftragsdaten elektronisch übermittelt', 'Paket eingeliefert', 'Sendung vom Absender in der Filiale eingeliefert'),
									 			 'transport' => array('Sendung wird zum Paketzentrum transportiert', 'Sendung wird zum Ziel-Paketzentrum transportiert', 'Sendung im Start-Paketzentrum bearbeitet', 'Auslands-Sendung im Start-Paketzentrum bearbeitet', 'Auslands-Sendung wird zum Export-Paketzentrum transportiert',
									 			 											'Auslandssendung im Export-Paketzentrum bearbeitet'),
									 			 'Paketzentrum' => array('Sendung im Ziel-Paketzentrum bearbeitet', 'Sendung im Paketzentrum bearbeitet', 'Sendung wird zur Zustellbasis transportiert', 'Auslands-Sendung wird für den Transport ins Zielland vorbereitet',
									 			 												 'Sendung ist im Zielland eingetroffen', 'Sendung hat das Import-Paketzentrum im Zielland verlassen'),
									 			 'Zustellung' => array('Zustellung', 'Sendung in das Zustellfahrzeug geladen', 'Sendung wird für die Zustellung vorbereitet', 'Sendung konnte nicht zugestellt werden, da der Empfänger nicht angetroffen wurde, und wird gelagert. Der Empfänger benachrichtigt'),
									 			 'zugestellt' => 'Sendung erfolgreich zugestellt'
									 			);
   		$bild_name = array(0 => 'eingeliefert', 1 => 'transport', 2 => 'Paketzentrum', 3 => 'Zustellung', 4 => 'zugestellt');	
			$url = 'http://nolp.dhl.de/nextt-online-public/set_identcodes.do?lang=de&idc='.$trackingnumber;
		  $xml = new DOMDocument();
		  $xml->loadHTMLFile($url);
		  $xpath = new DOMXPath($xml);			  
		  foreach($xpath->query('//*[@class="mm_bold text-right"]') as $div) {
		  	$datum = $this->after(', ', $div->nodeValue);
		  	if ($datum) {
		    	$stat_txt = trim(str_replace('.','',($xpath->query('//*[@class="mm_delivered"]')->item(0)->nodeValue)));
		    	//echo "Text: ".$datum. " - ".$stat_txt.PHP_EOL;

		    	if ( ($stat_txt) AND (strpos($stat_txt, 'Paketzentrum transportiert') !== FALSE) AND (strpos($stat_txt, 'Start-Paketzentrum bearbeitet') !== FALSE) ) {
		 	 				$stat_txt = strtr($stat_txt, $trans);
		 	 		} else {	
							$stat_txt = strtr($stat_txt, $trans);
					}								
					$posi = array_search(recursive_array_search($stat_txt, $stat_bild), $bild_name);
						for ($i=0; $i<=$posi; $i++) {
									if ( ($i==0) AND (strpos($stat_txt, 'übermittelt') !== FALSE) ) {
										$bild[$i] = 'resources/icons/dhl_übermittelt.png';
									}elseif ( ($i>=1) AND ((strpos($stat_txt, 'Auslandssendung') !== FALSE) OR (strpos($stat_txt, 'Zielland') !== FALSE)) ) {
										$bild[$i] = 'resources/icons/dhl_ausland_'.$bild_name[$i].'.png';
									}else {
										$bild[$i] = 'resources/icons/dhl_'.$bild_name[$i].'.png';
									}
								}
					return array($stat_txt, $datum, $bild, $id, $posi);														  	 					  	 					 	 				  
		 		}	else	{
						$stat_txt = 'Sendung nicht gefunden';
						$datum = date('d.m.Y H:m:s', time());
				}
			}	 			
			return array($stat_txt, $datum, $bild, $id, $posi);
	}
 
@Spoon3er
PHP:
$datum = $this->after(', ', $div->nodeValue);
wie sieht Deine Funktion after aus?
 
So ich habe jetzt Spoo3ner's DHL Teil bei mir ersetzt, aber es bleibt leider bei "Sendung nicht gefunden".
Ich werde es später nochmal mit meiner alten xampp Version testen.Melde mich dann nochmal.

Volker
 
Hier die "after" function
PHP:
 private function after($needle, $inthat){
        if (!is_bool(strpos($inthat, $needle)))
        return substr($inthat, strpos($inthat,$needle)+strlen($needle));
 }
hier meine arbeitsdatei:
PHP:
<?php
$trackingnumber_dhl = '';
$trackingnumber_hermes = '';
$trackingnumber_dpd = '';


function dhlTracking($trackingnumber, $id) {
   		$i=0; $datum=$stat_txt=$inhalt=$posi=$bild=$shedule='';
   		$trans = array('Die ' => '', 'wurde ' => '', 'zu dieser Sendung wurden vom Absender ' => '', 'an DHL ' => '', 'im Zustell-Depot ' => '');
			$stat_bild = array('eingeliefert' => array('Auftragsdaten elektronisch übermittelt', 'Paket eingeliefert', 'Sendung vom Absender in der Filiale eingeliefert'),
									 			 'transport' => array('Sendung wird zum Paketzentrum transportiert', 'Sendung wird zum Ziel-Paketzentrum transportiert', 'Sendung im Start-Paketzentrum bearbeitet', 'Auslands-Sendung im Start-Paketzentrum bearbeitet', 'Auslands-Sendung wird zum Export-Paketzentrum transportiert',
									 			 											'Auslandssendung im Export-Paketzentrum bearbeitet'),
									 			 'Paketzentrum' => array('Sendung im Ziel-Paketzentrum bearbeitet', 'Sendung im Paketzentrum bearbeitet', 'Sendung wird zur Zustellbasis transportiert', 'Auslands-Sendung wird für den Transport ins Zielland vorbereitet',
									 			 												 'Sendung ist im Zielland eingetroffen', 'Sendung hat das Import-Paketzentrum im Zielland verlassen'),
									 			 'Zustellung' => array('Zustellung', 'Sendung in das Zustellfahrzeug geladen', 'Sendung wird für die Zustellung vorbereitet', 'Sendung konnte nicht zugestellt werden, da der Empfänger nicht angetroffen wurde, und wird gelagert. Der Empfänger benachrichtigt'),
									 			 'zugestellt' => 'Sendung erfolgreich zugestellt'
									 			);
   		$bild_name = array(0 => 'eingeliefert', 1 => 'transport', 2 => 'Paketzentrum', 3 => 'Zustellung', 4 => 'zugestellt');
			$uri  = '/nextt-online-public/set_identcodes.do?lang=de&idc='.$trackingnumber;
			//header("Content-type: text/html");
			$sock = fsockopen("nolp.dhl.de", 80, $errno, $errstr, 5); // 80 = Port, 5 = Timeout
			if (!$sock) {
				return; 
			} else {
				fputs($sock, "GET ".$uri." HTTP/1.1\r\n");
				fputs($sock, "Accept-Language: de\r\n");
				fputs($sock, "Host: www.nolp.dhl.de\r\n");
				fputs($sock, "Connection: close\r\n\r\n");
				while(!feof($sock)) {					
					$zeile[$i++] = trim(fgets($sock));
				}
				fclose($sock);
			}

			for ($j=0; $j<$i; $j++) 
		      $inhalt .= $zeile[$j];		 
			if ($inhalt) {
				preg_match('#Status vom [A-Za-z]{2,3}, (\d{2}\.\d{2}\.\d{4}\s\d{1,2}:\d{2})(.*?)\.&nbsp;(N.chster Schritt(.*?)\.)?.+Detaillierter Verlauf Ihrer SendungDatum/UhrzeitOrt.+(\d{2}\.\d{2}\.\d{4}\s\d{1,2}:\d{2}) Uhr(.*?)\..+zur.ck#iuS', $inhalt, $treffer);
				//preg_match('#Statusvom [A-Za-z]{2,3}, (\d{2}\.\d{2}\.\d{4}\s\d{1,2}:\d{2})(.*?)\.&nbsp;(N.chster Schritt(.*?)\.)?#iuS', $inhalt, $treffer);
				var_dump($inhalt);
    			$datum = $treffer[1];   
    			 if ( ($treffer[4]) AND (strpos($treffer[4], 'Paketzentrum transportiert') !== FALSE) AND (strpos($treffer[0], 'Start-Paketzentrum bearbeitet') !== FALSE) ) {
 	 					$stat_txt = strtr($treffer[4], $trans);
 	 				} else {	
					$stat_txt = strtr($treffer[2], $trans);
					}								
					$posi = array_search(recursive_array_search($stat_txt, $stat_bild), $bild_name);
						for ($i=0; $i<=$posi; $i++) {
									if ( ($i==0) AND (strpos($treffer[2], 'übermittelt') !== FALSE) ) {
										$bild[$i] = 'resources/icons/dhl_übermittelt.png';
									}elseif ( ($i>=1) AND ((strpos($stat_txt, 'Auslandssendung') !== FALSE) OR (strpos($stat_txt, 'Zielland') !== FALSE)) ) {
										$bild[$i] = 'resources/icons/dhl_ausland_'.$bild_name[$i].'.png';
									}else {
										$bild[$i] = 'resources/icons/dhl_'.$bild_name[$i].'.png';
									}
								}
																	  	 					  	 					 	 				  
 			}	else	{
					$stat_txt = 'Sendung nicht gefunden';
					$datum = date('d.m.Y H:m:s', time());
			}	 			
 	 			return array($stat_txt, $datum, $bild, $id, $posi);
 } 		
//print_r(dhlTracking($trackingnumber_dhl,0));


function dhl_Tracking_DOM($trackingnumber, $id) {
   		$i=0; $datum=$stat_txt=$inhalt=$posi=$bild=$shedule='';
   		$trans = array('Die ' => '', 'wurde ' => '', 'zu dieser Sendung wurden vom Absender ' => '', 'an DHL ' => '', 'im Zustell-Depot ' => '');
			$stat_bild = array('eingeliefert' => array('Auftragsdaten elektronisch übermittelt', 'Paket eingeliefert', 'Sendung vom Absender in der Filiale eingeliefert'),
									 			 'transport' => array('Sendung wird zum Paketzentrum transportiert', 'Sendung wird zum Ziel-Paketzentrum transportiert', 'Sendung im Start-Paketzentrum bearbeitet', 'Auslands-Sendung im Start-Paketzentrum bearbeitet', 'Auslands-Sendung wird zum Export-Paketzentrum transportiert',
									 			 											'Auslandssendung im Export-Paketzentrum bearbeitet'),
									 			 'Paketzentrum' => array('Sendung im Ziel-Paketzentrum bearbeitet', 'Sendung im Paketzentrum bearbeitet', 'Sendung wird zur Zustellbasis transportiert', 'Auslands-Sendung wird für den Transport ins Zielland vorbereitet',
									 			 												 'Sendung ist im Zielland eingetroffen', 'Sendung hat das Import-Paketzentrum im Zielland verlassen'),
									 			 'Zustellung' => array('Zustellung', 'Sendung in das Zustellfahrzeug geladen', 'Sendung wird für die Zustellung vorbereitet', 'Sendung konnte nicht zugestellt werden, da der Empfänger nicht angetroffen wurde, und wird gelagert. Der Empfänger benachrichtigt'),
									 			 'zugestellt' => 'Sendung erfolgreich zugestellt'
									 			);
   		$bild_name = array(0 => 'eingeliefert', 1 => 'transport', 2 => 'Paketzentrum', 3 => 'Zustellung', 4 => 'zugestellt');	
			$url = 'http://nolp.dhl.de/nextt-online-public/set_identcodes.do?lang=de&idc='.$trackingnumber;
		  $xml = new DOMDocument();
		  $xml->loadHTMLFile($url);
		  $xpath = new DOMXPath($xml);			  
		  foreach($xpath->query('//*[@class="mm_bold text-right"]') as $div) {
		  	$datum = after(', ', $div->nodeValue);
		  	if ($datum) {
		    	$stat_txt = trim(str_replace('.','',($xpath->query('//*[@class="mm_delivered"]')->item(0)->nodeValue)));
		    	//echo "Text: ".$datum. " - ".$stat_txt.PHP_EOL;

		 	 		$stat_txt = strtr($stat_txt, $trans);						
					$posi = array_search(recursive_array_search($stat_txt, $stat_bild), $bild_name);
						for ($i=0; $i<=$posi; $i++) {
									if ( ($i==0) AND (strpos($stat_txt, 'übermittelt') !== FALSE) ) {
										$bild[$i] = 'resources/icons/dhl_übermittelt.png';
									}elseif ( ($i>=1) AND ((strpos($stat_txt, 'Auslandssendung') !== FALSE) OR (strpos($stat_txt, 'Zielland') !== FALSE)) ) {
										$bild[$i] = 'resources/icons/dhl_ausland_'.$bild_name[$i].'.png';
									}else {
										$bild[$i] = 'resources/icons/dhl_'.$bild_name[$i].'.png';
									}
								}
					return array($stat_txt, $datum, $bild, $id, $posi);														  	 					  	 					 	 				  
		 		}	else	{
						$stat_txt = 'Sendung nicht gefunden';
						$datum = date('d.m.Y H:m:s', time());
				}
			}	 			
			return array($stat_txt, $datum, $bild, $id, $posi);
}
//print_r(dhl_Tracking_DOM($trackingnumber_dhl, 0));



	function hermesTracking($trackingnumber, $id) {
		$i=0; $inhalt=$bild=$posi=$shedule='';
		$trans = array('an die Hermes Logistik Gruppe' => '', 'Hermes' => '','Die' => '', 'Sendung wurde' =>'Sendung ', 'ist' => '', 'für den weiteren Transport' => '');
		$patterns = array('übermittelt', 'verlassen', 'übernommen', 'sortiert', 'eingetroffen', 'Zustellung', 'zugestellt'); 
								
 // aktuelle session id holen
 	 	$url = 'https://www.myhermes.de/wps/portal/paket/Home/privatkunden/sendungsverfolgung';
    	$ch = curl_init();
    	$options = array(CURLOPT_HEADER => FALSE, CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => TRUE);
			curl_setopt_array($ch, $options);    
    	$result = curl_exec($ch);  
    	curl_close($ch);  
   		preg_match('#<form name="mhStatusForm" id="mhStatusForm" action="(.*?)" onsubmit=.*?>#i', $result, $matches);
   		echo preg_replace('#<!.*>$#', '', $matches[1]).PHP_EOL;
 
 // mit aktueller session id  die trackingnummer abfragen
   	 
   	$url = 'https://www.myhermes.de'.preg_replace('#<!.*>$#', '', $matches[1]).'?action=trace&shipmentID='.$trackingnumber.'&receiptID=';
   	
   		$file = 'hermes.txt';
			$handle = fopen($file, 'w+');
    	$ch = curl_init();
    	$options = array(CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => TRUE, CURLOPT_FILE => $handle);
			curl_setopt_array($ch, $options);   
    	curl_exec($ch);   
			curl_close($ch); 
			rewind($handle);
			while(!feof($handle)) {
				$zeile[$i++] = trim(fgets($handle));
			}	
			fclose($handle);
			
			for ($j=0; $j<$i; $j++)  {
		      $inhalt .= strip_tags($zeile[$j], '<tbody>');
		    }
		    echo $inhalt;
		  $inhalt = str_replace($trackingnumber, ' ', $inhalt);	
		  preg_match_all('#<tbody>(\d{2}\.\d{2}\.\d{4})(\d{2}:\d{2}:\d{2})(.+)</tbody>#', $inhalt, $matches);
		  $datum = $matches[1][0].'  '.$matches[2][0];
		  $stat_txt = strtr(substr($matches[3][0], 0 , strpos($matches[3][0], '.')), $trans);
		  if ($stat_txt == ' Sendung  auf Tour gegangen') $stat_txt = 'Sendung in Zustellung';
			foreach ($patterns as $pattern) {	
			 	if(strpos($stat_txt, $pattern) !== FALSE){
			 		$posi = array_search($pattern, $patterns);
			 		for ($k=0; $k<=$posi; $k++)
						$bild[$k] = 'resources/icons/hermes_'.$patterns[$k].'.png'; 
					}
				}
					if ( ($posi >= 2) AND ($posi <= 3) )
									unset($bild[1]);
					if ($posi >= 4)
									unset($bild[1], $bild[3]);
				$bild = array_values($bild);
				return array($stat_txt, $datum, $bild, $id, $posi, $shedule);
 }
 //print_r(hermesTracking($trackingnumber_hermes, 0));


	function hermesTrackingDOM($trackingnumber, $id) {
		$i=0; $inhalt=$bild=$posi=$shedule='';
		$trans = array('an die Hermes Logistik Gruppe' => '', 'Hermes ' => '','Die ' => '', 'Sendung wurde' =>'Sendung', 'ist ' => '', 'für den weiteren Transport' => '');
		$patterns = array('übermittelt', 'verlassen', 'übernommen', 'sortiert', 'eingetroffen', 'Zustellung', 'zugestellt'); 
								
 // aktuelle session id holen
 	 	$url = 'https://www.myhermes.de/wps/portal/paket/Home/privatkunden/sendungsverfolgung';
    	$ch = curl_init();
    	$options = array(CURLOPT_HEADER => FALSE, CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => TRUE);
			curl_setopt_array($ch, $options);    
    	$result = curl_exec($ch);  
    	curl_close($ch);  
   		preg_match('#<form name="mhStatusForm" id="mhStatusForm" action="(.*?)" onsubmit=.*?>#i', $result, $matches);
   		echo preg_replace('#<!.*>$#', '', $matches[1]).PHP_EOL;
 
 // mit aktueller session id  die trackingnummer abfragen
   	 
   	$url = 'https://www.myhermes.de'.preg_replace('#<!.*>$#', '', $matches[1]).'?action=trace&shipmentID='.$trackingnumber.'&receiptID=';
   	$i=0;
		  $xml = new DOMDocument();
		  $xml->loadHTMLFile($url, LIBXML_NOBLANKS);
		  $xpath = new DOMXPath($xml);

		  $table = $xpath->query('//*[@class="content_table table_shipmentDetails"]')->item(0)->childNodes->item(1)->firstChild;	
		//  var_dump($table);	  
		  if($table->hasChildNodes()){
		  	$datum = trim(preg_replace('/\s+/', ' ', $table->childNodes->item(0)->nodeValue.' '.$table->childNodes->item(2)->nodeValue));
		  	$stat_txt = trim(preg_replace('/\s+/', ' ', utf8_decode($table->childNodes->item(4)->nodeValue)));	 	
				$stat_txt = strtr($stat_txt, $trans);
	
			  if ($stat_txt == ' Sendung  auf Tour gegangen') $stat_txt = 'Sendung in Zustellung';
				foreach ($patterns as $pattern) {	
				 	if(strpos($stat_txt, $pattern) !== FALSE){
				 		$posi = array_search($pattern, $patterns);
				 		for ($k=0; $k<=$posi; $k++)
							$bild[$k] = 'resources/icons/hermes_'.$patterns[$k].'.png'; 
						}
					}
						if ( ($posi >= 2) AND ($posi <= 3) )
										unset($bild[1]);
						if ($posi >= 4)
										unset($bild[1], $bild[3]);
					$bild = array_values($bild);
					return array($stat_txt, $datum, $bild, $id, $posi, $shedule);
			}

 }
 var_dump(hermesTrackingDOM($trackingnumber_hermes, 0));
 
 function dpdTrackingDOM($trackingnumber, $id) {
   		$i=0; $zeit=$status=$shedule=$posi=$bild=$inhalt='';
   		$trans = array('&nbsp;' => '', '&bull;' => '');
   		$bild_name = array(0 => 'Eingang', 1 => 'Transport', 2 => 'Auslieferung', 3 => 'zugestellt', 4 =>'fehler');
   		$stat_bild = array(
   								 'Eingang' => array('Einrollung ', 'Erfasst'),
   								 'Transport' => array('Eingang', 'HUB-Durchlauf', 'In Verzollung', 'Konsolidierung'),
   								 'Auslieferung' => array('Lager', 'Ausrollung'),
   								 'zugestellt' => array('Zustellung', 'zugestellt'),
   								 'fehler' => array('Zustellversuch nicht erfolgreich', 'System-Retoure', 'Ausrollretoure')
   								 );
			$url  = 'http://tracking.dpd.de/cgi-bin/delistrack?typ=1&lang=de&pknr='.$trackingnumber;
		  $xml = new DOMDocument();
		  $xml->loadHTMLFile($url);
		  $xpath = new DOMXPath($xml);
		  
		  $table = $xpath->query('//*[@class="alternatingTable"]')->item(0)->lastChild;
		  
			if($table->hasChildNodes()){
				$datum = substr($table->getElementsByTagName('td')->item(0)->nodeValue,0,-1);
				$ort = substr(preg_replace('#^.*\d{4}#', '', $table->getElementsByTagName('td')->item(1)->nodeValue), 2);
		  	$stat_txt = substr($table->getElementsByTagName('td')->item(2)->nodeValue, 0, -2); 
				echo 'Datum: '.$datum.' - stat_txt:'.$ort.'"'.$stat_txt.'"'.PHP_EOL;

			if (strpos($stat_txt, 'Zustellung') !== FALSE ){ 
					$stat_txt = str_replace('Zustellung', 'zugestellt',(substr($stat_txt, 12)));
					$stat_txt = 'zugestellt';
			}
			echo "BLUBB".recursive_array_search($stat_txt, $stat_bild).PHP_EOL;
			$posi = array_search(recursive_array_search($stat_txt, $stat_bild), $bild_name);
			for ($i=0; $i<=$posi; $i++)
	 		 		$bild[$i] = 'resources/icons/ups_'.$bild_name[$i].'.png';
	 		$stat_txt = $ort.' '.$stat_txt; 		

	 		}	else {
					$stat_txt = 'Sendung nicht gefunden';
					$datum = date('d.m.Y H:m:s', time());			
			}			 			
		 				 
		 return array($stat_txt, $datum, $bild, $id, $posi, $shedule);
 }
//var_dump(dpdTrackingDOM($trackingnumber_dpd, 0));


	function glsTracking($trackingnumber, $id) {
		$datum=$stat_txt=$bild=$posi=$shedule='';
		$bild_name = array('erfasst', 'Transport', 'Zustellung', 'zugestellt');
		$bild_nr = array('0', '1', '2', '3');
		$stat_bild = array(
									'erfasst' => array('Paket erfasst', 'Paket eingeliefert'),
 									'Transport' => array('Transport', 'Paket am Umschlagplatz', 'Paket im Zielland', 'Paket hat Deutschland verlassen', 'Paket in der Verzollung', 'Paket im Zieldepot'),
 									'Zustellung' => 'Paket in Zustellung', 
 									'zugestellt' => array("Paket zugestellt", 'Im PaketShop zugestellt', 'Zwischenlagerung im GLS-Depot', 'Zustellung nicht möglich')
 								  );
 		$url ='http://www.gls-germany.com/de/online/paketstatus_xml.php3?datatype=paketnr&filter=all&paketliste[0]='.$trackingnumber;
		$glsxml = file_get_contents($url);
		$glsxml = simplexml_load_string($glsxml);
		if(!empty($glsxml)) {
			$path = '/paketstatus/paketdaten';
				if (!$glsxml = $glsxml->xpath($path)) {
					return;
				} else {
						$stat_txt = $glsxml[0]->stat_txt;
						$stat_txt = glsStatusReplace($stat_txt);
        		$datum = $glsxml[0]->ps_dat.' '.$glsxml[0]->ps_zeit;
						$posi = str_replace($bild_name, $bild_nr, recursive_array_search($stat_txt, $stat_bild));
 						for ($i=0; $i<=$posi; $i++) {
	 						$bild[$i] = 'resources/icons/gls_'.$bild_name[$i].'.png';
 							if ($i == '3') {
 									if ($stat_txt == 'Paket zugestellt') $bild[$i] = 'resources/icons/gls_zugestellt.png';								 
 									if (strpos($stat_txt, 'PaketShop') !== FALSE) $bild[$i] = 'resources/icons/gls_paketshop.png';
 									if (strpos($stat_txt, 'Zwischenlagerung') !== FALSE) $bild[$i] = 'resources/icons/gls_zwischenlagerung.png';
 									if (strpos($stat_txt, 'nicht') !== FALSE) $bild[$i] = 'resources/icons/gls_nicht.png'; 									 
 							}
     		   	}     		   					
 	 	 		}        		        		
    }
    return array($stat_txt, $datum, $bild, $id, $posi, $shedule);
 }	
//var_dump(glsTracking($trackingnumber_gls, 1));


  function glsStatusReplace($stat_txt) {
	  $glsStatus = array('HSC: Abgabe Empfaenger', 'HSC: Rollkartenscannung', 'Eingang I-Punkt EPL', 'ZUP-Durchlauf NORMAL', 'Eingang APL I-Punkt', 'NIF-Eingang', 'NIF-Ausgang', 'Kunde nicht angetroffen',
	  									 'PK im Verzollungsprozess', 'Paket im Lager', 'STAT_DEFAULT', 'Fix-Termin', 'Adresse falsch', 'RUP-Durchlauf'
	  									 );
	  $normalisiert = array('Paket zugestellt', 'Paket in Zustellung', 'Paket im Zieldepot', 'Paket am Umschlagplatz', 'Paket eingeliefert', 'Paket im Zielland', 'Paket hat Deutschland verlassen', 'Kunde nicht angetroffen',
	  											'Paket in der Verzollung', 'Zwischenlagerung im GLS-Depot', 'Paket erfasst', 'Termin mit Kunden', 'Adresse falsch', 'Paket am Umschlagplatz'
	  											);
		return str_replace($glsStatus, $normalisiert, $stat_txt);
 	}
 	
	function recursive_array_search($needle, $haystack) {
    foreach($haystack as $key => $value) {
        $current_key = $key;
        if($needle === $value OR (is_array($value) && recursive_array_search($needle, $value) !== FALSE)) {
            return $current_key;
        }
    }
    return false;
	}

 function array_reverse_recursive($arr) {
    foreach ($arr as $key => $val) {
        if (is_array($val))
            $arr[$key] = array_reverse_recursive($val);
    }
    return array_reverse($arr);
}

 function after ($needle, $inthat){
        if (!is_bool(strpos($inthat, $needle)))
        return substr($inthat, strpos($inthat,$needle)+strlen($needle));
 }
?>
 
He Spoo3ner
Leider funktioniert es auch mit Deinem DHL Teil nicht.Ich habe es auch mit meiner alten xampp Version getestet da ging es auch nicht.
Naja ich habe auch lange kein DHL Paket mehr bekommen.Die letzten waren Hermes, das ging ja eh nicht mehr,ist ja auch nicht schlimm.
Aber DHL wäre schon gut, wenn es wieder laufen würde.Liegt es an DHL??

Volker
 
Kann ich dir nicht sagen. Letzte Woche bekam ich von DHL, Hermes und DPD jeweils Pakete geliefert. Ich konnte alle per Infoframe verfolgen...
 
Hi Volker,

funktioniert bestens mit Spoon3ers Code.
Hast Du denn auch die drei Funktionen in das PaketPlugin gepackt?

PHP:
private function after($needle, $inthat)
{
	if (!is_bool(strpos($inthat, $needle)))
		return substr($inthat, strpos($inthat,$needle)+strlen($needle));
}

private function recursive_array_search($needle, $haystack)
{
	foreach($haystack as $key => $value)
	{
		$current_key = $key;
		if ($needle === $value OR (is_array($value) && recursive_array_search($needle, $value) !== FALSE))
		{
			return $current_key;
		}
	}
	return false;
}

private function array_reverse_recursive($arr)
{
	foreach ($arr as $key => $val)
	{
		if (is_array($val))
			$arr[$key] = array_reverse_recursive($val);
	}
	return array_reverse($arr);
}
Gruß, Michael...
 
Zuletzt bearbeitet:
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.