login  Naam:   Wachtwoord: 
Registreer je!
 Forum

RSS Parser werkt soms niet

Offline Frederic - 10/10/2005 17:46 (laatste wijziging 10/10/2005 17:51)
Avatar van FredericPHP ver gevorderde Ik gebruik onderstaand script voor het verwerken van RSS feeds:
  1. <?php
  2. function Verwerking($nieuwsfeed){
  3.  
  4. $nieuwsfeed = file_get_contents($nieuwsfeed);
  5.  
  6. $parser = xml_parser_create();
  7.  
  8. xml_parse_into_struct($parser,$nieuwsfeed,$onderwerp,$onderdeel);
  9.  
  10. xml_parser_free($parser);
  11.  
  12. $classnr = 0;
  13. for($nr = 2; !empty($onderdeel['TITLE'][$nr]); $nr++){
  14. $class = ($classnr++ % 2) ? "even" : "oneven";
  15.  
  16. $datum = $onderwerp[$onderdeel['PUBDATE'][$nr-2]]['value'];
  17. $datum = date("d-m-Y H:i", strtotime($datum));
  18.  
  19. $link = $onderwerp[$onderdeel['LINK'][$nr]]['value'];
  20.  
  21. $titel = $onderwerp[$onderdeel['TITLE'][$nr]]['value']; //ok
  22.  
  23. if($omschrijving == 1){
  24. $omschrijving = $onderwerp[$onderdeel['DESCRIPTION'][$nr]]['value'];
  25. }
  26. else{
  27. $omschrijving = $onderwerp[$onderdeel['DESCRIPTION'][$nr-1]]['value']; //ok
  28. }
  29.  
  30. if(isset($omschrijving)){
  31. $omschrijving = " - " . $omschrijving;
  32. }
  33.  
  34. echo "<div class=\"feed-tekst-" . $class . "\">\n";
  35. echo "<a onclick=\"window.open(this.href,'_blank');return false;\" href=\"" . $link . "\">" . $titel . "</a><br />\n";
  36. echo $datum . $omschrijving . "<br />\n";
  37. echo "<a onclick=\"window.open(this.href,'_blank');return false;\" href=\"" . $link . "\">Verder lezen...</a>\n";
  38. echo "</div>\n<hr />\n\n";
  39. }
  40. }
  41. Verwerking($feedadres);
  42. ?>


Nu, voor een sheet zoals
http://www.vrtn.../index.xml
krijg ik dit (= zoals het moet: omschrijving bij juiste titel en bij juiste datum en bij juiste link)
Citaat:
Er zijn nu al 23.000 doden na aardbeving
10-10-2005 18:22 - Ons land stuurt een ploeg van het B-fastteam naar het rampgebied. Morgen vertrekken er 25 mensen.
Verder lezen...
----
Angela Merkel is Duits bondskanselier
10-10-2005 11:49 - Angela Merkel wordt de eerste vrouwelijke bondskanselier. De CDU en de SPD vormen samen een coalitie.
Verder lezen...

Wat is nu het probleem?
Voor de sheet
http://tweakers.net/feeds/mixed.xml
krijg ik dit resultaat:
Citaat:
Sony Ericsson kondigt P990-smartphone aan
10-10-2005 17:42 - 
Verder lezen...
----
xine 1.0.3a
10-10-2005 17:09 - Sony Ericsson heeft ruim voor de introductie in de winkel het nieuws wereldkundig gemaakt dat hun volgende smartphone de P990 is. De telefoonmaker heeft dit gedaan om softwareproducenten van ruim voldoende tijd te voorzien om nieuwe programma&#8217;s te schrijven of hun bestaande software aan te passen voor de P990. Sony Ericssons nieuwe vlaggenschip zal namelijk als eerste smartphone draaien op h...
Verder lezen...
----
Newnova: Suprnova gaat ondergronds
10-10-2005 17:00 - Xine is een opensource multimediaspeler voor GNU/Linux, FreeBSD, Solaris, Irix en Mac OS X. Men is daarnaast bezig om ondersteuning toe te voegen voor MS Windows, HPUX, OpenBSD en OS/2. Het programma kan cd's, dvd's en vcd's afspelen, lust avi-, mov-, wmv-, en mp3-bestanden en ook multimediastreams van het internet vormen geen enkel probleem. Versie 1.0.3a is sinds kort beschikbaar en verhelpt een...
Verder lezen...
, waarbij de omschrijving niet klopt.
Ook voor
http://www.vtm.be/rss/nieuws.php
krijg ik (=fout)
Citaat:
1 zwaargewonde bij straatrace
10-10-2005 17:32 - VTM.be
Verder lezen...
----
Nog geen akkoord eindeloopbaan
10-10-2005 17:32 - 1 zwaargewonde bij straatrace
Verder lezen...
----
Jongetje (3) overleden na brand
10-10-2005 17:32 - Nog geen akkoord eindeloopbaan
Verder lezen...
----
Almaar meer bommeldingen bij NMBS
10-10-2005 17:32 - Jongetje (3) overleden na brand
Verder lezen...

Wat kan ik hieraan doen?

8 antwoorden

Gesponsorde links
Offline Thomas - 10/10/2005 17:50 (laatste wijziging 10/10/2005 17:51)
Avatar van Thomas Moderator De auteur verwittigen, of, als je dit zelf geschreven hebt, je in de RSS-standaard verdiepen.
Offline Frederic - 10/10/2005 17:51
Avatar van Frederic PHP ver gevorderde Ik heb het zelf gemaakt met samenraapsels op het internet...
Offline Thomas - 10/10/2005 17:53
Avatar van Thomas Moderator Zie mijn edit.

Werk volgens standaarden. Als anderen dit niet doen moet je code hier workarounds voor bevatten als je de feeds per sé wilt afdrukken.
Offline Frederic - 10/10/2005 17:55
Avatar van Frederic PHP ver gevorderde
Citaat:
moet je code hier workarounds voor bevatten

Such as?
Offline Thomas - 10/10/2005 18:53 (laatste wijziging 10/10/2005 18:54)
Avatar van Thomas Moderator Nu ja, aangenomen dat de feeds aan de RSS-standaard voldoen moet je gewoon zorgen dat je code altijd werkt, en niet af en toe.

Workarounds was meer van toepassing op feeds die niet (helemaal) aan de RSS-spec voldoen, maar ik neem aan dat de feeds van tweakers wel valid zijn. Je zult de fout dus in je eigen code moeten zoeken. Waar krijgt $omschrijving bijvoorbeeld elke keer zijn (initiele) waarde vandaan?

Je hebt nota bene bovenstaande code (of code die nagenoeg hetzelfde is) als script gepost.

Heb je deze niet eerst uitgebreid getest? Het lijkt me niet de bedoeling dat we hier een geplaatst script gaan debuggen...
Offline Frederic - 11/10/2005 19:46 (laatste wijziging 11/10/2005 19:47)
Avatar van Frederic PHP ver gevorderde Vraagje over zelfde script:
ik ga nu in de database bijhouden welke feeds wel werken, en bij de rest geen omschrijving tonen (want PubDate, Title en Link werken wel ALTIJD correct).
  1. <? function Verwerking($nieuwsfeed, $omschrijving = 0){
  2.  
  3. $nieuwsfeed = file_get_contents($nieuwsfeed);
  4.  
  5. $parser = xml_parser_create();
  6.  
  7. xml_parse_into_struct($parser,$nieuwsfeed,$onderwerp,$onderdeel);
  8.  
  9. xml_parser_free($parser);
  10.  
  11. $classnr = 0;
  12. for($nr = 2; !empty($onderdeel['TITLE'][$nr]); $nr++){
  13. $class = ($classnr++ % 2) ? "even" : "oneven";
  14.  
  15. $datum = $onderwerp[$onderdeel['PUBDATE'][$nr-2]]['value'];
  16. $datum = date("d-m-Y H:i", strtotime($datum));
  17.  
  18. $link = $onderwerp[$onderdeel['LINK'][$nr]]['value'];
  19.  
  20. $titel = $onderwerp[$onderdeel['TITLE'][$nr]]['value'];
  21.  
  22. if($omschrijving == 1){
  23. $omschrijving = $onderwerp[$onderdeel['DESCRIPTION'][$nr]]['value'];
  24. }
  25. elseif($omschrijving == 2){
  26. $titel = $onderwerp[$onderdeel['TITLE'][$nr-1]]['value'];
  27. $omschrijving = $onderwerp[$onderdeel['DESCRIPTION'][$nr-1]]['value'];
  28. }
  29. elseif($omschrijving == 3){
  30. $omschrijving = "Niet bekend";
  31. }
  32. else{
  33. $omschrijving = $onderwerp[$onderdeel['DESCRIPTION'][$nr-1]]['value'];
  34. }
  35.  
  36. if(isset($omschrijving)){
  37. $omschrijving = " - " . $omschrijving;
  38. }
  39.  
  40. echo "<div class=\"feed-tekst-" . $class . "\">\n";
  41. echo "<a onclick=\"window.open(this.href,'_blank');return false;\" href=\"" . $link . "\">" . $titel . "</a><br />\n";
  42. echo $datum . $omschrijving . "<br />\n";
  43. echo "<a onclick=\"window.open(this.href,'_blank');return false;\" href=\"" . $link . "\">Verder lezen...</a>\n";
  44. echo "</div>\n<hr />\n\n";
  45. }
  46. }

Nu, als ik een feed aanroep met omschrijving 3, dan krijg ik dit als uitput:
Citaat:
Fabrikanten iPod-accessoires vallen over royalties
11-10-2005 19:42 - Niet bekend
Verder lezen...

----

Asus komt met Crossfire-moederbord
11-10-2005 19:24 - Apple zou van plan zijn om fabrikanten die accessoires op de markt willen brengen voor aansluiting op de iPod, tien procent van de daarmee gegenereerde omzet aan royalty in rekening willen brengen, schrijft de Australische lifestyle nieuwssite SmartHouse. Een dergelijk hoge licentieheffing voor het mogen aansluiten op Apples iPod-poort (Dock-connector) zou volgens de fabrikanten, die willen meevar...
Verder lezen...

----

Overgeklokte Radeon X1800 XT scoort 12278 in 3DMark05
11-10-2005 18:49 - The Inquirer meldt dat Asus op het punt staat zijn eerste moederbord uit te brengen dat gebaseerd is op ATi's Crossfire-chipset. Het bord, de A8R-MPV, zal ATi's RD 480-northbridge gebruiken; voor de zuidverbinding wordt ULI's M1575 ingezet. De A8R-MPV zal alle cpu's slikken die met een Socket 939-voetje zijn uitgerust en heeft vier geheugenslots ter beschikking voor een totaal van 4GB aan werkgehe...
Verder lezen...

Dus de niet bekend (gedefinieerd door $omschrijving == 3) wordt enkel bij het eerste element gebruikt. Hoe kan ik ervoor zorgen dat dit ook gebeurd bij het volgende?
Offline rambo - 11/10/2005 19:52
Avatar van rambo HTML beginner $omschrijving aan het begin van de for-loop de waarde 0 meegeven...
Offline Frederic - 11/10/2005 19:52
Avatar van Frederic PHP ver gevorderde OKay het werkt 
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.228s