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

Hallo Michael,
umgestellt habe ich auch nicht auf PDO_MYSQK, das ist mir irgendwie entgangen!
  • Das Plugin arbeitet mit PDO_MYSQL statt der alten MySQL API. Wenn Du den Rest nicht auch auf PDO_MYSQL umstellst, wird es nicht laufen.
Gibt es eine Beschreibung, welche Dateien/Systemkomponenten installiert werden müssen?
Ja, meine Uhr zeigt die richtige Zeit an ... Aber wie gesagt, im Moment geht gar nichts mehr ...
 
Hallo jono,
umgestellt habe ich auch nicht auf PDO_MYSQK, das ist mir irgendwie entgangen!
na dann kanns auch nicht funktionieren :)
Gibt es eine Beschreibung, welche Dateien/Systemkomponenten installiert werden müssen?
Installieren musst Du nichts, ganz im Gegenteil, es ist eher so, dass mit einer zukünftigen Version von PHP mysql nicht mehr unterstützt wird. Siehe auch hier: Diese Erweiterung ist seit PHP 5.5.0 als veraltet markiert und wird in der Zukunft entfernt werden.
Ich denke Du hast die Wahl zwischen drei Optionen:
  1. Du musst in allen Sourcen vom Infoframe die alten mysql-Befehle gegen die PDO-Befehle tauschen. Für die Zukunft sicher das Beste aber für einen, der sich nicht mit PHP auskennt, nicht zu empfehlen.
  2. Du nimmst Dein altes BenzinPlugin und fügst nur die Änderungen ein, die sich durch das neue clever-tanken Layout ergeben haben. Das waren im wesenlichen nur ein paar <div class="names"> und einige wenige Zeile code in der Funktion doUpdate()
  3. Alternativ kannst Du natürlich auch das neue Benzinplugin mit PDO nahemn und die PDO Befehle wieder in mysql-Befehle ändern z.B.
    PHP:
    $this->dbconn->query ("START TRANSACTION");
    // oben PDO wird zu unten mysql
    mysql_query ("START TRANSACTION", $this->dbconn);
    Wie die entsprechenden mysql-Befehle aussehen findest Du in Deinem alten BenzinPlugin oder im Inet.

meine Uhr zeigt die richtige Zeit an
ich hätte meine Frage präzieser stellen sollen. Zeigt Deine Uhr denn auch das richtige Datum an?
Schick mir doch mal Deine CallsPlugin.

Gruß, Michael...
 
Zuletzt bearbeitet:
Hallo Michael,
während man bei Problemen in großen Firmen in der Warteschleife gehalten wird, bietest du bereits Lösungen an. Das ist einfach SUPER.
Eigentlich ist das hier ohnehin der falsche Thread, das müsste hier:
http://www.ip-phone-forum.de/showthread.php?t=276420
diskutiert werden.
Aber genaugenommen wäre ein eigener Thread notwendig, mit Verweis in der Überschrift auf PDO. Hier können dann auch neue Probleme im Zusammenhang mit PDO diskutiert werden.
Ich werde in einigen ruhigen und "kühlen" Stunden sicherlich Version 1 realisieren, bei weiteren Änderungen in Pluins habe ich sonst die "A...-Karte" gezogen. Im Moment läuft nichts, was ja klar ist.
Vielleicht könnte ein Admin einige Beiträge von hier in den richtigen Thread verfrachten.
 
Hallo h-d-p,

  1. die <div id= für den start- und endindex gibt es nicht mehr. Als Ersatz können diese herhalten
    PHP:
    //$startindex = '<div id="mapcanvas" ng-show="visible" class="map_list row"></div>';
    $startindex = '<div id="main-content" class="row tankstelle-liste">';
    //$endindex = '<div class="row" id="zeug-das-niemand-liest"';
    $endindex = '<div id="main-content-footer" class="col-xs-12 col-sm-12 col-md-12 col-lg-12  main-content-item">';
  2. hast Du beachtet, dass die geänderten <div class= jetzt teilweise <div id= sind?
    PHP:
    //$div = $xpath->query('//*[@class="location_name"]')->item(0);
    $div = $xpath->query('//*[@class="row fuel-station-location-name"]')->item(0);
    
    //$div = $xpath->query('//*[@class="location_street_number"]')->item(0);
    $div = $xpath->query('//*[@id="fuel-station-location-street"]')->item(0);
    
    //$div = $xpath->query('//*[@class="location_zip_code_city"]')->item(0);
    $div = $xpath->query('//*[@id="fuel-station-location-city"]')->item(0);
    
    //$div = $xpath->query('//*[@class="location_distance"]')->item(0);
    $div = $xpath->query('//*[@class="fuel-station-location-address-distance"]')->item(0);
  3. an der Entfernung hat clever-tanken rumgeschraubt, ein strip_tags (trim ()); löst das Problem.
    PHP:
    $entfernung = strip_tags (trim ($div->nodeValue));

Gruß...
 
Hallo h-d-p,


PHP:
//$div = $xpath->query('//*[@class="location_name"]')->item(0);
$div = $xpath->query('//*[@class="row fuel-station-location-name"]')->item(0);

//$div = $xpath->query('//*[@class="location_street_number"]')->item(0);
$div = $xpath->query('//*[@id="fuel-station-location-street"]')->item(0);

//$div = $xpath->query('//*[@class="location_zip_code_city"]')->item(0);
$div = $xpath->query('//*[@id="fuel-station-location-city"]')->item(0);

//$div = $xpath->query('//*[@class="location_distance"]')->item(0);
$div = $xpath->query('//*[@class="fuel-station-location-address-distance"]')->item(0);


Gruß...

Das hatte ich glatt übersehen. Danke, hat auf Anhieb funktioniert.
 
Hallo zusammen
Da auch mein BenzinPlugin (MTSPlugin) nicht mehr funktioniert ,brauche ich bitte nochmal Eure Hilfe.
Gibt es denn überhaupt noch eine Möglichkeit ,unter Xampp mit einer SQL Datenbank das Plugin zum Laufen zu bekommen.
Im Moment habe ich das neue Plugin von Michael getestet, aber ich bekomme es einfach nicht zum Laufen.Bild bleibt weis.
Die Einträge in der config.ini sind wieder die alten. Oder liegt dort der Fehler??
Code:
;[BenzinPlugin]
; maximales Alter der Preisangaben in Stunden
max_age_in_hours = 24
; maximale Anzahl angezeigter Tankstellen
max_displayed_stations = 5
; Auswahl einer Karftstoffsorte -> 
; Normalbenzin  = wird nicht mehr ausgewertet
; Super         = "SuperE5" 
; Super E10     = "Super"
; SuperPlus     = "SuperPlus"
; Diesel        = "Diesel"
; PremiumDiesel = "VPower"
; Biodiesel     = "Biodiesel"
; LKW-Diesel    = "LKW-Diesel"
; Autogas       = "Autogas"
; Erdgas        = "Erdgas"
; Pflanzenöl    = "Pflanzenoel"
; Bioethanol    = "Bioethanol"
;
sorte = "SuperE5"
; welche Tankstellen sollen ausgewertet werden, Angabe Ort oder PLZ
ort_1 = "Korbach"
ort_2 = "34454"
ort_3 = "34466"

Bitte um Hilfe.
Danke schon mal

Volker
 
Im Moment habe ich das neue Plugin von Michael getestet, aber ich bekomme es einfach nicht zum Laufen.Bild bleibt weis.
Also nochmal für alle:
Dieses Plugin ist für PDO SQL und wird mit der mysql API nicht funktionieren.
Aber im Post #2645 steht doch alles, was man für das MST Pugin ändern muss.

Gruß, Michael...
 
Hallo Michael
Aber im Post #2645 steht doch alles, was man für das MSTPugin ändern muss.
Tut mir leid, das habe ich nicht gelesen,das es für das MTSPlugin ist.
Ich habe jetzt die Änderungen im Plugin gemacht,allerdings weis ich nicht wo die Änderung mit der Entfernung hingehört.
Bis jetzt funktioniert es auch noch nicht.Vielleicht kannst Du Dir das Plugin bitte nochmal ansehen.
PHP:
<?php
/***************************************************************************
 * InfoFrame (image generator for digital picture frames)
 * Copyright (C) 2010
 * 
 * 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/
 ***************************************************************************/
//version 0.4
//
//CHANGELOG:
// ## 0.4 ## 07.01.2014
// MTS Daten von clever-tanken.de werden nun wieder korrekt ausgelesen
// Das Auslesen ist nun schneller


class BenzinMTSPlugin implements IPlugin
{

    private $dbconn = NULL;
	private $config = NULL;

	public function __construct($dbconn, $config) {
		$this->dbconn = $dbconn;
		$this->config = $config;
	}

	public function doUpdate() {
		// Datenbankeinträge löschen
		mysql_query("START TRANSACTION", $this->dbconn);
		$query = "Delete from if_tanken_mts";
		mysql_query($query, $this->dbconn) or die('Error, delete query failed');

		// Preise und Tankstellen lesen - Meldestellenversion v0.1
		$i=0;
		$ortnumber = 0;
		$spritsorte=$this->config['sorte'];
		
		// jeden in config.ini eingetragenen Ort in file einlesen
		while ($ort = $this->config['ort_'.++$ortnumber]) {
				$uri  = 'http://www.clever-tanken.de/tankstelle_liste?'.'ort='.$ort.'&spritsorte='.$spritsorte;
				$uriElem = parse_url ( $uri );
				$fp = @fsockopen ( $uriElem ['host'], 80, $errno, $errstr, 10 );

				if (!$fp) {
					//$title = "keine Tankstellen in $orte_fehlen gefunden";
					//return;
				}else{

					$request = "GET " . $uriElem ['path'] . (isset ( $uriElem ['query'] ) ? "?" . $uriElem ['query'] : "") . " HTTP/1.1\r\n";
					$request .= "User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1) Gecko/20021204\r\n";
					$request .= "Host: " . $uriElem ['host'] . "\r\n";
					$request .= "Connection: Close\r\n\r\n";

					fwrite ( $fp, $request );
					$response = "";
					while ( ! feof ( $fp ) ) {
						//$response .= fgets ( $fp, 128 );
						$response .= fgets ( $fp, 512 );
					}
					fclose ( $fp );
				
					// split headers from data
					//$startindex = '<div id="mapcanvas" ng-show="visible" class="map_list row"></div>';
                    $startindex = '<div id="main-content" class="row tankstelle-liste">';
                    //$endindex = '<div class="row" id="zeug-das-niemand-liest"';
                    $endindex = '<div id="main-content-footer" class="col-xs-12 col-sm-12 col-md-12 col-lg-12  main-content-item">';  
					$responseSplit=utf8_decode($response);
					$responseStart = explode ( $startindex, $responseSplit, 2 );  
					$responseEnd = explode ( $endindex, $responseStart[1], 2 );
					//explode into single stations
					//$tankstellenarray = explode ('<a href="/tankstelle_details/',$responseEnd[0]);
					$tankstellenarray = explode ('<div class="price_entry_table">',$responseEnd[0]);
					foreach ($tankstellenarray as $i => $tanke) {
						$zeile[$i++]=strip_tags($tanke,'<div><sup>'); 
					}
				}

			// Tankstelle extrahieren und Adresse formatieren
			$doc = new DOMDocument();
			for ($j=1;$j<$i;$j++) {
				$str=$zeile[$j];
				//echo $j;
				$doc->loadHTML($str);
				$xpath = new DomXpath($doc);
				$div = $xpath->query('//*[@class="price"]')->item(0);
				$preis=$div->nodeValue;
				$div = $xpath->query('//*[@class="price_date"]')->item(0);
				$alter=$div->nodeValue;
				//$div = $xpath->query('//*[@class="location_name"]')->item(0);
                $div = $xpath->query('//*[@class="row fuel-station-location-name"]')->item(0);

                //$div = $xpath->query('//*[@class="location_street_number"]')->item(0);
                $div = $xpath->query('//*[@id="fuel-station-location-street"]')->item(0);

                //$div = $xpath->query('//*[@class="location_zip_code_city"]')->item(0);
                $div = $xpath->query('//*[@id="fuel-station-location-city"]')->item(0);

                //$div = $xpath->query('//*[@class="location_distance"]')->item(0);
                $div = $xpath->query('//*[@class="fuel-station-location-address-distance"]')->item(0);  

				/*
				echo "Preis: ".$preis."<br>";
				echo "Alter: ".$alter."<br>";
				echo "name: ".$name."<br>";
				echo "strasse: ".$strasse."<br>";
				echo "stadt: ".$stadt."<br>";
				echo "entfernung: ".$entfernung."<br>";
				*/


				$ortok='';
				//strikte Ortsnamensuche oder nicht
				$ortscheck = preg_split('/\s+/', $stadt);
				//echo $ortscheck[2];
				if ($this->config['suchmodus']=='strikt'){
					if (strtolower($ortscheck[2])==strtolower(trim(utf8_decode($ort)))){
						$ortok=1; //echo "Gleich - ".$ortscheck[2]." ".utf8_decode($ort)."<br/>\n";
					}else{
					//echo "Unterschiedlich - ".$ortscheck[2]." ".utf8_decode($ort)."<br/>\n";
					}
				}else{
					$ortok=1;
				}
				
				$pre2is='';
				//Wenn Preis  und Datum angegeben, Preis auslesen
				if ($preis != "&nbsp;" && $preis != "" && $alter != "" && $ortok==1){
					$preis=floatval($preis); //Preis festlegen
					//echo $preis."<br/>\n";
					//datum prüfen und in Unix-Zeitstempel konvertieren
					if (stripos($alter,"vor")){
						//Relative Zeit in der Form "gemeldet Heute vor xx Std. Min"
						if (stripos($alter,"Std.")){
							$faktor=3600; //60 Sekunden * 60 Minuten --> Stundenberechnung
						}else if (stripos($alter,"Min.")){
							$faktor=60; //60 Sekunden --> Minutenberechnung
						}else if (stripos($alter,"Sek.")){
							$faktor=1; //Wert ist bereits in Sekunden angegeben
						}
						$zeit=intval(preg_replace("/[^0-9]/","",$alter)); //nur die zeit übrig lassen
						$datum=time()-$zeit*$faktor;
						//echo "Relativzeit ".$datum."<br/>\n";
					}else{
						//Absolute Zeit wurde angegeben, kommt nicht mehr vor???
						$d_arr = date_parse($alter);
						$datum = mktime($d_arr['hour'],$d_arr['minute'],$d_arr['second'],$d_arr['month'],$d_arr['day'],$d_arr['year']);
						//echo "Absolutzeit ".$datum."<br/>\n";
					}
					//echo date(DATE_ATOM, $datum)."<br/>\n";
					// nur Preise mit aktuellem Datum berücksichtigen, siehe config.ini
						$configalter = $this->config['max_age_in_hours'];
						if ($datum>=strtotime("-$configalter hours") && $preis!='') {	// Preis ist aktuell
							// Datensatz für Datenbank anlegen, Adresse ohne PLZ
							//preis, datum, station, strasse, ort, entfernung
							$this->addStation($preis, $datum, $name, $strasse, $stadt, $entfernung);
						}
				}
			// in Datenbank schreiben
			mysql_query("COMMIT", $this->dbconn);
			}
		}
	}


	public function doOutput($image, $style, $updateData, &$yoffset) {

		if ($updateData) $this->doUpdate();

		$query = "SELECT * FROM `if_tanken_mts` ORDER BY `datum` DESC, `preis` ASC";
		$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' => false
		);

		switch ($this->config['sorte']){
			case 1:
				$sorte="Autogas";
				break;
			case 2:
				$sorte="LKW-Diesel";
				break;
			case 3:
				$sorte="Diesel";
				break;
			case 4:
				$sorte="Bioethanol";
				break;
			case 5:
				$sorte="Super E10";
				break;
			case 6:
				$sorte="Super Plus";
				break;
			case 7:
				$sorte="Super E5";
				break;
			case 8:
				$sorte="Erdgas";
				break;
			case 9:
				$sorte="Bio-Diesel";
				break;
			case 10:
				$sorte="Pflanzenöl";
				break;
			case 11:
				$sorte="Zweitakt";
				break;
		}
		
		// print header
		$iconpath = 'resources/benzin_icons/';
		
		$text = 'Kraftstoffpreise ('.$sorte.')'; //.$this->config['sorte'].')';
		imagettftextboxopt($image, 18, 0, 50, $yoffset, $style['textcolor'], $style['font'], $text, $opt_header);
		$icon = ImageCreateFromPNG ( $iconpath.'benzin_tank.png' );
		ImageCopy($image, $icon, 20, $yoffset-3, 0, 0, imagesx($icon), imagesy($icon));
		ImageDestroy($icon);
		$yoffset += 20;

		$counter=0;
		while ($row = mysql_fetch_assoc($result)) {
			$counter++;
			$rest = (mysql_num_rows($result) - $counter) + 1;
			$entrylimit = $this->config['max_displayed_stations'];
			if ( (($entrylimit) && ($counter > $entrylimit)) || (($yoffset >= (imagesy($image) - 36)) && ($rest > 1)) ) {
				// show only n mails. If more mails are available show hint "x more stations..."
				$rest = (mysql_num_rows($result) - $counter) + 1;
				if ($rest > 1)
					$text = "... $rest weitere Tankstellen";
				else
					$text = "... $rest weitere Tankstelle";
				//Text der weiteren Tankstellen auskommentiert		
				//imagettftextboxopt($image, 14, 0, 24, $yoffset, $style['textcolor'], $style['fontb'], $text, $opt_header);
				//$yoffset += 18;					
				break;
			}

			//Anzeigetext
			$text = "";
			$euro = "\xE2\x82\xAc"; // Euro-Zeichen ist Multibyte char: \xE2\x82\xAc
			$preis = $row['preis'];
			$datum = strftime( "%d.%m. %H:%M", strtotime($row['datum']));
			$station = $row['station'];
			$ort = $row['ort'];
			$strasse = $row['strasse'];
			$oeffnungszeiten = $row['oeffnungszeiten'];
			
			$text = $preis." ".$euro."  - ".$datum." - ".$station." - ".$strasse." - ".$ort;

			// print station and icon				
			if (stripos($station,'aral') !== false){					$png = 'benzin_aral.png';			// Aral-Tankstelle
			}elseif (stripos($station,'agip') !== false){				$png = 'benzin_agip.png';			// Agip-Tankstelle
			}elseif (stripos($station,'bft') !== false){				$png = 'benzin_bft.png';			// BFT-Tankstelle
			}elseif (stripos($station,'esso') !== false){				$png = 'benzin_esso.png';			// Esso-Tankstelle
			}elseif (stripos($station,'heinlein') !== false){			$png = 'benzin_h.png';				// Heinlein-Tankstelle
			}elseif (stripos($station,'jet') !== false){				$png = 'benzin_jet.png';			// Jet-Tankstelle
			}elseif (stripos($station,'omv') !== false){				$png = 'benzin_omv.png';			// OMV-Tankstelle
			}elseif (stripos($station,'shell') !== false){				$png = 'benzin_shell.png';			// Shell-Tankstelle
			}elseif (stripos($station,'star') !== false){				$png = 'benzin_star.png';			// Star-Tankstelle
			}elseif (stripos($station,'westfalen') !== false){			$png = 'benzin_westfalen.png';		// Westfalen-Tankstelle
			}elseif (file_exists($iconpath.'benzin_'.strtolower($station).'.png')){ $png = 'benzin_'.strtolower($station).'.png';
			// Sucht 'blind' nach Stationsnamen als Icon in der Form benzin_"stationsname".png
			}else{ $png = 'benzin_t.png'; }				// generelles Bild
			
			$wicon = ImageCreateFromPNG($iconpath.$png);
			ImageCopy($image, $wicon, 25, $yoffset, 0, 0, imagesx($wicon), imagesy($wicon));
			ImageDestroy($wicon);
			
			imagettftextboxopt($image, 12, 0, 50, $yoffset, $style['textcolor'], $style['font'], $text, $opt_entry);
			$yoffset += 14;
			
			//werden keine oeffnungszeiten gewuenscht, bitte die folgenden drei zeilen auskommentieren
			if ($this->config['oeffnungszeiten']==1){
				$text=$oeffnungszeiten;
				imagettftextboxopt($image, 12, 0, 50, $yoffset, $style['textcolor'], $style['font'], $text, $opt_entry);
				$yoffset += 18;
			}
		}
		$yoffset += 10;
		mysql_free_result($result);
	}


	private function addStation($preis, $datum, $station, $strasse, $ort, $oeffnungszeiten) {
		$query = "REPLACE INTO `if_tanken_mts` SET 
					`preis`= '".mysql_real_escape_string($preis)."', 
					`datum`= FROM_UNIXTIME($datum), 
					`station`= '".mysql_real_escape_string($station)."',
					`strasse`= '".mysql_real_escape_string($strasse)."',
					`ort`= '".mysql_real_escape_string($ort)."',
					`oeffnungszeiten`= '".mysql_real_escape_string($oeffnungszeiten)."'";

		mysql_query($query, $this->dbconn) or die('Error, insert query failed: '.mysql_error());
	}


}

Da ist bestimmt noch irgendwo ein Fehler.
Die config.ini habe ich auch für das MTSPlugin wieder geändert.
Code:
[BenzinMTSPlugin]
; maximales Alter der Preisangaben in Stunden
max_age_in_hours = 48

; maximale Anzahl angezeigter Tankstellen
max_displayed_stations = 5

; Auswahl einer Karftstoffsorte -> 
; 1	 Autogas 		l	;noch nicht verfügbar
; 2	 LKW-Diesel			;noch nicht verfügbar
; 3	 Diesel
; 4	Bioethanol			;noch nicht verfügbar
; 5	Super E10
; 6	SuperPlus			;noch nicht verfügbar
; 7	Super E5
; 8	Erdgas				;noch nicht verfügbar
; 9	Bio-Diesel			;noch nicht verfügbar
; 10	Pflanzenöl		;noch nicht verfügbar
; 11	Zweitakt		;noch nicht verfügbar
sorte = 7

;Wenn der Suchmodus auf "strikt" gestellt wird, werden nur exakte Übereinstimmungen bei den Ortnamen verwendet
;z.B. wird dann bei der Suche nach Hof nicht mehr Hofheim usw. gefunden
;suchmodus = 
suchmodus = strikt

;Sollen Öffnungszeiten in einer weiteren Zeile angezegt werden? 1=ja
oeffnungszeiten = 0

; welche Tankstellen sollen ausgewertet werden, Angabe Ort oder PLZ
ort_1 = "34454"
ort_2 = "34497"
;ort_3 = "Kulmbach"

Danke schon mal für deine Hilfe

Volker
 
Hallo Volker,

KORREKTUR:
PHP:
<?php
/***************************************************************************
 * InfoFrame (image generator for digital picture frames)
 * Copyright (C) 2010
 * 
 * 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/
 ***************************************************************************/
//version 0.4
//
//CHANGELOG:
// ## 0.4 ## 07.01.2014
// MTS Daten von clever-tanken.de werden nun wieder korrekt ausgelesen
// Das Auslesen ist nun schneller


class BenzinMTSPlugin implements IPlugin
{

    private $dbconn = NULL;
    private $config = NULL;

    public function __construct($dbconn, $config) {
        $this->dbconn = $dbconn;
        $this->config = $config;
    }

    public function doUpdate() {
        // Datenbankeinträge löschen
        mysql_query("START TRANSACTION", $this->dbconn);
        $query = "Delete from if_tanken_mts";
        mysql_query($query, $this->dbconn) or die('Error, delete query failed');

        // Preise und Tankstellen lesen - Meldestellenversion v0.1
        $i=0;
        $ortnumber = 0;
        $spritsorte=$this->config['sorte'];
        
        // jeden in config.ini eingetragenen Ort in file einlesen
        while ($ort = $this->config['ort_'.++$ortnumber]) {
                $uri  = 'http://www.clever-tanken.de/tankstelle_liste?'.'ort='.$ort.'&spritsorte='.$spritsorte;
                $uriElem = parse_url ( $uri );
                $fp = @fsockopen ( $uriElem ['host'], 80, $errno, $errstr, 10 );

                if (!$fp) {
                    //$title = "keine Tankstellen in $orte_fehlen gefunden";
                    //return;
                }else{

                    $request = "GET " . $uriElem ['path'] . (isset ( $uriElem ['query'] ) ? "?" . $uriElem ['query'] : "") . " HTTP/1.1\r\n";
                    $request .= "User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1) Gecko/20021204\r\n";
                    $request .= "Host: " . $uriElem ['host'] . "\r\n";
                    $request .= "Connection: Close\r\n\r\n";

                    fwrite ( $fp, $request );
                    $response = "";
                    while ( ! feof ( $fp ) ) {
                        //$response .= fgets ( $fp, 128 );
                        $response .= fgets ( $fp, 512 );
                    }
                    fclose ( $fp );
                
                    // split headers from data
                    $startindex = '<div id="main-content" class="row tankstelle-liste">';
                    $endindex = '<div id="main-content-footer" class="col-xs-12 col-sm-12 col-md-12 col-lg-12  main-content-item">';  
                    $responseSplit=utf8_decode($response);
                    $responseStart = explode ( $startindex, $responseSplit, 2 );  
                    $responseEnd = explode ( $endindex, $responseStart[1], 2 );
                    //explode into single stations
                    $tankstellenarray = explode ('<div class="fuel-station-price">',$responseEnd[0]);
                    foreach ($tankstellenarray as $i => $tanke) {
                        $zeile[$i++]=strip_tags($tanke,'<div><sup>'); 
                    }
                }

            // Tankstelle extrahieren und Adresse formatieren
            $doc = new DOMDocument();
            for ($j=1;$j<$i;$j++) {
                $str=$zeile[$j];
                //echo $j;
                $doc->loadHTML($str);
                $xpath = new DomXpath($doc);
                $div = $xpath->query('//*[@class="price"]')->item(0);
                $preis=$div->nodeValue;
                $div = $xpath->query('//*[@class="price_date"]')->item(0);
                $alter=$div->nodeValue;
                $div = $xpath->query('//*[@class="row fuel-station-location-name"]')->item(0);
                $name=$div->nodeValue;
                $div = $xpath->query('//*[@id="fuel-station-location-street"]')->item(0);
                $strasse=$div->nodeValue;
                $div = $xpath->query('//*[@id="fuel-station-location-city"]')->item(0);
                $stadt=$div->nodeValue;
                $div = $xpath->query('//*[@class="fuel-station-location-address-distance"]')->item(0);  
                $entfernung = strip_tags (trim ($div->nodeValue)); 

                $ortok='';
                //strikte Ortsnamensuche oder nicht
                $ortscheck = preg_split('/\s+/', $stadt);
                //echo $ortscheck[2];
                if ($this->config['suchmodus']=='strikt'){
                    if (strtolower($ortscheck[2])==strtolower(trim(utf8_decode($ort)))){
                        $ortok=1; //echo "Gleich - ".$ortscheck[2]." ".utf8_decode($ort)."<br/>\n";
                    }else{
                    //echo "Unterschiedlich - ".$ortscheck[2]." ".utf8_decode($ort)."<br/>\n";
                    }
                }else{
                    $ortok=1;
                }
                
                //Wenn Preis  und Datum angegeben, Preis auslesen
                if ($preis != "&nbsp;" && $preis != "" && $alter != "" && $ortok==1){
                    $preis=floatval($preis); //Preis festlegen
                    //echo $preis."<br/>\n";
                    //datum prüfen und in Unix-Zeitstempel konvertieren
                    if (stripos($alter,"vor")){
                        //Relative Zeit in der Form "gemeldet Heute vor xx Std. Min"
                        if (stripos($alter,"Std.")){
                            $faktor=3600; //60 Sekunden * 60 Minuten --> Stundenberechnung
                        }else if (stripos($alter,"Min.")){
                            $faktor=60; //60 Sekunden --> Minutenberechnung
                        }else if (stripos($alter,"Sek.")){
                            $faktor=1; //Wert ist bereits in Sekunden angegeben
                        }
                        $zeit=intval(preg_replace("/[^0-9]/","",$alter)); //nur die zeit übrig lassen
                        $datum=time()-$zeit*$faktor;
                        //echo "Relativzeit ".$datum."<br/>\n";
                    }else{
                        //Absolute Zeit wurde angegeben, kommt nicht mehr vor???
                        $d_arr = date_parse($alter);
                        $datum = mktime($d_arr['hour'],$d_arr['minute'],$d_arr['second'],$d_arr['month'],$d_arr['day'],$d_arr['year']);
                        //echo "Absolutzeit ".$datum."<br/>\n";
                    }
                    //echo date(DATE_ATOM, $datum)."<br/>\n";
                    // nur Preise mit aktuellem Datum berücksichtigen, siehe config.ini
                        $configalter = $this->config['max_age_in_hours'];
                        if ($datum>=strtotime("-$configalter hours") && $preis!='') {    // Preis ist aktuell
                            // Datensatz für Datenbank anlegen, Adresse ohne PLZ
                            //preis, datum, station, strasse, ort, entfernung
                            $this->addStation($preis, $datum, $name, $strasse, $stadt, $entfernung);
                        }
                }
            // in Datenbank schreiben
            mysql_query("COMMIT", $this->dbconn);
            }
        }
    }


    public function doOutput($image, $style, $updateData, &$yoffset) {

        if ($updateData) $this->doUpdate();

        $query = "SELECT * FROM `if_tanken_mts` ORDER BY `datum` DESC, `preis` ASC";
        $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' => false
        );

        switch ($this->config['sorte']){
            case 1:
                $sorte="Autogas";
                break;
            case 2:
                $sorte="LKW-Diesel";
                break;
            case 3:
                $sorte="Diesel";
                break;
            case 4:
                $sorte="Bioethanol";
                break;
            case 5:
                $sorte="Super E10";
                break;
            case 6:
                $sorte="Super Plus";
                break;
            case 7:
                $sorte="Super E5";
                break;
            case 8:
                $sorte="Erdgas";
                break;
            case 9:
                $sorte="Bio-Diesel";
                break;
            case 10:
                $sorte="Pflanzenöl";
                break;
            case 11:
                $sorte="Zweitakt";
                break;
        }
        
        // print header
        $iconpath = 'resources/benzin_icons/';
        
        $text = 'Kraftstoffpreise ('.$sorte.')'; //.$this->config['sorte'].')';
        imagettftextboxopt($image, 18, 0, 50, $yoffset, $style['textcolor'], $style['font'], $text, $opt_header);
        $icon = ImageCreateFromPNG ( $iconpath.'benzin_tank.png' );
        ImageCopy($image, $icon, 20, $yoffset-3, 0, 0, imagesx($icon), imagesy($icon));
        ImageDestroy($icon);
        $yoffset += 20;

        $counter=0;
        while ($row = mysql_fetch_assoc($result)) {
            $counter++;
            $rest = (mysql_num_rows($result) - $counter) + 1;
            $entrylimit = $this->config['max_displayed_stations'];
            if ( (($entrylimit) && ($counter > $entrylimit)) || (($yoffset >= (imagesy($image) - 36)) && ($rest > 1)) ) {
                // show only n mails. If more mails are available show hint "x more stations..."
                $rest = (mysql_num_rows($result) - $counter) + 1;
                if ($rest > 1)
                    $text = "... $rest weitere Tankstellen";
                else
                    $text = "... $rest weitere Tankstelle";
                //Text der weiteren Tankstellen auskommentiert        
                //imagettftextboxopt($image, 14, 0, 24, $yoffset, $style['textcolor'], $style['fontb'], $text, $opt_header);
                //$yoffset += 18;                    
                break;
            }

            //Anzeigetext
            $text = "";
            $euro = "\xE2\x82\xAc"; // Euro-Zeichen ist Multibyte char: \xE2\x82\xAc
            $preis = $row['preis'];
            $datum = strftime( "%d.%m. %H:%M", strtotime($row['datum']));
            $station = $row['station'];
            $ort = $row['ort'];
            $strasse = $row['strasse'];
            $oeffnungszeiten = $row['oeffnungszeiten'];
            
            $text = $preis." ".$euro."  - ".$datum." - ".$station." - ".$strasse." - ".$ort;

            // print station and icon                
            if (stripos($station,'aral') !== false){                    $png = 'benzin_aral.png';            // Aral-Tankstelle
            }elseif (stripos($station,'agip') !== false){                $png = 'benzin_agip.png';            // Agip-Tankstelle
            }elseif (stripos($station,'bft') !== false){                $png = 'benzin_bft.png';            // BFT-Tankstelle
            }elseif (stripos($station,'esso') !== false){                $png = 'benzin_esso.png';            // Esso-Tankstelle
            }elseif (stripos($station,'heinlein') !== false){            $png = 'benzin_h.png';                // Heinlein-Tankstelle
            }elseif (stripos($station,'jet') !== false){                $png = 'benzin_jet.png';            // Jet-Tankstelle
            }elseif (stripos($station,'omv') !== false){                $png = 'benzin_omv.png';            // OMV-Tankstelle
            }elseif (stripos($station,'shell') !== false){                $png = 'benzin_shell.png';            // Shell-Tankstelle
            }elseif (stripos($station,'star') !== false){                $png = 'benzin_star.png';            // Star-Tankstelle
            }elseif (stripos($station,'westfalen') !== false){            $png = 'benzin_westfalen.png';        // Westfalen-Tankstelle
            }elseif (file_exists($iconpath.'benzin_'.strtolower($station).'.png')){ $png = 'benzin_'.strtolower($station).'.png';
            // Sucht 'blind' nach Stationsnamen als Icon in der Form benzin_"stationsname".png
            }else{ $png = 'benzin_t.png'; }                // generelles Bild
            
            $wicon = ImageCreateFromPNG($iconpath.$png);
            ImageCopy($image, $wicon, 25, $yoffset, 0, 0, imagesx($wicon), imagesy($wicon));
            ImageDestroy($wicon);
            
            imagettftextboxopt($image, 12, 0, 50, $yoffset, $style['textcolor'], $style['font'], $text, $opt_entry);
            $yoffset += 14;
            
            //werden keine oeffnungszeiten gewuenscht, bitte die folgenden drei zeilen auskommentieren
            if ($this->config['oeffnungszeiten']==1){
                $text=$oeffnungszeiten;
                imagettftextboxopt($image, 12, 0, 50, $yoffset, $style['textcolor'], $style['font'], $text, $opt_entry);
                $yoffset += 18;
            }
        }
        $yoffset += 10;
        mysql_free_result($result);
    }


    private function addStation($preis, $datum, $station, $strasse, $ort, $oeffnungszeiten) {
        $query = "REPLACE INTO `if_tanken_mts` SET 
                    `preis`= '".mysql_real_escape_string($preis)."', 
                    `datum`= FROM_UNIXTIME($datum), 
                    `station`= '".mysql_real_escape_string($station)."',
                    `strasse`= '".mysql_real_escape_string($strasse)."',
                    `ort`= '".mysql_real_escape_string($ort)."',
                    `oeffnungszeiten`= '".mysql_real_escape_string($oeffnungszeiten)."'";

        mysql_query($query, $this->dbconn) or die('Error, insert query failed: '.mysql_error());
    }


}
 
Zuletzt bearbeitet:
Hallo Michael

Danke für das komplette Plugin,aber leider habe ich noch keine Benzinpreise.
Ich habe schon mal auf ERROR_All umgestellt,aber auch da finde ich keine Fehler die das BenzinPlugin betreffen.
Brauche ich die Erweiterung in der dbconn.php für das MTS Plugin noch,im Moment ist es noch drin,ganz am Ende
PHP:
// table "if_tanken_mts"
	if(mysql_num_rows( mysql_query("SHOW TABLES LIKE 'if_tanken_mts'", self::$connection) ) != 1) {
		$query = "CREATE TABLE `if_tanken_mts` (
					`preis` varchar(5) collate latin1_general_cs NOT NULL,
					`datum` datetime NOT NULL,
					`station` varchar(255) collate latin1_general_cs NOT NULL,
					`strasse` varchar(255) collate latin1_general_cs NOT NULL,
					`ort` varchar(255) collate latin1_general_cs NOT NULL,
					`oeffnungszeiten` varchar(255) collate latin1_general_cs NOT NULL,
					PRIMARY KEY  (`datum`,`preis`,`station`,`strasse`,`ort`,`oeffnungszeiten`)
				) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_cs; ";
		mysql_query($query, self::$connection) or die('Error, insert query failed: '.mysql_error());
	}

Wo könnte denn da der Fehler noch liegen??
Volker
 
Hallo Volker,
läuft das Plugin denn durch und zeigt nur nix an oder bricht es ab?
 
Du fragst mich wieder schwere Sachen,woran erkenne ich das denn??
Die Datenbank ist jedenfalls leer

Volker
 
das plugin läuft durch, bei mir auch das gleiche. es werden nur keine Preise angezeigt
 
Sorry für die Verwirrung, ich habe ein geändertes <div class übersehen. :blonk:

Ihr müsst noch folgendes tauschen:
PHP:
//alt
//$tankstellenarray = explode ('<div class="price_entry_table">',$responseEnd[0]);
//neu
$tankstellenarray = explode ('<div class="fuel-station-price">',$responseEnd[0]);

der komplette geänderte Quelltext ist hier gespeichert.

Gruß...
 
Hallo liebe Leute,

mal ganz unabhängig vom Benzin- Zeugs (was für mich interesant wäre ... 4,4l V8 ^^)...
Ich bin aus unerfindlichen Gründen erst heute auf diese extrem geniale Anwendung aufmerksam geworden (Schande über mich). Allerdings bin ich schon bei der Suche nach einem passenden WLAN- Display bei eBay komplett gescheitert; es scheint keine Bilderrahmen mit WLAN mehr zu geben?!? Ich habe natürlich auch die aktuell 133 Seiten dieses Freds nicht durchgelesen... ist ja nicht mehr zu schaffen. Daher kann es natürlich gut sein, das irgendwo in den 2655 Beiträgen ein Hinweis darauf vorhanden ist... Kann man mir wohl nachsehen, oder?

Es wäre vieleicht sinnig, im Eingangsartikel aktuell verwendbare Displays aufzulisten resp. nicht mehr erwerbbare Displays zu durchstreichen. Und da ich im Moment keinen Plan habe, welches Display ich verwenden kann, stehe ich z.Z. ziemlich auf dem Schlauch, was vermutlich vielen anderen auch so geht, die ganz frisch auf diese Möglichkeit treffen.

... wäre also ziemlich cool, wenn mir mal wer mit Hinweisen auf die Sprünge helfen könnte ...
 
@marvin424

leider klappts auch noch nicht mit dem geänderten "tankstellenarray"
 
Friday und Volker,
seid ihr euch sicher, dass das Plugin, in dieser Version mit diesen Parametern bei euch gelaufen ist?
Code:
sorte = 7
suchmodus = strikt
oeffnungszeiten = 0
ort_1 = "34454"
ort_2 = "34497"

Ich halte das nämlich für ein Gerücht! Entweder habt ihr eine andere Version des MTSPlugins gehabt oder eure config.ini war anders.

Ich habe mir den Code mal genauer unter die Lupe genommen:
Wenn man als suchmodus strikt eingibt und als ort_* eine PLZ (wie Volker es gepostet hat), dann werden die Suchergebnisse alle verworfen, weil eine PLZ niemals mit einem Ortsnamen übereinstimmen kann.
Also entweder schaltet ihr suchmodus strikt aus oder gebt als ort_* einen Ortsnamen ein, mit dem ein Suchergebnis auch übereinstimmen kann.

Das Kostet euch mal locker drei virtuelle Bier. :bier:

Gruß, Michael...
 
Hallo MIB,

Hallo liebe Leute,
Es wäre vieleicht sinnig, im Eingangsartikel aktuell verwendbare Displays aufzulisten resp. nicht mehr erwerbbare Displays zu durchstreichen.

das wurde bereits mit diesem separaten Thread versucht, hat haber nicht so ganz hingehauen :)

In der tat sind Wlan Rahmen nicht mehr ganz einfach zu bekommen oder für professionelle Anwendungen sündhaft teuer.
Es kursieren hier verschiedene Workarounds:
  • Ich nutze einen alten Samsung SPF107H mit "Minimonitorfunktion" und steuer ihn über USB per Raspi direkt an, Anleitung hier.
  • alte billig Adroid-Tablets als Display
  • ein ganz normaler kleiner Monitor per HDMI

Schau auch mal hier

Gruß, Michael...

P.S. kauf Dir einen 1.2l V4, das ist auf Dauer die billigstete Lösung :)
 
Zuletzt bearbeitet:
Hallo Michael

Danke für Deine Änderung ,jetzt funktionieren bei mir die Benzinpreise wieder.Super Arbeit.:bier::bier:
Der Suchmodus war bei mir eh ausgeschaltet.

@Friday Ich häng jetzt mein Plugin nochmal mit dran vielleicht funktioniert es bei Dir ja dann auch
PHP:
<?php
/***************************************************************************
 * InfoFrame (image generator for digital picture frames)
 * Copyright (C) 2010
 * 
 * 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/
 ***************************************************************************/
//version 0.4
//
//CHANGELOG:
// ## 0.4 ## 07.01.2014
// MTS Daten von clever-tanken.de werden nun wieder korrekt ausgelesen
// Das Auslesen ist nun schneller


class BenzinMTSPlugin implements IPlugin
{

    private $dbconn = NULL;
    private $config = NULL;

    public function __construct($dbconn, $config) {
        $this->dbconn = $dbconn;
        $this->config = $config;
    }

    public function doUpdate() {
        // Datenbankeinträge löschen
        mysql_query("START TRANSACTION", $this->dbconn);
        $query = "Delete from if_tanken_mts";
        mysql_query($query, $this->dbconn) or die('Error, delete query failed');

        // Preise und Tankstellen lesen - Meldestellenversion v0.1
        $i=0;
        $ortnumber = 0;
        $spritsorte=$this->config['sorte'];
        
        // jeden in config.ini eingetragenen Ort in file einlesen
        while ($ort = $this->config['ort_'.++$ortnumber]) {
                $uri  = 'http://www.clever-tanken.de/tankstelle_liste?'.'ort='.$ort.'&spritsorte='.$spritsorte;
                $uriElem = parse_url ( $uri );
                $fp = @fsockopen ( $uriElem ['host'], 80, $errno, $errstr, 10 );

                if (!$fp) {
                    //$title = "keine Tankstellen in $orte_fehlen gefunden";
                    //return;
                }else{

                    $request = "GET " . $uriElem ['path'] . (isset ( $uriElem ['query'] ) ? "?" . $uriElem ['query'] : "") . " HTTP/1.1\r\n";
                    $request .= "User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.2.1) Gecko/20021204\r\n";
                    $request .= "Host: " . $uriElem ['host'] . "\r\n";
                    $request .= "Connection: Close\r\n\r\n";

                    fwrite ( $fp, $request );
                    $response = "";
                    while ( ! feof ( $fp ) ) {
                        //$response .= fgets ( $fp, 128 );
                        $response .= fgets ( $fp, 512 );
                    }
                    fclose ( $fp );
                
                    // split headers from data
                    //$startindex = '<div id="mapcanvas" ng-show="visible" class="map_list row"></div>';
                    $startindex = '<div id="main-content" class="row tankstelle-liste">';
                    //$endindex = '<div class="row" id="zeug-das-niemand-liest"';
                    $endindex = '<div id="main-content-footer" class="col-xs-12 col-sm-12 col-md-12 col-lg-12  main-content-item">';  
                    $responseSplit=utf8_decode($response);
                    $responseStart = explode ( $startindex, $responseSplit, 2 );  
                    $responseEnd = explode ( $endindex, $responseStart[1], 2 );
                    //explode into single stations
                    //$tankstellenarray = explode ('<a href="/tankstelle_details/',$responseEnd[0]);
                    $tankstellenarray = explode ('<div class="fuel-station-price">',$responseEnd[0]);
                    foreach ($tankstellenarray as $i => $tanke) {
                        $zeile[$i++]=strip_tags($tanke,'<div><sup>'); 
                    }
                }

            // Tankstelle extrahieren und Adresse formatieren
            $doc = new DOMDocument();
            for ($j=1;$j<$i;$j++) {
                $str=$zeile[$j];
                //echo $j;
                $doc->loadHTML($str);
                $xpath = new DomXpath($doc);
                $div = $xpath->query('//*[@class="price"]')->item(0);
                $preis=$div->nodeValue;
                $div = $xpath->query('//*[@class="price_date"]')->item(0);
                $alter=$div->nodeValue;
                $div = $xpath->query('//*[@class="row fuel-station-location-name"]')->item(0);
                $name=$div->nodeValue;
                $div = $xpath->query('//*[@id="fuel-station-location-street"]')->item(0);
                $strasse=$div->nodeValue;
                $div = $xpath->query('//*[@id="fuel-station-location-city"]')->item(0);
                $stadt=$div->nodeValue;
                $div = $xpath->query('//*[@class="fuel-station-location-address-distance"]')->item(0);  
                $entfernung = strip_tags (trim ($div->nodeValue)); 

                /*
                echo "Preis: ".$preis."<br>";
                echo "Alter: ".$alter."<br>";
                echo "name: ".$name."<br>";
                echo "strasse: ".$strasse."<br>";
                echo "stadt: ".$stadt."<br>";
                echo "entfernung: ".$entfernung."<br>";
                */


                $ortok='';
                //strikte Ortsnamensuche oder nicht
                $ortscheck = preg_split('/\s+/', $stadt);
                //echo $ortscheck[2];
                if ($this->config['suchmodus']=='strikt'){
                    if (strtolower($ortscheck[2])==strtolower(trim(utf8_decode($ort)))){
                        $ortok=1; //echo "Gleich - ".$ortscheck[2]." ".utf8_decode($ort)."<br/>\n";
                    }else{
                    //echo "Unterschiedlich - ".$ortscheck[2]." ".utf8_decode($ort)."<br/>\n";
                    }
                }else{
                    $ortok=1;
                }
                
                $pre2is='';
                //Wenn Preis  und Datum angegeben, Preis auslesen
                if ($preis != "&nbsp;" && $preis != "" && $alter != "" && $ortok==1){
                    $preis=floatval($preis); //Preis festlegen
                    //echo $preis."<br/>\n";
                    //datum prüfen und in Unix-Zeitstempel konvertieren
                    if (stripos($alter,"vor")){
                        //Relative Zeit in der Form "gemeldet Heute vor xx Std. Min"
                        if (stripos($alter,"Std.")){
                            $faktor=3600; //60 Sekunden * 60 Minuten --> Stundenberechnung
                        }else if (stripos($alter,"Min.")){
                            $faktor=60; //60 Sekunden --> Minutenberechnung
                        }else if (stripos($alter,"Sek.")){
                            $faktor=1; //Wert ist bereits in Sekunden angegeben
                        }
                        $zeit=intval(preg_replace("/[^0-9]/","",$alter)); //nur die zeit übrig lassen
                        $datum=time()-$zeit*$faktor;
                        //echo "Relativzeit ".$datum."<br/>\n";
                    }else{
                        //Absolute Zeit wurde angegeben, kommt nicht mehr vor???
                        $d_arr = date_parse($alter);
                        $datum = mktime($d_arr['hour'],$d_arr['minute'],$d_arr['second'],$d_arr['month'],$d_arr['day'],$d_arr['year']);
                        //echo "Absolutzeit ".$datum."<br/>\n";
                    }
                    //echo date(DATE_ATOM, $datum)."<br/>\n";
                    // nur Preise mit aktuellem Datum berücksichtigen, siehe config.ini
                        $configalter = $this->config['max_age_in_hours'];
                        if ($datum>=strtotime("-$configalter hours") && $preis!='') {    // Preis ist aktuell
                            // Datensatz für Datenbank anlegen, Adresse ohne PLZ
                            //preis, datum, station, strasse, ort, entfernung
                            $this->addStation($preis, $datum, $name, $strasse, $stadt, $entfernung);
                        }
                }
            // in Datenbank schreiben
            mysql_query("COMMIT", $this->dbconn);
            }
        }
    }


    public function doOutput($image, $style, $updateData, &$yoffset) {

        if ($updateData) $this->doUpdate();

        $query = "SELECT * FROM `if_tanken_mts` ORDER BY `datum` DESC, `preis` ASC";
        $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' => false
        );

        switch ($this->config['sorte']){
            case 1:
                $sorte="Autogas";
                break;
            case 2:
                $sorte="LKW-Diesel";
                break;
            case 3:
                $sorte="Diesel";
                break;
            case 4:
                $sorte="Bioethanol";
                break;
            case 5:
                $sorte="Super E10";
                break;
            case 6:
                $sorte="Super Plus";
                break;
            case 7:
                $sorte="Super E5";
                break;
            case 8:
                $sorte="Erdgas";
                break;
            case 9:
                $sorte="Bio-Diesel";
                break;
            case 10:
                $sorte="Pflanzenöl";
                break;
            case 11:
                $sorte="Zweitakt";
                break;
        }
        
        // print header
        $iconpath = 'resources/benzin_icons/';
        
        $text = 'Kraftstoffpreise ('.$sorte.')'; //.$this->config['sorte'].')';
        imagettftextboxopt($image, 18, 0, 50, $yoffset, $style['textcolor'], $style['font'], $text, $opt_header);
        $icon = ImageCreateFromPNG ( $iconpath.'benzin_tank.png' );
        ImageCopy($image, $icon, 20, $yoffset-3, 0, 0, imagesx($icon), imagesy($icon));
        ImageDestroy($icon);
        $yoffset += 20;

        $counter=0;
        while ($row = mysql_fetch_assoc($result)) {
            $counter++;
            $rest = (mysql_num_rows($result) - $counter) + 1;
            $entrylimit = $this->config['max_displayed_stations'];
            if ( (($entrylimit) && ($counter > $entrylimit)) || (($yoffset >= (imagesy($image) - 36)) && ($rest > 1)) ) {
                // show only n mails. If more mails are available show hint "x more stations..."
                $rest = (mysql_num_rows($result) - $counter) + 1;
                if ($rest > 1)
                    $text = "... $rest weitere Tankstellen";
                else
                    $text = "... $rest weitere Tankstelle";
                //Text der weiteren Tankstellen auskommentiert        
                //imagettftextboxopt($image, 14, 0, 24, $yoffset, $style['textcolor'], $style['fontb'], $text, $opt_header);
                //$yoffset += 18;                    
                break;
            }

            //Anzeigetext
            $text = "";
            $euro = "\xE2\x82\xAc"; // Euro-Zeichen ist Multibyte char: \xE2\x82\xAc
            $preis = $row['preis'];
            $datum = strftime( "%d.%m. %H:%M", strtotime($row['datum']));
            $station = $row['station'];
            $ort = $row['ort'];
            $strasse = $row['strasse'];
            $oeffnungszeiten = $row['oeffnungszeiten'];
            
            $text = $preis." ".$euro."  - ".$datum." - ".$station." - ".$strasse." - ".$ort;

            // print station and icon                
            if (stripos($station,'aral') !== false){                    $png = 'benzin_aral.png';            // Aral-Tankstelle
            }elseif (stripos($station,'agip') !== false){                $png = 'benzin_agip.png';            // Agip-Tankstelle
            }elseif (stripos($station,'bft') !== false){                $png = 'benzin_bft.png';            // BFT-Tankstelle
            }elseif (stripos($station,'esso') !== false){                $png = 'benzin_esso.png';            // Esso-Tankstelle
            }elseif (stripos($station,'heinlein') !== false){            $png = 'benzin_h.png';                // Heinlein-Tankstelle
            }elseif (stripos($station,'jet') !== false){                $png = 'benzin_jet.png';            // Jet-Tankstelle
            }elseif (stripos($station,'omv') !== false){                $png = 'benzin_omv.png';            // OMV-Tankstelle
            }elseif (stripos($station,'shell') !== false){                $png = 'benzin_shell.png';            // Shell-Tankstelle
            }elseif (stripos($station,'star') !== false){                $png = 'benzin_star.png';            // Star-Tankstelle
            }elseif (stripos($station,'westfalen') !== false){            $png = 'benzin_westfalen.png';        // Westfalen-Tankstelle
            }elseif (file_exists($iconpath.'benzin_'.strtolower($station).'.png')){ $png = 'benzin_'.strtolower($station).'.png';
            // Sucht 'blind' nach Stationsnamen als Icon in der Form benzin_"stationsname".png
            }else{ $png = 'benzin_t.png'; }                // generelles Bild
            
            $wicon = ImageCreateFromPNG($iconpath.$png);
            ImageCopy($image, $wicon, 25, $yoffset, 0, 0, imagesx($wicon), imagesy($wicon));
            ImageDestroy($wicon);
            
            imagettftextboxopt($image, 12, 0, 50, $yoffset, $style['textcolor'], $style['font'], $text, $opt_entry);
            $yoffset += 14;
            
            //werden keine oeffnungszeiten gewuenscht, bitte die folgenden drei zeilen auskommentieren
            if ($this->config['oeffnungszeiten']==1){
                $text=$oeffnungszeiten;
                imagettftextboxopt($image, 12, 0, 50, $yoffset, $style['textcolor'], $style['font'], $text, $opt_entry);
                $yoffset += 18;
            }
        }
        $yoffset += 10;
        mysql_free_result($result);
    }


    private function addStation($preis, $datum, $station, $strasse, $ort, $oeffnungszeiten) {
        $query = "REPLACE INTO `if_tanken_mts` SET 
                    `preis`= '".mysql_real_escape_string($preis)."', 
                    `datum`= FROM_UNIXTIME($datum), 
                    `station`= '".mysql_real_escape_string($station)."',
                    `strasse`= '".mysql_real_escape_string($strasse)."',
                    `ort`= '".mysql_real_escape_string($ort)."',
                    `oeffnungszeiten`= '".mysql_real_escape_string($oeffnungszeiten)."'";

        mysql_query($query, $this->dbconn) or die('Error, insert query failed: '.mysql_error());
    }


}
 
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.