X-Git-Url: https://git.cweiske.de/linksys-wrt3g-tools.git/blobdiff_plain/ee05c3a28ae30f6b30b559715eef017e8fa47f5a..fa9736f9dc8efee478bfbf5ede199842099250a0:/Wrt3g/HtmlParser.php diff --git a/Wrt3g/HtmlParser.php b/Wrt3g/HtmlParser.php index 03ac574..246cb6f 100644 --- a/Wrt3g/HtmlParser.php +++ b/Wrt3g/HtmlParser.php @@ -1,15 +1,15 @@ -* @license AGPL v3 -* @link http://cweiske.de/linksys-wrt3g-tools.htm -*/ + * HTML parsing for the linksys router HTML pages + * + * PHP version 5 + * + * @category Tools + * @package linksys-wrt3g-tools + * @author Christian Weiske + * @license AGPL v3 + * @link http://cweiske.de/linksys-wrt3g-tools.htm + */ class Wrt3g_HtmlParser { protected static $arTranslations = array( @@ -19,27 +19,55 @@ class Wrt3g_HtmlParser 'GPRS_MSG.ACQUIRING' => 'aquiring', 'GPRS_MSG.WWBEAR_GPRS' => 'GPRS', 'GPRS_MSG.WWBEAR_UMTS' => 'UMTS', + 'GPRS_MSG.GOOD' => 'good', + 'GPRS_MSG.EXCELLENT' => 'excellent', ); /** - * Parses the body of /index_wstatus1.asp and returns extracted values. - * - * @param string $body HTML document to parse - * - * @return array Array of key-value pairs - */ + * Parses the body of /index_wstatus1.asp and returns extracted values. + * + * @param string $body HTML document to parse + * + * @return array Array of key-value pairs, probably with "type", "network" and + * "signal strength" + */ public function index_wstatus1($body) { - $arRetval = array(); + $doc = new DomDocument(); + $doc->loadHtml($body); + $xpath = new DOMXPath($doc); + $entries = $xpath->query('//table/tr/td'); + $arMatches = array(); - preg_match_all('#>Capture\(([^)]+)\)saveXML($entry); + $s = str_replace( + array(''), + '', $s + ); + $s = strip_tags($s); + //some strange utf8 space char + $s = str_replace("\xC2\xA0", ' ', $s); + $s = trim($s); + $s = str_replace( + array('Capture(', ') :'), + '', $s + ); + if (substr($s, -1) == ')') { + $s = substr($s, 0, -1); + } + $arMatches[] = $s; + } + + + $arRetval = array(); $arData = array(); - reset($arMatches[1]); - while (current($arMatches[1])) { - $key = current($arMatches[1]); - $value = next($arMatches[1]); + reset($arMatches); + while (current($arMatches)) { + $key = current($arMatches); + $value = next($arMatches); if (isset(self::$arTranslations[$key])) { $key = self::$arTranslations[$key]; } @@ -47,7 +75,7 @@ class Wrt3g_HtmlParser $value = self::$arTranslations[$value]; } $arRetval[$key] = $value; - next($arMatches[1]); + next($arMatches); } return $arRetval; @@ -56,13 +84,13 @@ class Wrt3g_HtmlParser /** - * Parses the body of /index_wstatus2.asp and returns extracted values. - * - * @param string $body HTML document to parse - * - * @return array Array with "connection" as key and one of "connecting", - * "connected" or "disconnected" as value. - */ + * Parses the body of /index_wstatus2.asp and returns extracted values. + * + * @param string $body HTML document to parse + * + * @return array Array with "connection" as key and one of "connecting", + * "connected" or "disconnected" as value. + */ public function index_wstatus2($body) { preg_match('/var status2 = "(.+)"/', $body, $arMatches); @@ -73,4 +101,48 @@ class Wrt3g_HtmlParser //Connected return array('connection' => strtolower($strStatus)); } + + + + /** + * Parses the HTML body of /Status_NoAuth.asp and returns the extracted + * values. + * + * @param string $body HTML document to parse + * + * @return array FIXME + */ + public function status_noauth($body) + { + $body = str_replace( + array(' ', '', ''), + '', $body + ); + //var_dump($body);die(); + $doc = new DomDocument(); + libxml_use_internal_errors(true);//html is broken + $doc->loadHtml($body); + $xpath = new DOMXPath($doc); + $trs = $xpath->query('//table//table/tbody/tr'); + foreach ($trs as $tr) { + /* + var_dump( + '--------',$doc->saveXML($tr), + $xpath->query('td', $tr)->length); + */ + $titleItems = $xpath->query('td[@width=125]/text()', $tr); + $valueItems = $xpath->query('td[@width=296]/*[1]', $tr); + if ($titleItems->length && $valueItems->length) { + $title = $titleItems->item(0); + $value = $valueItems->item(0); + + var_dump( + $doc->saveXML($title) . "\n" + . $doc->saveXML($value) . "\n\n" + ); + } + } + + $arMatches = array(); + } } \ No newline at end of file