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

Hallo zusammen
@Michael genau das habe ich nicht gemacht, ich habe nur den DHL Teil getauscht.Das kommt davon wenn man keine Ahnung hat. Bitte nicht böse sein.
Jetzt habe ich in mein altes Plugin Deinen Teil eingefügt und es kommt "wurde in der Filiale abgeholt".:D:D Allerdings weis ich nicht ob das Icon stimmt.Ich habe ein Häußchen mit einem Paket drin.Eigentlich müsste ich doch so eine ganze Reihe Icons haben und zuletzt ein abgehaktes Paket oder.??
Vielleicht habe ich auch beim Einfügen einen Fehler gemacht.Ich hänge mein Plugin nochmal mit dran,vielleicht seht Ihr den Fehler.
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='';
           $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);
    }  

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

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

 
// 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());
 }

}



?>

Ich habe auch Spoo3ners DHL Teil in mein Plugin kopiert auch mit dem Rest von Michael ,allerdings kommt da Sendung nicht gefunden.
Ich habe noch eine Bitte, könnte Ihr bitte auch noch mal schauen ob mein Paket Plugin auf dem neusten Stand ist.? Danke schon mal.

Volker
 
Hallo Volker,
die drei Funktionen stammen auch aus Spoon3ers Feder.
Ein Icon mit nem Haus sieht für mich erst mal gut aus, ob es komplett funktioniert kann man wohl erst sagen, wenn man mal alle Schritte beobachtet.
Gruß...
 
wenn man die die arbeitsdatei ausführt wird mittels var-dump alles ausgegeben was rellevant ist.
Der letzte Sttusbericht, posi der bilder und die bilder selber in einem array.
In diesem speziellen fall (hatte ich bis jetzt noch nicht, da bei mir mein nachbar so nett ist und meine pakete für mich übernimmt), fehlt bei dem array-key 'zugestellt' der Wert 'wurde in der Filiale abgeholt'. (wenn diese tatsächlich auch 1zu1 so in der Ausgabe steht.

so etwas sollte es dann aussehen:
PHP:
 $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' => array('Sendung erfolgreich zugestellt', 'wurde in der Filiale abgeholt') 
              );
 
He Michael
na dann ist ja alles gut.Vielen Dank für Eure Hilfe.:bier:
Dann warten wir mal auf die nächsten Weihnachtspäkchen;):D

Euch noch ein schönes Wochenende

Volker

@spoo3ner habe gerade Dein Teil bei mir eingefügt aber das Bild bleibt,oder habe ich da was falsch gemacht?
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, 50, $yoffset, $style['textcolor'], $style['font'], $text, $opt_header);
	  $icon = ImageCreateFromPNG ( 'resources/icons/tracking.png' );
		ImageCopy($image, $icon, 8, $yoffset-0, 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 += 2;	
		
}

// 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='';
           $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' => array('Sendung erfolgreich zugestellt', 'wurde in der Filiale abgeholt') 
              );
			  
                                               
           $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);
    }  

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

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

 
// 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
 
Zuletzt bearbeitet:
Hi Volker,
wichtig ist dein Status Text 1zu1!!! Am besten du kopierst diesen aus der Datenbank (phpmyadmin).

Es kann gut sein, daß am Anfang oder am Ende ein Leerzeichen vorhanden ist. Steht da wirklich nur "wurde in der Filiale abgeholt" ohne "Sendung" davor?

Wenn du magst kannst du mir deine DHL-Sendungsnummer per PN schicken, dann schau ich mir das mal an.
 
He Spoo3ner
Es steht "Der Empfänger hat die Sendung in der Filiale abgeholt"

In der Datenbank steht nur "Der Empfänger hat die Sendung in der Filiale abge..." das ist jetzt eine 1 zu 1 Kopie aus der Datenbank.
Im Infoframe steht "Der Empfänger hat die Sendung in der Filiale abgeholt".

in der Datenbank steht unter Bild "dhl_eingeliefert.png"

Volker
 
Zuletzt bearbeitet:
Ajo so schwierig war das jetzt nicht!!!!

Wie ich schon in den letzten zwei Posts betont habe ist es wichtig den Statustext 1zu1 zu übernehmen.

Also ist der Statustext nicht "wurde in der Filiale abgeholt" sondern "Der Empfänger hat die Sendung in der Filiale abgeholt"

daraus folgt:
im array_key 'zugestellt' muss anstatt "wurde in der Filiale abgeholt" "Der Empfänger hat die Sendung in der Filiale abgeholt" stehen!!

so, das ganze in php (was eigentlich jetzt überflüssig sein sollte ;) :
PHP:
			$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' => array('Sendung erfolgreich zugestellt', 'Der Empfänger hat die Sendung in der Filiale abgeholt')
									 			);


Die Ausgabe aus meiner arbeitsdatei, die ich auch schon gepostet habe....
Code:
Array
(
    [0] => Der Empfänger hat die Sendung in der Filiale abgeholt
    [1] => 12.12.2014 09:00
    [2] => Array
        (
            [0] => resources/icons/dhl_eingeliefert.png
            [1] => resources/icons/dhl_transport.png
            [2] => resources/icons/dhl_Paketzentrum.png
            [3] => resources/icons/dhl_Zustellung.png
            [4] => resources/icons/dhl_zugestellt.png
        )

    [3] => 0
    [4] => 4
)
[0] = Statustext
[1] = Datum
[2] = Pfade zu den Bildern
[3] = id (platzhalter wichtig später für den datenbankeintrag)
[4] = posi der bilder ( 5 bilder bei 0 wird angefangen zu zählen, weil auch das array bei 0 anfängt)
 
Tja leider bekomme ich es nicht hin,ich habe immer noch das Einliefer-Icon da stehen,keine Ahnung warum.Ich habe Spoo3ners Änderung durchgeführt ,ich hoffe richtig,aber es will nicht funktionieren.hier noch mal mein Paket-Plugin
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='';
           $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' => array('Sendung erfolgreich zugestellt', 'Der Empfänger hat die Sendung in der Filiale abgeholt')
                                                 );
           $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);
    }  

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

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

 
// 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:confused:
 
Es wird wahrscheinlich mit den umlauten zu tun haben - ein leidiges Thema im internet....

ich haben bei mir in vielen Plugins auf utf8 codierung umgestellt. Bei mir klappt es so wie es da steht. Ob es mit dem folgenden lösungsvorschlag klappt kann ich nicht testen.
Du köntest folgendes versuchen:
PHP:
//$stat_txt = trim(str_replace('.','',($xpath->query('//*[@class="mm_delivered"]')->item(0)->nodeValue)));
$stat_txt = trim(str_replace('.','',(utf8_decode($xpath->query('//*[@class="mm_delivered"]')->item(0)->nodeValue))));
 
Jetzt kommt wieder eine ganz dumme Frage
Wo kommt der Code hin.??
 
Hallo Spoon3er und Volker,

genaus deswegen habe ich aufgegeben. In zwei Wochen kommt DHL auf die Idee "Zustellbasis" in "Zielniederlassung" umzubenennen und schon geht es nicht mehr. Dann ändert UPS, dann Hermes, usw. Das PaketPlugin funktionsfähig zu halten ist wie der Kampf gegen Windmühlen-

Gruß...
 
Wo kommt der Code hin.??

in die Funktion "private function dhlTracking($trackingnumber, $id) { " die auskommentierte mit dem neuen ersetzen. deswegen habe ich das auskommentierte drinn gelassen.
Im übrigen kann man mit jedem halbwegs vernünftigen editor(notpad++ usw ) nach texten suchen. nun kopiert man einen teil des geposteten strings und sucht ihn im plugin.php. Und schon hat man die richtige stelle gefunden :)

@marvin:
find ich jetzt nicht so schlimm mit meiner arbeitsdatei ist das eigentlich in 5mins gefixt.
Das mit den umlauten - ahjo einmal bissi lesen, die codierungen der php-scripte umstellen und glücklich sein ;)
Spätestens wenn man an einer Homepage arbeitet und cms usw selber basteln will kommt man um die richtige codierung html, php, mysql eh nicht mehr rum.
Und einmal verstanden und eingerichtet ist es dann ein selbstläufer :)
Achja, zumindest mir macht das ganze auch noch spaß :)
 
He Spoo3ner
Danke Danke für deine Hilfe, jetzt funktioniert es wieder richtig bei DHL!!!!:D:D
Vielen vielen Dank!!!:groesste:

Volker
 
Zuletzt bearbeitet:
Hallo Spoon3er,
klar, das Programmieren macht spaß aber darum geht es nicht. Jedes Mal, wenn ich das PaketPlugin benutzen wollte ging irgendetwas nicht weil die Seitenbetreiber irgendwelche Kleinigkeiten geändert haben. Bis ich es repariert habe kann ich gleich im I-Net nachsehen.

Nunja egal, jetzt versuche ich es erst mal mit Deinem Code.

Gruß, Michael...
 
He Spoo3ner
Kann es sein, das mein nicht funktionierender Hermes Teil auch an den Umlauten liegt??

Volker
 
Hallo Spoon3er,
weiss ich doch, ich meine, ich versuche es jetzt erst mal mit den letztlich von Dir geposteten überarbeiteten Funktionen.
Gruss, Michael...
 
Hallo Spoon3er,

ich hoffe Du hast mich nicht missverstanden.
Das sollte keine Kritik an Deinem Plugin sein, ganz im Gegenteil. Was kannst Du denn auch dafür wenn die Betreiber ihre Seiten ändern :)

Aber ich bekomme alle paar Monate mal ein Paket, bei vier großen Paketdiensten bedeutet das, einmal im Jahr pro Dienst und, Murphy sei Dank, jedesmal bei funktionierte irgendetwas nicht.

Gruß, Michael...
 
Kann es sein, das mein nicht funktionierender Hermes Teil auch an den Umlauten liegt??
Volker

hmm kann sein, bekommst du denn eine Statusmeldung? oder ist die auch leer?
Wenn ich deinen code ansehe hast du noch eine alte version von hermes drinn. Ich habe die neue Version auf der letzten Seite auch gepostet. Es waren dhl und hermes funktionen in dem code enthalten. In deiner version wird noch eine ssl-verschlüsselung zu hermes aufgebaut um die session-id abzufragen. Diese ist mittlerweile nicht mehr nötig, bzw funktioniert nicht mehr... (jaja marvin hat schon recht ;) )

hier mal der relevante code aus deiner funktion:
PHP:
        $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);

und hier der code den ich gepostet habe (letzte seite und auch schon vor einem halben jahr .. ;)
PHP:
        $ch = curl_init();
        $options = array(CURLOPT_HEADER => FALSE, CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => TRUE);
            curl_setopt_array($ch, $options);

schau doch noch mal hier vorbei und kopiere die hermes funktion auch... :)

@marvin:
Nene, bin dir weder böse, noch habe ich das in den falschen hals bekommen. Du hast ja recht. ;)
Früher hatten alle dienstleister eine api-schnittstelle für privatanwender. Leider gibt es diese nur noch bei DPD, alle anderen haben nur noch für geschäftskunden schnittstellen um ohne die seite auseinander nehmen zu müssen.
Aber so verhält es sich leider mit vielen plugins :(
Die Tablets und Smartphones sind mit ihren Aps auf dem vormarsch und verdrängen uns kleine hobby-pfuscher. :)

Ich habe so oft versucht mich mit java zu beschäftigen, aber irgendwie bekomm ich da den einstieg nicht richtig hin, sprich das fesselt mich nicht lange genug. :(
 
Hallo. Also ich kämpfe nun schon einige Tagen immer noch mit den Kalender-Plugin. Mein Projekt bei Google ist angelegt, die ID, Email, P12 Datei liegt vor.
Ich habe zuerst Spoon3ers Version versucht, dann die alte Version um die drei Einträge ergänzt und auch die Pfade in mehrfacher Weise geändert. Ab und an erhalte ich Zugriffe auf der Google-Projekt-Seite dokumentiert, dann wieder nicht. Eine Anzeige auf der Frame hatte ich bislang überhaupt nicht.

In marvin424s Version sind die Pfade und Dateien zwar hart eingetragen, dennoch war ich bislang damit am erfolgreichsten. Könntet jemand dieses Script bitte noch einmal in einer abschließenden finalen Version hochladen?

Das würde mir eine ruhigere Weihnachtszeit bescheren - vielen Dank dafür.
 
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.