Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP/XML] problem z wyswietlaniem rss
Forum PHP.pl > Forum > Gotowe rozwiązania
Majcok12
Jak w temacie, mam problem przy wsywietlaniu rss z danej strony. Problem polega na tym, ze niby poprawnie wyswietla wszystko, tylko w wypadku jezeli znacznik <link> zawiera np. & to nie wiem dlaczego ale np. taki link http://www.xfire.be/?x=news&mode=item&id=981 zmienia na http://192.168.0.149/~majcok/id=981 :| I druga sprawa. Do wyswietlania samego RSS napisalem funckcje do ktorej przekazuje adres rss i nazwa (np. RSS z strony ...). I nie wiem dlaczego, ale jesli zrobie tak
  1. <? 
  2. generate_rss("http://www.xfire.be/xml.php", "www.xfire.be");
  3. generate_rss("http://www.ettv.org/rss_short.php", "ETTV.org");
  4. ?>


to pierwsze rss wyswietli 'poprawnie' (jesli nie liczyc tego zlego urla). A przy wyswietlaniu RSS z www.ettv.org najpierw wyswietli poprzednie rss wg. wzorca kiedy $nazwa == "ETTV.org" i pod tym dopiero wlasciwe.
wyglada to mniej wiecej tak:
www.xfire.be
naglowek_newsa
autor_newsa

ETTV.org
data (np. Wed 17 Aug 2005, 11:49 CEST)
naglowek_n vs - ten naglowek newsa jest obciety do 10znakow

tego powyzej nie powinno byc :[
a teraz juz poprawnie prawidlowa tresc RSS z ettv.org
data (np. 18 - Sierpień - 2005 21:00 (a originalnie wyglada np. tak 18th August 2005 21:00 CET)
przeciwnik1 vs przeciwnik2

Ponizej troche kodu:

  1. <?
  2. function startElementHandler($parser, $element_name, $element_atribs)
  3. {
  4. global $item_counter, $in_item_tag, $current_tag_state, $dane;
  5.  
  6. if($element_name == "ITEM")
  7. {
  8. $in_item_tag = 1;
  9. }
  10. if($in_item_tag == 1)
  11. {
  12. $current_tag_state = $element_name;
  13. }
  14. else
  15. {
  16. $current_tag_state = '';
  17. }
  18. }
  19. ?>


  1. <?
  2. function endElementHandler($parser, $element_name)
  3. {
  4. global $item_counter, $in_item_tag, $current_tag_state, $dane;
  5.  
  6. $current_tag_state = '';
  7. if($element_name == "ITEM")
  8. {
  9. ++$item_counter;
  10. $in_item_tag = 0;
  11. }
  12. }
  13. ?>


  1. <?
  2. function characterDataHandler($parser, $data)
  3. {
  4. global $item_counter, $in_item_tag, $current_tag_state, $dane;
  5.  
  6. if($current_tag_state == '' || $in_item_tag == 0)
  7. return;
  8.  
  9. if($current_tag_state == "TITLE") {
  10. $dane[$item_counter]["title"] = $data;
  11. }
  12. if($current_tag_state == "DATE") {
  13. $dane[$item_counter]["date"] = $data;
  14. }
  15. if($current_tag_state == "LINK") {
  16. $dane[$item_counter]["link"] = $data;
  17. }
  18. if($current_tag_state == "AUTHOR") {
  19. $dane[$item_counter]["author"] = $data;
  20. }
  21.  
  22. }
  23. ?>


  1. <?
  2. function generate_rss($adres_rss, $nazwa)
  3. {
  4. global $item_counter, $dane;
  5.  
  6. if(!($fp=fopen($adres_rss, "r"))) 
  7. die("Nie można otworzyć pliku XML!");
  8.  
  9. if(!($xml_parser = xml_parser_create())) 
  10. die("Nie można utworzyć parsera XML");
  11.  
  12. xml_set_element_handler($xml_parser, "startElementHandler", "endElementHandler");
  13. xml_set_character_data_handler($xml_parser, "characterDataHandler");
  14. while($data=fread($fp, 4096))
  15. {
  16. if(!xml_parse($xml_parser, $data, feof($fp)))
  17. {
  18. break;
  19. }
  20. }
  21. xml_parser_free($xml_parser);
  22. ?>
  23. <table class="normal">
  24. <tr>
  25. <td align="center">
  26. <b><? echo $nazwa; ?></b>
  27. </td>
  28. </tr>
  29. <?
  30. for($i=0; $i < $item_counter; ++$i)
  31. {
  32. if($nazwa == "ETTV.org")
  33. {
  34. $szukaj[0]="!th!"; 
  35. $szukaj[1]="!st!"; 
  36. $szukaj[2]="!rd!"; 
  37. $szukaj[3]="!CET!"; 
  38. $szukaj[4]="!January!"; 
  39. $szukaj[5]="!February!"; 
  40. $szukaj[6]="!March!"; 
  41. $szukaj[7]="!April!"; 
  42. $szukaj[8]="!May!"; 
  43. $szukaj[9]="!June!"; 
  44. $szukaj[10]="!July!"; 
  45. $szukaj[11]="!Augu!"; 
  46. $szukaj[12]="!September!"; 
  47. $szukaj[13]="!October!"; 
  48. $szukaj[14]="!November!"; 
  49. $szukaj[15]="!December!"; 
  50.  
  51. $zmien[0]=''; 
  52. $zmien[1]=''; 
  53. $zmien[2]=''; 
  54. $zmien[3]=''; 
  55. $zmien[4]='- Styczeń -'; 
  56. $zmien[5]='- Luty -'; 
  57. $zmien[6]='- Marzec -'; 
  58. $zmien[7]='- Kwiecień -'; 
  59. $zmien[8]='- Maj -'; 
  60. $zmien[9]='- Czerwiec -'; 
  61. $zmien[10]='- Lipiec -'; 
  62. $zmien[11]='- Sierpień -'; 
  63. $zmien[12]='- Wrzesień -'; 
  64. $zmien[13]='- Październik -'; 
  65. $zmien[14]='- Listopad -'; 
  66. $zmien[15]='- Grudzień -'; 
  67.  
  68. $dane[$i]["date"] = @preg_replace($szukaj, $zmien, $dane[$i]["date"]);
  69. $dane[$i]["title"] = explode("vs", $dane[$i]["title"]);
  70.  
  71. $ile = strlen($dane[$i]["title"][0]); 
  72. if($ile > 10)
  73. {
  74. $dane[$i]["title"][0] = substr($dane[$i]["title"][0], 0, 10);
  75. }
  76. $ile2 = strlen($dane[$i]["title"][1]); 
  77. if($ile2 > 10)
  78. {
  79. $dane[$i]["title"][1] = substr($dane[$i]["title"][1], 0, 10);
  80. }
  81. $jeden = $dane[$i]["title"][0];
  82. $dwa = $dane[$i]["title"][1];
  83. $zawartosc = "$jeden vs $dwa";
  84. $trzy = $dane[$i]["date"];
  85. ?>
  86. <tr>
  87. <td>
  88. <? echo $trzy ?> <br> <a href="<? echo $dane[$i]["link"]; ?>"><font style="color:#790000;"><? echo $zawartosc; ?></font></a>
  89. </td>
  90. </tr>
  91. <?
  92. }
  93. else
  94. {
  95. ?>
  96. <tr>
  97. <td>
  98. <a href="<? echo $dane[$i]["link"]; ?>"><font style="color:#790000;"><? echo $dane[$i]["title"]; ?></font></a><br>
  99. <? echo $dane[$i]["author"]; ?>
  100. </td>
  101. </tr>
  102. <?
  103. }
  104. }
  105. ?>
  106. </table>
  107. <?
  108.  
  109. }
  110. ?>


Mysle, ze zrozmiale to opisalem smile.gif

Dzieki
Pozdrawiam

EDIT Po chwili namyslu dlaczego tak sie moze dziac, pomyslalem o $item_counter i tej petli wyswietlajacej te rss. Tak wiec na koncu fukcji generate_rss() wystarczylo ze dodalem $item_counter = 0; i wszystko dziala :]
Ale problem z tymi okrojonymi calkowcie urlami nadal nie rozwiazany i calkowicie nie mam pomyslu jak to rozwiazac :[
nospor
http://forum.php.pl/index.php?showtopic=34611&hl= - crossposting (Regulamin IV.2, podpunkt f) )
Zamykam.
Zamykam tu, gdyż w xml nie mogę
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.