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

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


}
 
ja hatte ich auch schon so, aber ich hatte noch einen kleinen Fehler bei mir.
jetzt gehts erstmal. Aber wie kann nochmal ich die Preise aufsteigend darstellen?
 
Hi Friday,
jetzt machst Du bereits seit dreieinhalb Jahren mit dem Infoframe rum und hast immer noch nicht SQL gelernt. Schande über Dich ;)

Änder
PHP:
$query = "SELECT * FROM `if_tanken_mts` ORDER BY `datum` DESC, `preis` ASC";
nach
PHP:
$query = "SELECT * FROM `if_tanken_mts` ORDER BY `preis` ASC, `datum` DESC";
 
Kostenlos!

Statistik des Forums

Themen
248,894
Beiträge
2,304,379
Mitglieder
378,588
Neuestes Mitglied
k3rp