Witam, obecnie pracuję nad czytnikiem RSS pod PHP. Osiągnięty dotychczas efekt prawie mnie zadowala (pomijając niemożność poradzenia sobie z wyświetleniem źródła treści, ich chronologicznym posortowaniem oraz obcinaniem długości wyświetlanych rekordów), lecz napotkałem jeden interesujący i kłopotliwy problem.

Mianowicie, na te chwilę wszystko działa, ale czasami zdarza się sytuacja, że zamiast jakiejkolwiek treści wyświetla się komunikat "String could not be parsed as XML". Podejrzewam, że jest to spowodowane tym, że treści z jakiegoś kanału nie mogą zostać prawidłowo wyświetlone, jednak czasami zdarzało się, że odnajdowałem ów kanał, usuwałem go i wszystko działało, lecz gdy ponownie go dodałem, nadal NIE wyświetlało żadnych błędów. Wyglądało to więc trochę jak jakiś błąd czasowy.

Czy ktoś ma może przypuszczenia, czym taki komunikat może być spowodowany? I dodatkowo, jeżeli ktoś ma jakieś wskazówki odnośnie moich problemów z drugiego zdania (tych w nawiasie), również proszę o pomoc.

Pozdrawiam.

  1. <div class="txt-content">
  2.  
  3. <?php include "feeds.php";
  4.  
  5. $urls_pl = array('http://feeds.feedburner.com/sportowefakty/TtDh','http://www.goal.pl/rss.php','http://feeds.feedburner.com/igol?format=xml','http://feeds.feedburner.com/mufcpl','http://fcbayern.pl/news/rss','http://atleticopoland.com/news/rss','http://feeds.feedburner.com/WiadomociPrzegladsportowypl','http://www.futbolnews.pl/informacje/aktualnosci/rss.xml','http://sport.wp.pl/kat,1726,rss.xml?ticaid=1122f8','http://interia.pl.feedsportal.com/c/34004/f/625102/index.rss','http://kanonierzy.com/rss.shtml','http://www.realmadrid.pl/aktualnosci.xml','http://www.chelsealive.pl/news/rss','http://feeds.feedburner.com/devilpage/oNUh','http://www.fcbarca.com/feed');
  6.  
  7. $urls = array('http://football-italia.net/rss.xml','http://www.fifa.com/rss/index.xml','http://feeds.bbci.co.uk/sport/0/football/rss.xml?edition=uk','http://www.lequipe.fr/rss/actu_rss_Football.xml','http://rss.kicker.de/news/fussball','http://www.dailymail.co.uk/sport/index.rss','http://www.skysports.com/rss/0,20514,11095,00.xml','http://www.goal.com/en/feeds/news?fmt=rss&ICID=HP','http://uefa.com/rssfeed/uefachampionsleague/rss.xml','http://ir.manutd.com/corporate.rss?c=133303&Rule=Cat=news~subcat=ALL','http://feeds.feedburner.com/daily-star-football','http://www.football.co.uk/divisions/european/rss.xml','http://feeds.feedburner.com/Men-Sport','http://sportbild.bild.de/services/rss/sportbild-bundesliga-10186136,sort=1,n=25,view=rss2.sport.xml','http://www.allgemeine-zeitung.de/sport/national-und-international/fussball/index.rss');
  8.  
  9. try
  10. {
  11. $feeds = new Feed_Amalgamator;
  12. $feeds->addFeeds( $urls );
  13. $feeds->grabRss();
  14. $feeds->amalgamate();
  15. $feeds_pl = new Feed_Amalgamator;
  16. $feeds_pl->addFeeds( $urls_pl );
  17. $feeds_pl->grabRss();
  18. $feeds_pl->amalgamate();
  19. }
  20. catch ( exception $e )
  21. {
  22. die( $e->getMessage() );
  23. }
  24. ?>
  25. <div style="border: 1px solid black; background-color: #CCCCCC; padding: 5px;">
  26. <a id="myHeader1" href="java script:showonlyone('newboxes1');" ><img src="http://www.ligamistrzow.com/img/kraje/1.png" height="10px"> POLSKA </a>
  27. </div>
  28.  
  29. <div style="border: 1px solid black; background-color: #CCCCCC; padding: 5px;">
  30. <a id="myHeader2" href="java script:showonlyone('newboxes2');" ><img src="http://www.mricons.com/store/png/114777_32086_64_explorer_globe_internet_icon.png" height="15px"> ZAGRANICA</a>
  31. </div>
  32. <div class="newboxes" id="newboxes1" style="border: 1px solid black; background-color: white; display: none;padding: 5px;">
  33. <?php foreach ( $feeds_pl->data as $item ) : extract( (array) $item);?>
  34. <li><a href="<?php echo $link; ?>" target="_blank"><?php echo $title; ?></a> <font size="1"><?php echo $pubDate ?></font></br>
  35. <?php endforeach; ?></div>
  36. <div class="newboxes" id="newboxes2" style="border: 1px solid black; background-color: white; display: none;padding: 5px;">
  37. <?php foreach ( $feeds->data as $item) : extract( (array) $item);?>
  38. <li><a href="<?php echo $link; ?>" target="_blank"><?php echo $title; ?></a> <font size="1"><?php echo $pubDate ?></font></br>
  39. <?php endforeach; ?></div>
  40. </div>


feeds.php

  1. <script type="text/javascript">
  2. function showonlyone(thechosenone) {
  3. var newboxes = document.getElementsByTagName("div");
  4. for(var x=0; x<newboxes.length; x++) {
  5. name = newboxes[x].getAttribute("class");
  6. if (name == 'newboxes') {
  7. if (newboxes[x].id == thechosenone) {
  8. newboxes[x].style.display = 'block';
  9. }
  10. else {
  11. newboxes[x].style.display = 'none';
  12. }
  13. }
  14. }
  15. }
  16. </script>
  17.  
  18. <?php
  19.  
  20. function get_title()
  21. {
  22. if ($this->title !== null)
  23. {
  24. return $this->title;
  25. }
  26. else
  27. {
  28. return null;
  29. }
  30. }
  31.  
  32.  
  33. class Feed_Amalgamator
  34. {
  35. public $urls = array();
  36. public $data = array();
  37.  
  38. public function addFeeds( array $feeds )
  39. {
  40. $this->urls = array_merge( $this->urls, array_values($feeds) );
  41. }
  42.  
  43. public function grabRss()
  44. {
  45. foreach ( $this->urls as $feed )
  46. {
  47. $data = @new SimpleXMLElement( $feed, 0, true );
  48. if ( !$data )
  49. throw new Exception( 'Could not load: ' . $feed );
  50. foreach ( $data->channel->item as $item )
  51. {
  52. $this->data[] = $item;
  53. }
  54. }
  55. }
  56.  
  57. public function amalgamate()
  58. {
  59. shuffle( $this->data );
  60. $temp = array();
  61. foreach ( $this->data as $item )
  62. {
  63. if ( !in_array($item->link, $this->links($temp)) )
  64. {
  65. $temp[] = $item;
  66. }
  67. }
  68. $this->data = $temp;
  69. shuffle( $this->data );
  70. }
  71.  
  72. private function links( array $items )
  73. {
  74. $links = array();
  75. foreach ( $items as $item )
  76. {
  77. $links[] = $item->link;
  78. }
  79. return $links;
  80. }
  81. }
  82. ?>