X-Git-Url: https://git.cweiske.de/linksys-wrt3g-tools.git/blobdiff_plain/c5139cfd6db3f77bfd3bb3dc36bb915c8a014e0f..cd83f80d486588f4c97cf389a26e7f7452d554c0:/Wrt3g/HtmlParser.php diff --git a/Wrt3g/HtmlParser.php b/Wrt3g/HtmlParser.php index 970b170..ac4db35 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( @@ -21,17 +21,26 @@ class Wrt3g_HtmlParser 'GPRS_MSG.WWBEAR_UMTS' => 'UMTS', 'GPRS_MSG.GOOD' => 'good', 'GPRS_MSG.EXCELLENT' => 'excellent', + 'GPRS_MSG.CTIME' => 'connection time', + 'GPRS_MSG.CFW' => 'card firmware', + 'GPRS_MSG.CMOD' => 'card model', + 'GPRS_MSG.CREV' => 'card revision', + 'GPRS_MSG.IMSI' => 'IMSI', + 'GPRS_MSG.SESSIONUSAGE' => 'session usage', ); /** - * 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" + * - "signal strength" + */ public function index_wstatus1($body) { $doc = new DomDocument(); @@ -83,16 +92,19 @@ 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); + if (!isset($arMatches[1])) { + return array(); + } $strStatus = $arMatches[1]; //Connecting @@ -100,4 +112,84 @@ 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 Array of key-value pairs with the following keys: + * - type + * - network + * - signal strength + * - connection time + * - session usage (array) + * - card model + * - card revision + * - card firmware + * - IMSI + * + * @todo FIXME implement "connection" value as index_wstatus2() does it + */ + public function status_noauth($body) + { + $body = str_replace( + array(' ', '', ''), + '', $body + ); + + $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'); + $arRaw = array(); + foreach ($trs as $tr) { + $titleItems = $xpath->query('td[@width=125]/text()', $tr); + $valueItems = $xpath->query('td[@width=296]/*[1]', $tr); + if ($titleItems->length && $valueItems->length) { + $title = substr($doc->saveXML($titleItems->item(0)), 8, -2); + $value = $doc->saveXML($valueItems->item(0)); + $arRaw[self::$arTranslations[$title]] = $value; + } + } + + foreach ($arRaw as $key => &$value) { + $value = trim(strip_tags($value)); + if (substr($value, 0, 8) == 'Capture(') { + $value = self::$arTranslations[substr($value, 8, -1)]; + } + } + unset($value); + + if (isset($arRaw['connection time'])) { + $arRaw['connection time'] = str_replace( + array( + ' Capture(GPRS_MSG.HOURS)', + ' Capture(GPRS_MSG.MINUTE)', + ' Capture(GPRS_MSG.SECOND)', + ), + array( + 'h', 'm', 's' + ), + $arRaw['connection time'] + ); + } + + if (isset($arRaw['session usage'])) { + $arS = explode( + 'TX = ', + str_replace('RX = ', '', $arRaw['session usage']) + ); + $arRaw['session usage'] = array( + 'received' => $arS[0], + 'sent' => $arS[1] + ); + } + + return $arRaw; + } } \ No newline at end of file