Pages: 1 [2]   Go Down
Author Topic: Online Abfrage von Benzin Preisen  (Read 1600 times)
0 Members and 1 Guest are viewing this topic.
DE
Offline Offline
God Member
*****
Karma: 21
Posts: 710
| Germany | NRW |
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Schnelle Möglichkeit zum Testen wäre, die Seite mal zu teilen und den unteren Bereich durchsuchen lassen - nur zum checken ob es werkelt  smiley-cool
Logged

Dum spiro, spero - if you find my posting helpful, please click my Karma smiley
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Do you know A.R.T

Mönchengladbach, Germany
Offline Offline
Full Member
***
Karma: 6
Posts: 140
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Das heißt:
1. Abgespeckter Quelltext im 192-er Netz als Quelle.hmtl speichern.
2. client.print("Host: 192.168.2.5"); // Speicherort in  meinem Netz
3. client.print("GET /Quelle.html HTTP/1.1");

Eventuell müsste ich noch Pfade angeben.

Wäre das so machbar?

Gruß Eberhard

Logged

Oscar Wilde: "Am Ende wird alles gut, und wenn es noch nicht gut ist - ist es nicht das Ende."  

DE
Offline Offline
God Member
*****
Karma: 21
Posts: 710
| Germany | NRW |
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Joa, sollte....
Logged

Dum spiro, spero - if you find my posting helpful, please click my Karma smiley
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Do you know A.R.T

Offline Offline
Edison Member
*
Karma: 21
Posts: 1419
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Am Beispiel einer Tankstelle im Bereich meines Wohnortes würde es wie folgt aussehen:
Code:
client.println("GET /detail?id=14734438&t=WILMS%2C Dieselstr. 14-20%2C Mönchengladbach HTTP/1.1");
client.println("Host: http://mehr-tanken.de")
Kurze Anmerkung hierzu, das "http://" vor dem Eintrag "Host: http://mehr-tanken.de" muss weg.
Der HTTP Parameter "Host" bekommt nur den Servernamen.
Mario.
Logged

Mönchengladbach, Germany
Offline Offline
Full Member
***
Karma: 6
Posts: 140
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

@mkl0815
Du hast Recht. Mein Fehler, wirkt sich nicht auf den momentanen Fehler aus. Ist ja einen Monat her.

Ich habe mir den Datenstrom auf der SerialMonitor nochmal genau angesehen und merke gerade, dass ein <div> - Container gar nicht gelesen wird. Fiddler2 zeigt mir aber alles komplett - mit fehlendem <div>-Container. Also wertet der Arduino diesen Container nicht aus. Fehlen mir im Header einige Einstellungen?
Mein Request:
GET /tankstelle_liste?spritsorte=7&r=5&ort=41189&lat=&lon= HTTP/1.1
Antwort vom Server(Fiddler2):
Host: www.clever-tanken.de
User-Agent: Mozilla/5.0 (Windows NT 6.0; rv:26.0) Gecko/20100101 Firefox/26.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: de,de-de;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Connection: keep-alive

Muss ich Einstellungen ändern?

Gruß
Eberhard



 
Logged

Oscar Wilde: "Am Ende wird alles gut, und wenn es noch nicht gut ist - ist es nicht das Ende."  

Offline Offline
Edison Member
*
Karma: 21
Posts: 1419
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Nein, eigentlich sollte das passen. Hab das selbst gerade mal getestet mit dem einfache WebClient Beispiel der Ethernet-Lib.
Klappt recht gut. Allerdings wird das Parsen der HTML-Daten spannend, da die Webseite 58.000 Bytes groß ist.
Mit dem Textfinder klappt das aber recht gut:
Ausgabe auf dem Serial Monitor:
Quote
connecting...
connected
Tankstelle 1
Wilms-Wickrath, Dieselstr. 14-20, 1.449 Euro
Tankstelle 2
OIL!, Karlstrasse  59, 1.479 Euro
Tankstelle 3
Shell, HARDTER STR. 133, 1.489 Euro
Tankstelle 4
Shell, MARIE-BERNAYS RING, 1.489 Euro
Tankstelle 5
Shell, DUVENSTRASSE. 339, 1.499 Euro
Tankstelle 6
TOTAL, DAHLENER STR. 520, 1.519 Euro

Hier der Code dazu:
Code:

#include <SPI.h>
#include <Ethernet.h>
#include <TextFinder.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
char server[] = "www.clever-tanken.de";    // name address for Google (using DNS)
EthernetClient client;

TextFinder finder( client);

char preis1[10];
char preis2[5];
char tankstelle[100];
char adresse[100];

void setup() {
 // Open serial communications and wait for port to open:
  Serial.begin(9600);
   while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }

  // start the Ethernet connection:
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    Ethernet.begin(mac);
  }
  // give the Ethernet shield a second to initialize:
  delay(1000);
  Serial.println("connecting...");

  // if you get a connection, report back via serial:
  if (client.connect(server, 80)) {
    Serial.println("connected");
    // Make a HTTP request:
    client.println("GET /tankstelle_liste?spritsorte=7&r=5&ort=41189&lat=&lon= HTTP/1.1");
    client.println("Host: www.clever-tanken.de");
    client.println("Connection: close");
    client.println();
  }
  else {
    // kf you didn't get a connection to the server:
    Serial.println("connection failed");
  }
}

void loop()
{
  int counter=1;
  if (client.connected()) {
    while(finder.find("addPoi")) {
       finder.getString("class=\"price\">","<",preis1,10);
       finder.getString("<sup>","</sup>",preis2,5);
       finder.getString("location_name\">","</div>",tankstelle,100);
       finder.getString("street_number\">","</div>",adresse,100);
       Serial.print("Tankstelle ");
       Serial.println(counter++);
       Serial.print(tankstelle);
       Serial.print(", ");
       Serial.print(adresse);
       Serial.print(", ");
       Serial.print(preis1);
       Serial.print(preis2);
       Serial.println(" Euro");
       
    }
  client.stop();
  }
  while(1) {};
}
Logged

Mönchengladbach, Germany
Offline Offline
Full Member
***
Karma: 6
Posts: 140
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Nach einem halben Jahr habe ich das Thema nochmal aufgegriffen und an dem Thema weitergearbeitet.
@mkl0815:
Das Ergebnis hat mich auf den ersten Blick schon beeindruckt, Aber die Antwort auf die Abfrage beginnt nicht mit dem ersten sondern mit der 2. Tankstelle. Danach folgt die vierte usw. Zuerst dachte ich, das wäre ein Problem der Laufzeiten. Aber egal was ich gemacht habe => Null Erfolg.

Kann mir jemand sagen wo der Hase begraben ist?

Gruß Eberhard
Logged

Oscar Wilde: "Am Ende wird alles gut, und wenn es noch nicht gut ist - ist es nicht das Ende."  

Mönchengladbach, Germany
Offline Offline
Full Member
***
Karma: 6
Posts: 140
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Nach langem Suchen habe ich den Schwachpunkt gefunden.

Die Zeile:
Code:
finder.getString("<sup>","</sup>",preis2,5);
macht Ärger.

Wenn sie geändert wird in :
Code:
finder.getString(">","<",preis2,5);

werden alle Tankstellen angezeigt, beginnend mit der Peiswertesten. Ist wohl innerhalb der Suchfunktion ein Zeitproblem. Je kürzer der Suchstring ist, um so schneller das Ganze. Wurden vorher max 5 Tankstellen angezeigt, werden nun deutlich mehr angezeigt. Die Anzahl hängt von der Geschwindigkeit des Servers ab. Ist aber m.E. unkritisch, da mich ohnehin nur die 3 preiswertesten Tankstellen interessieren.

Wenn jemand da drauße anderer Meinung ist, würde ich gerne wissen warum.

Gruß
Eberhard
Logged

Oscar Wilde: "Am Ende wird alles gut, und wenn es noch nicht gut ist - ist es nicht das Ende."  

Offline Offline
Newbie
*
Karma: 0
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo Eberduino,

vielleicht kannst Du das Endergebnis hier einmal veröffentlichen.
Das wäre toll.
Logged

Mönchengladbach, Germany
Offline Offline
Full Member
***
Karma: 6
Posts: 140
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo Zusammen,

da das Forum zu diesem Projekt Wesentliches beigetragen hat, besteht auch ein Anrecht zu wissen, was daraus geworden ist:

Ich lasse mir die preiswerteste Tanke in meinem Bereich (Eingabe der PLZ) im Umkreis von 5km für meine Spritsorte auf meiner Squeezebox-Touch anzeigen. Ich könnte mir auch ein bestimmtes Musikstück zusätzlich einspielen lassen (Muss ich aber nicht haben). Desweiteren gibt es in den Sketch auch einen einstellbaren Schwellwert, der die Anzeige nur dann aktiviert wenn sie den eingestellten Wert (Spritpreis) unterschreitet

Hier mal ein Musterbild meiner Anzeige:



Die Darstellungen sind zu den echten Squeezeboxen identisch. Hier wurden nur die Softwarevarianten (Freeware) dargestellt.

Ein Hinweis: Dies ist nur eine Machbarkeitsstudie und nicht für den alltäglichen Gebrauch vorgesehen!

Es ist schon skuril: Die Markttransparenzstelle für Kraftstoffpreise (MTS-K) stellt ausgewählten Firmen die Rohdaten zur Verfügung, die sie auf ihrer WEbsite veröffentlichen. Eine XML-Datei stellt die MTS-K nicht zur Verfügung. Eine Weiterverarbeitung  der MTK-Daten ist offensichtlich nicht gewollt. Deshalb ist dieses nur eine Machbarkeitsstudie, deren Ergebnis ich euch nicht vorenthalten möchte.

Gruß Eberhard


* V105_Spritpreis_dspl_Squeezebox.ino (11.61 KB - downloaded 7 times.)
Logged

Oscar Wilde: "Am Ende wird alles gut, und wenn es noch nicht gut ist - ist es nicht das Ende."  

Pages: 1 [2]   Go Up
Jump to: