我在PHP脚本中使用PHP Simple HTML DOM Parser来将网站中的信息解析为JSON对象。我的JSON对象最终应该这样格式化:
最多5个对象(周一至周五)或更少(周二至周五等)的数组。
所有这些对象都应该有两个数组,一个名为food1
,另一个名为food 2
。这两个数组都应包含多个食品名称及其价格。我认为在JSON中它看起来像这样:
{
"day" : [
{
"food1" : [
{
"price" : "1.00",
"foodname" : "test"
},
{
"price" : "1.00",
"foodname" : "test"
}
],
"food2" : [
{
"price" : "2.00",
"foodname" : "test2"
},
{
"price" : "2.00",
"foodname" : "test2"
}
]
},
{
"food1" : [
{
"price" : "1.00",
"foodname" : "test"
},
{
"price" : "1.00",
"foodname" : "test"
}
],
"food2" : [
{
"price" : "2.00",
"foodname" : "test2"
},
{
"price" : "2.00",
"foodname" : "test2"
}
]
},
{
"food1" : [
{
"price" : "1.00",
"foodname" : "test"
},
{
"price" : "1.00",
"foodname" : "test"
}
],
"food2" : [
{
"price" : "2.00",
"foodname" : "test2"
},
{
"price" : "2.00",
"foodname" : "test2"
}
]
},
{
"food1" : [
{
"price" : "1.00",
"foodname" : "test"
},
{
"price" : "1.00",
"foodname" : "test"
}
],
"food2" : [
{
"price" : "2.00",
"foodname" : "test2"
},
{
"price" : "2.00",
"foodname" : "test2"
}
]
},
{
"food1" : [
{
"price" : "1.00",
"foodname" : "test"
},
{
"price" : "1.00",
"foodname" : "test"
}
],
"food2" : [
{
"price" : "2.00",
"foodname" : "test2"
},
{
"price" : "2.00",
"foodname" : "test2"
}
]
}
]
}
无论如何,我以前只使用过Objective-C并且在PHP中解决这个问题时遇到了问题。我还在Objective-C中实现了一个有效的解析器,但是如果站点改变了它们的结构,我将不得不重新提交整个应用程序等。这就是为什么我想创建一个Web服务,我可以在其中动态更改解析器该应用程序。我得到的就是:
<?php
include('simple_html_dom.php');
$opts = array('http'=>array('header' => "User-Agent:MyAgent/1.0\r\n"));
$context = stream_context_create($opts);
$html = file_get_html('http://www.studentenwerk-karlsruhe.de/de/essen/?view=ok&STYLE=popup_plain&c=erzberger&p=1&kw=3',false,$context);
foreach($html->find('b') as $e)
echo $e;
?>
这给了我所有的食物名称,但它没有按天分类,也没有按照不同的食物菜单排序(每天有两个不同的菜单,称为food1
和food2
在我的示例JSON对象中。)
在我的Objective-C解析器中,我刚刚创建了一个新的日期对象,当食物名称为“SchniPoSa”并将以下所有食物名称添加到food1
,直到出现食物名称“Salatbuffet”和所有以下食物名称我添加到food2
数组,直到出现下一个“SchniPoSa”食物名称。但这并不是很好,因为结构可能每天都在变化。
另外,我甚至不知道如何在PHP中实现它。在我的小PHP脚本中,我也没有解析标签<span class="bgp price_1">
中的所有价格。
以下是我要解析信息的网站:
http://www.studentenwerk-karlsruhe.de/de/essen/?view=ok&STYLE=popup_plain&c=erzberger&p=1&kw=3
是否有人可以帮助我解析有效的JSON对象中的信息,如下所述?
答案 0 :(得分:4)
刚刚看到你的消息,并意识到我没有回复你这件事。 也许这会引导你朝着正确的方向前进:
<?php
$opts = array('http'=>array('header' => "User-Agent:MyAgent/1.0\r\n"));
$context = stream_context_create($opts);
$html = file_get_contents('http://www.studentenwerk-karlsruhe.de/de/essen/?view=ok&STYLE=popup_plain&c=erzberger&p=1&kw=3',false,$context);
libxml_use_internal_errors(true);
$dom = new DomDocument;
$dom->loadHTML($html);
$xpath = new DomXPath($dom);
$nodes = $xpath->query("//table[@class='easy-tab-dot']");
//header("Content-type: text/plain");
foreach ($nodes as $i => $node) {
$arr = array();
$children = $node->childNodes;
foreach ($children as $child) {
$tmp_doc = new DOMDocument();
$tmp_doc->appendChild($tmp_doc->importNode($child,true));
#echo $tmp_doc->saveHTML();
print_r( $child );
}
echo "#######################################################################################";
}