解析消防调度网站提要以使用包含在中的离散元素


Parse fire dispatch website feed to use discrete elements contained within

我希望能够解析以下网站,并将每个调度页面分离为离散元素,如时间、数据、地址和被调度到呼叫的每个单独单元等。

http://lebanonema.org/pager/html/monitor.html

我希望能够使用一个页面的离散元素,并在不同的网站上显示它们等等。

例如,我想打开

这个:

20:15:09 22-07-13 POCSAG-1 West Cornwall Town SPANGLER RD HORSESHOE PIKE MV-有人受伤的事故**非紧急响应**TK5消防箱37-03 EMS箱190-7车站05**

<tr>
<td class="COL2">20:15:09</td>
<td class="COL3">22-07-13</td>
<td class="COL4">POCSAG-1</td>
<td class="COL7">
West Cornwall Township SPANGLER RD HORSESHOE PIKE MV - Accident w/Injuries **NON EMERGENCY RESPONSE*** TK5 Fire-Box 37-03 EMS-Box 190-7
<span class="M">Station 05</span>
</td>
</tr>

我可以在另一个网站上以某种方式使用的单个元素,例如:

time:20:15:09
date:22-07-13
pageid:POCSAG-1
address:West Cornwall Township SPANGLER RD HORSESHOE PIKE
incident:MV - Accident w/Injuries
additional_details:**NON EMERGENCY RESPONSE***
responding_unit_1:TK5
responding_unit_2:
responting_unit_3:
etc...
fire_box:37-03 
ems_box:190-7
station:7

我在HTML、CSS和Java方面有一定的经验。我愿意学习更多。如果有人能为我提供一段代码片段来完成我的要求,我应该能够从中学到足够的东西,以便学会完成我的请求。

请记住,页面会不断更新,无论用什么方法来完成我的要求,都需要适应这样的环境。

您实际上在这里问了两个问题。一个是如何解析HTML(您可以在中找到如何在PHP中解析和处理HTML/XML?中概述的内容,由于这个问题已经得到了广泛的回答,我跳过了这一部分)。另一个是如何解析字符串。

分析字符串完全取决于字符串的格式。这通常通过PHP的字符串函数和PHP的正则表达式函数来完成。有关这些的更多信息,请参阅PHP手册。

在我已经概述的函数旁边,还需要字符串的格式规范。到目前为止,您的问题只包含字符串的示例,但是,规范缺少哪一部分是什么以及决策标准是什么。

您需要先指定,我会在编写第一行代码之前指定。最后,您可以用任何您喜欢的编程语言编写它。因此,对于PHP或Java来说,这并不重要,更重要的是您已经正确地指定了它的工作方式。然后将处理过程编码为代码。


一些粗略的示例代码(摘录),以演示如何在PHP:中

$url = 'http://lebanonema.org/pager/html/monitor.html';
$buffer = file_get_contents($url);
$buffer = utf8_encode($buffer);
$config = [
    'doctype'    => 'omit',
    'output-xml' => 1,
];
$buffer = tidy_repair_string($buffer, $config, 'utf8');
$xml = simplexml_load_string($buffer);
$nodes = new DecoratingIterator(
    new SimpleXMLXPathIterator($xml, '//tr[count(td) > 1]'),
    'NodeParser'
);
foreach ($nodes as $index => $node) {
    echo $index, ': ', json_encode($node, JSON_PRETTY_PRINT), "'n";
}

示例输出:

0: {
    "date": "23-07-13",
    "time": "07:56:28",
    "pageid": "POCSAG-1",
    "text": "Jackson Township W LINCOLN AVE N LOCUST ST MV -'nAccident w'/Injuries FG-3 E30 R31 Fire-Box 30-01 EMS-Box 140-2",
    "station": "Station 31"
}
1: {
    "date": "23-07-13",
    "time": "07:56:26",
    "pageid": "POCSAG-1",
    "text": "Jackson Township W LINCOLN AVE N LOCUST ST MV -'nAccident w'/Injuries FG-3 E30 R31 Fire-Box 30-01 EMS-Box 140-2",
    "station": "Station 30"
}
2: {
    "date": "23-07-13",
    "time": "07:56:25",
    "pageid": "POCSAG-1",
    "text": "Jackson Township W LINCOLN AVE N LOCUST ST MV -'nAccident w'/Injuries FG-3 E30 R31 Fire-Box 30-01 EMS-Box 140-2",
    "station": "Sta 31 Siren"
}
...
497: {
    "date": "22-07-13",
    "time": "12:21:27",
    "pageid": "POCSAG-1",
    "text": "South Lebanon Township 1700 S LINCOLN AVE VA'nMedical CenterAFA - Auto Fire Alarm FG-4 E25 E26 W36 R25 TK26 TK36'nAmbCo190 Fire-Box 25-08 EMS-Box 190-4",
    "station": "Station 26"
}
498: {
    "date": "22-07-13",
    "time": "12:21:20",
    "pageid": "POCSAG-1",
    "text": "South Lebanon Township 1700 S LINCOLN AVE VA'nMedical CenterAFA - Auto Fire Alarm FG-4 E25 E26 W36 R25 TK26 TK36'nAmbCo190 Fire-Box 25-08 EMS-Box 190-4",
    "station": "Station 25"
}
499: {
    "date": "22-07-13",
    "time": "12:18:19",
    "pageid": "POCSAG-1",
    "text": "Company 34 Correction..No Training TOMORROW'nnight..Training Will Be Held Thursday At 1830",
    "station": "Station 34"
}

这个例子还表明,您需要处理的不仅仅是解析,这是例如清理无效的HTML(在PHP中,Tidy可以用于此)和处理字符集编码。

NodeParser对象只是重载xpath()操作返回的具体<TR>元素——这是基本的SimpleXML解析,前面已经介绍过了。作为奖励,该对象实现了JsonSerializable接口,因此可以很容易地转换/显示。

使用解析器对象可以随着时间的推移更改和调整解析。例如,正如本示例代码所示,到目前为止,还没有对文本进行进一步解析(因为缺少规范)。

我希望这是有帮助的,并表明它可以至少。