Ik heb ff een simpel parsertje gemaakt voor de XML file van de FOK! Remote Tracker (altijd leuk toch?), die om de 5 minuten remote.xml naar me eigen servertje kopieert. Dat werkte allemaal leuk en aardig, maar nu staat er opeens een & in een Fok! Remote Tracker (nieuw nieuws) item. Daar begint m'n parser over te mekkeren, is hier iets aan te doen?
Zoals je mischien ziet heb ik het een klein beetje van Zend.com/nogiets gekopieerd
. Het stukje XML in kwestie zag er zo uit:
PHP:
1
| <?// Kijk of bestand overgehaald moet worden$tijd = file('tijd.txt');$nu = time();$wanneer = (5 * 60); // Om de hoe veel seconcden herladen? 5x60seconden = 5 minuten!if(($tijd[0] + $wanneer) <= $nu){ $xml = file('http://www.athena.fokzine.net/~danny/remote.xml'); $file = fopen('remote.xml', 'w'); foreach($xml as $line) { fputs($file, $line); } fclose($file); $uurfile = fopen('tijd.txt','w'); fputs($uurfile, $nu); fclose($uurfile); $lfile = fopen('laatse.txt','w'); fputs($lfile, date('H:i')); fclose($lfile);}// Start parsing$xmlSource="remote.xml";$id="";$titel="";$time="";$timestamp="";$reacties="";$currentElement="";$nieuws=array();function startElement($parser,$name,$attr){ $GLOBALS['currentElement']=$name; }function endElement($parser,$name){ $elements=array('id','titel','time','timestamp','reacties'); if(strcmp($name,"nieuws")==0){ foreach($elements as $element){ $temp[$element]=$GLOBALS[$element]; } $GLOBALS['nieuws'][]=$temp; $GLOBALS['id']=""; $GLOBALS['titel']=""; $GLOBALS['time']=""; $GLOBALS['timestamp']=""; $GLOBALS['reacties']=""; }}function characterData($parser, $data) { $elements = array ( 'id', 'titel', 'reacties', 'time', 'timestamp' ); foreach ($elements as $element) { if ($GLOBALS["currentElement"] == $element) { $GLOBALS[$element] .= $data; } } }function parseFile(){ global $xmlSource,$nieuws; $xml_parser=xml_parser_create(); xml_set_element_handler($xml_parser,"startElement","endElement"); xml_set_character_data_handler($xml_parser,"characterData"); xml_parser_set_option($xml_parser,XML_OPTION_CASE_FOLDING,false); if(!($fp=fopen($xmlSource,"r"))){ die("Cannot open $xmlSource "); } while(($data=fread($fp,4096))){ if(!xml_parse($xml_parser,$data,feof($fp))){ die(sprintf("XML error at line %d column %d ", xml_get_current_line_number($xml_parser), xml_get_current_column_number($xml_parser))); } } xml_parser_free($xml_parser); return $nieuws; }$result=parseFile();$result = array_slice($result,1,5);foreach($result as $arr){echo("<a href=\"http://frontpage.fok.nl/news.fok?id=$arr[id]\" class=\"noline\" target=\"_blank\">$arr[titel]</a><br>");}?> |
Zoals je mischien ziet heb ik het een klein beetje van Zend.com/nogiets gekopieerd
code:
1
2
3
4
5
6
7
| <nieuws>
<id>19926</id>
<titel>Gedeelte verdieping V&D stort in</titel>
<time>27-06-2002 10:58</time>
<timestamp>1025168326</timestamp>
<reacties>28</reacties>
</nieuws> |