Go Down

Topic: wert von Webseite übernehmen (Read 1 time) previous topic - next topic

markbee

#5
Jan 31, 2013, 05:20 pm Last Edit: Jan 31, 2013, 05:22 pm by markbee Reason: 1
Also mein Projekt mit dem Webseiten-Request und dem Parsen der Strings läuft schon seit Monaten ohne (Speicher-)Probleme.
Das ganze ist sogar eine Art rss-reader mit Ausgabe auf einem LCD-Display. Also nicht nur kurze Strings.
Du kannst ja gerne alternativ einen Vorschlag machen, das mit C/ C++ zu implementieren - das ist ja auch nicht so kompliziert. War mir aber zu aufwändig...

michael_x

Quote
Also mein Projekt mit dem Webseiten-Request und dem Parsen der Strings läuft schon seit Monaten ohne (Speicher-)Probleme.


Würde mich theoretisch schon interessieren, wie diese verbotenen Strings evtl. doch zu benutzen sind.
Wie kriegst du den request in den String ? Ist der immer gleich lang ?

Was nach meiner Erfahrung gar nicht geht, ist sowas:
Code: [Select]

String x = "";
...
while ( client.available() ) x += client.read();


oder ?

jurs


Ich möchte von einer Webseite ein Eingabefeld auslesen und den Wert verwerten nur leider weiss ich nicht wie das geht kann mir einer weiterhelfen ?


"Webseite" ist leider kein sehr aussagekräftiger Begriff.

Eine "Webseite" beispielsweise zum Anzeigen des Kurses der VW-Aktie kann so aussehen:
Code: [Select]
VW 182.20
Oder sie kann so aussehen wie der Quelltext der Seite http://de.finance.yahoo.com/lookup?s=DE0007664039

In einem Fall ist die Länge der Webseite kurz und knackig, liegt weit unterhalb der RAM-Speichergröße des Arduino und ist speziell für die weitere Verarbeitung durch automatische Abrufsysteme optimiert.

Im anderen Fall ist der Quelltext der Webseite lang, liegt oberhalb der RAM-Speichergröße eines Arduino UNO und ist speziell für die Betrachtung durch einen Menschen optimiert.

Den VW-Kurs kannst Du aus beiden Inhalten herausziehen. Aber im zweiten Fall ist es deutlich komplizierter.

Im ersten Fall würdest Du einfach eine Zeile komplett in den RAM-Speicher einlesen, dort die Daten herausholen.

Im zweiten Fall würdest Du einen "Parser" schreiben müssen, der den Seiteninhalt von Anfang bis Ende durchgeht, nach bestimmten "Stopp-Begriffen" sucht und immer nur kleine Teile der Webseite im Arbeitsspeicher des Arduino hält, bis die gewünschten Daten in dem Wust von Quelltext gefunden wurden.

Wie gesagt, das mit dem Parser, der ggf. wegen der Seitenlänge notwendig wird, wäre deutlich komplizierter. Und wie man es konkret am günstigsten hinbekommt, hängt auch vom konkreten Seiteninhalt ab. In einfacheren Fällen wäre es so, daß der interessierende Wert immer in einer bestimmten Zeile der Seite steht. Sagen wir mal, der gesuchte Wert steht in Zeile 121 von 500 Zeilen insgesamt. Dann bräuchte der Parser nur die Zeilenende-Zeichen abzählen und holt sich die gesuchte Zeile ins RAM. Aber in vielen Fällen muss man wohl auch mehr machen als nur Zeilenende-Zeichen zählen, das hängt eben ganz vom konkreten Fall ab.


markbee

Wenn Ihr denn so besorgt um das RAM vom Arduino seid ;)

Warum nicht eine PHP-Seite auf einem Server ablegen, diese die Parser-Arbeit machen lassen und dann einfach den geparsten Wert, der vorher in eine txt-Datei auf dem Server abgelegt wurde, mit dem Arduino einlesen?
Kann man ja auch lokal z.B. mit XAMMP realisieren.

Mit PHP & cURL ist das Parsen z.B. relativ einfach zu bauen.

Da bleibt das arme Arduino-RAM verschont ;)

pylon

Quote
Warum nicht eine PHP-Seite auf einem Server ablegen


Wenn einem ein solcher zur Verfügung steht, ist das eine gangbare Option. Im anderen Fall muss man sich eben anders behelfen.

Quote
Wenn Ihr denn so besorgt um das RAM vom Arduino seid


Auch wenn Du Dich darüber lustig machst: auf einem Controller mit 2kB RAM muss man sich Gedanken um den Speicher machen, sonst kriegt man schnell ein unkontrolliertes Verhalten. Wenn Du das beherzigst, kannst Du einen Arduino Jahre (gut ich hab's bis jetzt auf 1.5 Jahre gebracht, aber ich bin sicher, hier im Forum gibt's Leute, die das toppen können) durchlaufen lassen, ohne Fehler oder Probleme. Wenn Du die String-Klasse normal benützt, wirst Du das aber nicht hinkriegen, komische Resets und Freezes sind normalerweise die Folge (nach kurzer Zeit, nach Minuten oder gar Sekunden, je nachdem, wie oft die String-Klasse benützt wird).

Go Up