Wyciąganie danych z HTML

0

Cześć,

Robię ciekawy projekt który w skrócie polega na tym że mam kilka małych urządzeń, które mają czujniki temperatury i przekazują dane o obecnej temperaturze. Mam na nich zainstalowany system Contiki OS i skonfigurowany webserver, który wyświetla mi dane, gdy wejdę na adres w IPv6 - http://[aaaa::11:22ff:fe33:4466]/status.shtml

Na tej stronie wyświetlane są dane z wszystkich czujników. Następnym krokiem jest pobranie tych danych i zapisanie ich do bazy, a następnie prezentacja na wykresie.

W czym problem?

Używam PHP Simple HTML DOM Parser do wyciągnięcia danych z HTML. Problem w tym że dane są jako tekst w htmlu, nie są podpięte pod żadne pole więc nie wiem zbytnio jak je wyciągnąć. Tak wygląda część kodu źródłowego strony z zapisami danych z sensorów:

<h4>Sensors</h4><em>Temperature:</em> 34.3 C <em>Battery:<em> 2925 mv<br><em>

PHP Simple HTML DOM Parser wyciąga mi cały tekst i zapisuje go w najprostszej postaci (plaintext)

Jak mając taki tekst wyciągnąć z niego wartość temperatury? Stałą wartość umiałbym, ale tutaj temp. zmienia się co jakiś czas więc nie mogę użyć tutaj wyszukiwania ciągu znaków.

A może istnieje jakiś inny sposób, ew inna konfiguracja PHP Simple HTML DOM Praser'a aby wyciągnąć tylko interesujące mnie dane?

Z góry dzięki za pomoc! :)

0

Może Regex ?

0

Myslałem żeby potraktować caly tekst wyrzucony przez skrypt jako string i tam znaleźć 'temperature' i pobrać np. 5 kolejnych znaków za tym ale nie mam pojęcia jak to zrobić.

0

Okej, więc spróbowałem coś tam zrobić z Regexem. Stosuję taki kod

 <?php
include('simplehtmldom/simple_html_dom.php');
$node_url = "http://[aaaa::11:22ff:fe33:4466]/status.shtml";

$html = file_get_html($node_url);
$text  = $html->plaintext;
echo $text;

$pattern = "Temperature";
if (preg_match($pattern, $text, $matches)) {
  echo "Match was found <br />";
  echo $matches[0];
}
?>

I wypyszcza mi błąd:
Warning: preg_match() [function.preg-match]: Delimiter must not be alphanumeric or backslash in C:\wamp\www\getting_data\index.php on line 10

Czy to możliwe że dzieje się tak bo tekst nie jest ciągły? Bo plaintext wyrzuca mi czysty tekst ale z nowymi liniami etc.

0

Ja bym nie szukał Temperatura, ale "liczba z kropką, spacja C" - chyba będzie lepiej. A błąd dotyczy braku delimitera - znaczków w rodzaju / na początku i na końcu regexpa.

Jako $pattern spróbuj: /[0-9\.]+ C/.

0

Jak edytować to co jest w patternie, troche nie ograniam co mam tam podać żeby znajdowało mi tekst za poszukiwanym tekstem.

Mam: Tx= 1142 Rx=225

I chcę żeby 1142 się wyświetliło więc robię:

$pattern_tx = "/[0-9\.]+ Rx/";

Ale nie jest to najlepsze wyjście, chciałbym aby mi znalazło tekst z po Tx a nie z przed Rx.

1 użytkowników online, w tym zalogowanych: 0, gości: 1