XML parser
Ik heb een (groot) probleem met een team_parse voor whatpulse.
De bedoeling is redelijk simpel :
-XML parser maken met php -> zet alle waardes in database
-En daarna worden waardes uit database gehaald voor statistieken.
Ik heb al de standaard parser die ze gebruiken bij whatpulse gedownload (staat op officiele site) en hij stopt bij een speciaal character . Het moet eigenlijk een é (e acute ofzo) zijn maar hij ziet dat als een speciaal character (in de XML pagina zie je ook een vraagteken , maar als je dat vraagten copierd en ergens plakt zie je een vierkantje) http://whatpulse.org/api/teams/1295.xml dit is de XML pagina waar alle gegevens van worden gelezen , en als je even zoekt (Control + F) op de naam Mr_fr dan zie je daar het vraagteken al staan.
En dit is de gebruikte team_parse.php (bij andere parser lukt het ook niet)
<pre>
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
/*
* readTeamStats(teamid)
* - Read WhatPulse team statistics from the webapi into an array.
*
* Author: [email protected]
* Based on script for www.sogamed.com
*/
function readTeamStats($teamid, $team_stats, $members)
{
//
$statistics_tags = array("TeamName", "TeamDescription", "TeamMembers", "TeamClicks",
"TeamKeys", "TeamRank", "TeamDateFormed", "TeamFounder");
$member_tags = array("MemberName", "MemberUserID", "MemberKeys", "MemberClicks",
"MemberLastPulse", "MemberManager", "MemberCountry");
$data = file_get_contents("http://whatpulse.org/api/teams/".$teamid.".xml");
$data = utf8_decode($data);
$parser = xml_parser_create();
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
xml_parse_into_struct($parser, $data, $values, $index);
xml_parser_free($parser);
for ($x = 0; $x < sizeof($statistics_tags); $x++)
{
$team_stats[$statistics_tags[$x]] = $values[$index[$statistics_tags[$x]][0]]['value'];
}
for ($x = 0; $x < sizeof($index['Member']); $x++)
{
for ($y = 0; $y < sizeof($member_tags); $y++)
{
if ($values[$index[$member_tags[$y]][$x]]['level'] == 5)
{
$members[$x][$member_tags[$y]] = addslashes($values[$index[$member_tags[$y]][$x]]['value']);
}
}
}
}
$team_stats = array();
$members = array();
readTeamStats(1295, &$team_stats, &$members);
print_r($team_stats);
print_r($members);
?>
</pre>
Ik heb al geprobeerd MET $data = utf8_decode($data); en ook al zonder, maar dit geeft ongeveer dezelfde output.
Misschien kan het ook helpen als ik zeg dat wel wel een tiental (mss wel hondertal) Notice Errors hebben :
Notice: Undefined offset: 299 in team_parse.php on line 42
Notice: Undefined index: in team_parse.php on line 42
Notice: Undefined offset: 299 in team_parse.php on line 42
Notice: Undefined index: in team_parse.php on line 42
en zo gaat het nog een hele tijd door.
Bij voorbaat dank!,
dizzy
Gewijzigd op 01/01/1970 01:00:00 door Dizzy
Die notices hebben er weinig mee te maken, die betekenen dat je een waarde uit een niet bestaande sleutel probeert te lezen, en niet bestaande arrays probeert op te roepen.
Maar zoals ik al gezegd heb geeft XML het ook al niet tegoei weer : <MemberName>Mr_Fr�</MemberName> en als ik dat vraagteken ergens in msn of dreamweaver zeg ... krijg ik een vierkantje ;)
(heb ook al opgeslagen via kladblok en nog eens gerefreshed maar dat geeft ook geen resultaat)
Gewijzigd op 01/01/1970 01:00:00 door Dizzy
http://whatpulse.org/api/teams/1295.xml , die opent wat beter dan jouw eerste link (zonder .xml) :P
Edit:
Hmm...dan is het nog heel traag. Mijn browser loopt er bijna van vast en ik krijg geen XML te zien :P
Gewijzigd op 01/01/1970 01:00:00 door Winston Smith
jah gewoon even wachten ... komt zeker envast wel ;) duurt bij mij 15 seconde vanaf start :) en ik gebruik mozilla firefox 2.0.0.5 ...
Terwijl het gebruikelijk is daar ook een encoding in te zetten. Probeer eens
Of in plaats van UTF-8, ISO-8859-1.
Edit:
Mr_fr ook gevonden.
Gewijzigd op 01/01/1970 01:00:00 door Winston Smith
^^ ik kan niets aan de broncode veranderen ... dat zijn officieel gegenereerd XML pagina's ^^ tenzij ik er iets via PHP aan kan doen?
Wat ook kan is dat de pagina waar je de data invoert niet op utf-8 draait. Zet bovenin je code (na <head>) de volgende code: Let op dat deze tag de éérste tag is die in de <head> staat. Anders kan de data die daarvoor geplaatst word niet correct gecodeerd worden, omdat op dat moment het character set nog niet bekend is.
Gewijzigd op 01/01/1970 01:00:00 door Pim Vernooij
of echt zonder < ?
Edit:
helpt niets :( hebben jullie misschien iets in peto waarbij je die user negeert? zodat we toch al verder kunnen?
Gewijzigd op 01/01/1970 01:00:00 door Dizzy
Nee, dat is met < natuurlijk :)
Wss zullen de mensen die dit probleem later ook hebben (met andere XML parser) het op-prijs-stellen dat ik even het antwoord post .
Wel heel simpel -> XML data cashen :)
Bedankt toch voor de reacties en het meedenken!,
dizzy
Gewijzigd op 01/01/1970 01:00:00 door Dizzy
als je php 5 gebruik kun je ff kijken naar simple xml