Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problemy ze zczytywaniem rss
Forum PHP.pl > Forum > XML, AJAX
ongaqjin
napotkalem w pracy nad projektem bardzo dziwny problem (z mojego punktu widzenia - mam nadzieje, ze dla kogos kto to przeczyta bedzie to problem banalny). otoz musze napisac prosty skrypt php do odczytywania rssow z propozycjami prac (np.:http://www.pracuj.pl/ofertypracy/rss.aspx?regionID=1&name=dolnoslaskie). przy probie odczytania tego pliku na trzy rozne sposoby otrzymuje trzy rozne rezultaty.
1. jesli otworze adres w przegladarce, oczywiscie otrzymuje niesformatowany i malo uzyteczny ciag tekstu, po obejzeniu zrodla mam dokladny kod xml -- wszystko dziala jak nalezy;
2. jesli uzyje funkcji fopen() do otwarcia podanego wyzej adresu a poniej fread() do zamiany go na string, po wypisaniu zawartosci tego stringa otrzymuje tylko fragment pliku, przy czym w funkcji fread ustawilem ograniczenie ilosci znakow na 200000 a otrzymuje jakies 150 znakow. co ciekawsze, po kilkunastokrotnym odswiezeniu strony otrzymalem okolo dwukrotnie wiekszy fragment pliku (oczywiscie nadal o wiele za krotki), a po kolejnym odswiezeniu spowrotem ten sam fragment co wczesniej. przy probie wczytania innego adresu (z tej samej strony ale dla innego wojewodztwa) otrzymalem prawie identyczny fragment (jesli chodzi o liczbe znakow).
3. jesli uzyje funkcji simplexml_load_file(), zmienna ktorej przypisalem wartosc zwracana tej funkcji ma zawsze wartosc false - czyli wynik jest bledem.

jakies pomysly? winksmiley.jpg
batman
Kiedyś napisałem bardzo prosty parserek RSS
  1. <?php
  2. $reader = new XMLReader();
  3. $reader->open($adres);
  4.  
  5. while($reader->read()) {
  6. if($reader->nodeType == XMLReader::ELEMENT) {
  7. $name = $reader->name;
  8. }
  9.  
  10. if($reader->nodeType == XMLReader::ELEMENT && $reader->name == 'item') {
  11. echo '<hr />';
  12. }
  13.  
  14. if($reader->nodeType == XMLReader::TEXT || $reader->nodeType == XMLReader::CDATA) {
  15. switch($name) {
  16. case 'link':
  17. echo '<a href="'.$reader->value.'">zobacz więcej ť</a><br />';
  18. break;
  19. case 'title';
  20. echo '<b>'.$reader->value.'</b> ';
  21. break;
  22. case 'description':
  23. echo $reader->value.'<br />';
  24. break;
  25. case 'pubDate':
  26. echo $reader->value.'<br />';
  27. break;
  28. }
  29. }
  30. }
  31. $reader->close();
  32. ?>

Nie dam głowy, że zadziała ze zdanym plikiem.
ongaqjin
lol, dzieki, dziala. choc szczerze mowiac nie wiem czemu. chcialem uzyc simplexml, bo ta biblioteka fajnie i wygodnie zamienia xmla w obiekt. chodzi o to, ze musze te informacje z xmla wczytac do bazy danych, wiec tak byloby najwygodniej, ale z tym co napisales powinienem sobie poradzic.
tak czy inaczej jest to dziwne. programuje juz od ladnych paru lat i nadal nie moge sie przyzwyczaic, ze niektore rzeczy po prostu nie dzialaja, choc powinny, chyba ze zrobi to ktos inny :/
w kazdym badz razie dzieki smile.gif.
batman
W ramach treningu proponowałbym zapisać dane w tablicy, która byłaby cache-owana. Dzięki temu możesz co jakiś czas (np co 1h) odświeżać zawartość rss.
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-2025 Invision Power Services, Inc.