Navigation
Supportsider
Senest Online
afoster11:24:26
helmuth20:21:59
HenningS 1 Dag
Niller 1 Dag
flj 5 Dage
wholle 6 Uger
Henrik Bendtsen 7 Uger
olelau 9 Uger
Christian 9 Uger
Bubbi10 Uger
Besøgende
Gæster online: 5

Brugere online: 0

Antal brugere: 181
Nyeste bruger: Michael Mogensen
Se indlæg
PHP-Fusion - Danmark » PHP-Fusion version 6 » Elementer v6
 Udskriv debat
Element: Nyheder udefra via RSS feeds
- Tony -
Du havde kopieret koden fra et eksempel hvor der var fremhævet elementer med en color kode




/////////////////////////////////////////////////

// RSS reader v4 2008-03-23 (modified 2009-02-07)

// by Flemming Jensen, Copyright 2008-9

/////////////////////////////////////////////////



// Compare function

function rss_cmp($a, $b)

{

    return $b["timestamp"] - $a["timestamp"];

}



// Function to retrieve, extract on age and pattern, limit by max_no and sort

function rss_feeds($rss_feeds, $max_age_hours, $pattern, $max_no)

{



   $max_age = $max_age_hours*3600; // in seconds

   $now = time();



   $date_format = "%a, %Y-%m-%d %T %Z"; // Format used to create date



   // Looping for every rss feed to read

   $rss = NULL;

   $n = 0;



   foreach($rss_feeds as $rss_feed)

   {

      // Load the RSS file

      $err_level = error_reporting(E_ALL ^ E_WARNING);

      $rss_file = simplexml_load_file($rss_feed);

      error_reporting($err_level);



      // Looping for every item returned

      if ($rss_file)

      {

         if ($rss_file['version'] == "2.0" || $rss_file->channel->item)

         {

            $rss_ver = 2;

            $items = $rss_file->channel;

         }

         else

         {

            $rss_ver = 1;

            $items = $rss_file;

         }



         foreach($items->item as $item)

         {

            if ($rss_ver == 1)

            {

               $dc_namespace = $item->children('http://purl.org/dc/elements/1.1/');

               $timestamp = strtotime(utf8_decode("{$dc_namespace->date}"));

            }

            else

            {

               $timestamp = strtotime(utf8_decode("{$item->pubDate}"));

            }



            // Only if not too old and matching pattern

            if (($now - $timestamp <= $max_age || $timestamp == 0) && preg_match($pattern, $item->description) == 1)

            {

               // Using utf8_decode(...) to get danish chars right

               $rss[$n]["link"] = utf8_decode($item->link);

               $rss[$n]["title"] = utf8_decode($item->title);

               $rss[$n]["date"] = strftime($date_format, $timestamp);

               $rss[$n]["timestamp"] = $timestamp;

               $rss[$n]["description"] = utf8_decode($item->description);

               $n++;

            }

         }

      }

   }





   if ($n>0)

   {

      // Sort all to get the newest ones first

      usort($rss, "rss_cmp");



      // Limiting the array to max_no

      while(count($rss)>$max_no)

         array_pop($rss);

   }



   return $rss;

}





// List of RSS-feeds to check

$rss_feeds = array("http://www.lemviginfo.dk/feeds/news.php",
 "http://politiken.dk/rss/senestenyt.rss",
"http://politiken.dk/rss/politik.rss",
"http://ekstrabladet.dk/rss/nyheder.rss");



// Max age in hours

$max_age_hours = 800;



// Pattern to match - see preg_match(...)

$pattern = "//i"; // Matches everything



// Max no of news to return

$max_no = 20;



$rss = rss_feeds($rss_feeds, $max_age_hours, $pattern, $max_no);



if ($rss)

{

   foreach($rss as $item)

   {

      echo("· ".$item["title"]."
");

   }

}

?>

www.lemviginfo.dk/platuglerne_ikon2.gif www.lemviginfo.dk/images/lemviginfo_dk.gif [url=http://www.lemvig.info][img]http://www.lemviginfo.dk/image
 
http://www.lemvig.info/redirect.php
jensjac
Tak. Jeg prøver igen.
Her små 4 tiemr senere spiller det stadig ikke.
Kan det skyldes at jeg opholder mig i El Salvador? Timeouts?
Min host er one.com hjemme i DK.
Der er et sted i tråden hvor %20 nævnes i forbindelse med one.com. Den del forstår jeg ikke. Måske ligger fejlen der.

KH
Jens
Redigeret af jensjac d. 22-03-2009 19:43
 
flj
Jeg har lige testet den - virker her (Servage). Umiddelbart tror jeg ikke på timeouts, men...
 
jensjac
Hej med jer
Den RSS fil piner mig.
Jeg har på fornemmelsen, at jeg gør et eller andet grundlæggende forkert.
Hvis nogen stadigt gider vil jeg være rigtig glad.

Jeg har nu oprettet en ny side til at teste filen.
Den hedder www.tikal.dk/test
Den køres i php-fusion v6.01.15.
hotel: one.com
På siden har jeg oprettet en brugeroprettet side.
Siden indeholder koden i vedhæftede fil.
Jeg har derefter lagt en link til siden i menulinien.
Når jeg aktivere siden får jeg en ny side med overskrift men intet indhold.
Jeg tænker på om min php version på one.com har betydning? Jeg ar aldrig opgraderet fra php4 til php5.
Hvad hvis jeg opdaterer til php-fusion 7?
Tidsforskellen spøger: Kan det tænkes at min computeropsætning med lokal stillehavs-tid har indflydelse?

Alle forslag modtages med taknemlighed.

Venlig hilsen
Jens
jensjac tilknyttede følgende billede:fil:
rss4.txt [3,14kB / 690 Downloads]

Redigeret af jensjac d. 26-03-2009 17:36
 
flj
Jeg vil da gerne melde mig - eftersom det er mig, der har skrevet den, så føler jeg for den.

Hvis du kører PHP4, så er det forklaringen. simplexml_load_file(...) er en PHP5 "opfindelse".

Men har du ikke checket din error log? Der ville du straks have set det.

Prøv med PHP5 - phpfusion er "ligeglad".

PS. Det står vist også andre steder i denne tråd, men den er efterhånden lang, så du er undskyldt.
Redigeret af flj d. 26-03-2009 19:45
 
- Tony -
Jeg trækker mit "Den virker hos mig" tilbage, det virker når man er i admin delen, men når man gemmer den og vil åbne den er den tom og har desuden fjernet højre side panel og footer.

Det er også det der sker hos ham


www.lemviginfo.dk/platuglerne_ikon2.gif www.lemviginfo.dk/images/lemviginfo_dk.gif [url=http://www.lemvig.info][img]http://www.lemviginfo.dk/image
 
http://www.lemvig.info/redirect.php
flj
Er der openside() og closeside()? Det virker helt uforståeligt. Du ved jo selv, at koden virker i princippet. Og alle de bruge feeds virker - har checketd em.
 
- Tony -
Ja koden virker, kom lige til at tænke lidt over det og problemet hos mig var jo at der i forvejen kørte en sidepanel med koden og den stoppede der ved videre indlæsning af siden, når jeg slår den fra, virker koden perfekt

Testside LINK



www.lemviginfo.dk/platuglerne_ikon2.gif www.lemviginfo.dk/images/lemviginfo_dk.gif [url=http://www.lemvig.info][img]http://www.lemviginfo.dk/image
 
http://www.lemvig.info/redirect.php
flj
Det var da altid noget. Var ved at blive helt nervøs. Hvis det ikke er PHP4, hvad kan det så være - måske har du en god idé? Jeg er ret tom.
 
- Tony -
Hvis ikke han har sideelement til at køre kode i forvejen som jeg jo havde, kan jeg heller ikke lige komme på noget



@jensjac prøv at deaktivere dine sideelementer et efter et og tjek for hver gang om det har nogen indflydelse på feedet
Redigeret af - Tony - d. 26-03-2009 21:24
www.lemviginfo.dk/platuglerne_ikon2.gif www.lemviginfo.dk/images/lemviginfo_dk.gif [url=http://www.lemvig.info][img]http://www.lemviginfo.dk/image
 
http://www.lemvig.info/redirect.php
jensjac
Hej FLJ og Tony
Som jeg skrev tidligere i dag, havde jeg på fornemmelsen, at det var mig selv der gjorde noget forkert. Det var det. Da jeg rettede php til version 5 på serveren virkede elementet. Foreløbigt "kun" som brugeroprettet side. Hvis jeg ikke kan få det til at virke som element , vil jeg forsøge med Tonys forslag om deaktivering af sidelementer.
Tusinde tak for hjælpen. Nu hvor det "spiller" er det langt lettere at eksperimenterer.
KH
Jens
Der kommer en donation til siden en at de første dage.
 
- Tony -
Fint, når det kører ibrugeroprettet tror jeg ikke du får problemer med elementer, et lille men til dine feeds - du har to fra politiken (politik og seneste nyheder) hvilket betyder du har dobbelt link fra denne.



www.lemviginfo.dk/platuglerne_ikon2.gif www.lemviginfo.dk/images/lemviginfo_dk.gif [url=http://www.lemvig.info][img]http://www.lemviginfo.dk/image
 
http://www.lemvig.info/redirect.php
jensjac
Hej Tony
Tak. Jeg var opmærksom på det og har efterfølgende fjernet den ekstra link under mine tilpasningsforsøg.
Venlig hilsen
Jens
 
branner
Jeg beklager, hvis det har været oppe før. Men hvordan laver man lettest en timeout-grænse på parseren?
Altså sådan at siden ikke står og venter i evigheder, hvis der er problemer med at indlæse et feed...
Redigeret af branner d. 02-08-2009 13:49
 
http://www.klimadebat.dk
flj
Det har vist ikke været oppe før, så ingen grund til at beklage.

Desværre tror jeg ikke lige det er så let.

Dybest set er det jo dumt at indlæse feedet hver eneste gang en eller anden går ind på siden. I stedet burde den kun indlæses hvis det var mere end x sekunder/minutter/timer/dage siden, og ellers hentes fra en cache. Så ville det køre hurtigere, og så kunne man håndtere det problem, du påpeger.

Jeg har tumlet lidt med den løsning, men så nærmer det sig en egentlig infusion, og den har jeg altså ikke fået lavet. Til gengæld ved jeg, at der er andre tilsvarende løsninger til PF, der kan det.
 
branner
OK, men selvom man ikke tager skridtet fuldt ud og bygger det op med en cache, er der så ikke et php-trick, der kan sætte en tidsgrænse for udførelsen af et stykke kode?
Ville være ganske praktisk...
 
http://www.klimadebat.dk
flj
Jo det er der, men du vil du kun begrænse udførelsen til den del af koden, der læser feedet, da den resterende php kode genererer resten af din side.

I så fald tror jeg, at du skal bruge kode på et lavere niveau, end simplexml_load_file. Det kan gøres ved at tilføje en timeout på fopen (jeg vil også tro, at man kan bruge fread sammen med stream_set_timeout, således som vist i eksemplet i linket, og så erstatte simplexml_load_file med simplexml_load_string. Jeg skal dog tilføje, at jeg ikke har gjort forsøget selv).

Nedenstående er heller ikke testet, men illustrerer første metode, og det er noget med at erstatte linien med simplexml_load_file med:


  $timeout = 0.5;  // in seconds
  $opts = stream_context_create(array("http" => array("timeout" => $timeout)));

  if ($fp = @fopen($rss_feed, 'r', FALSE, $opts))
  {
    $s = fread($fp, filesize($rss_feed));
    fclose($fp);
  }
  else
  {
    $s = '';
  }
  $rss_file = simplexml_load_string($s);

 
branner
Tak for hjælpen!
Nu har jeg lidt at arbejde med...
 
http://www.klimadebat.dk
flj
Velbekommen. Du er velkommen til at vende tilbage, hvis det driller.
 
Martin-M
Rigtigt fedt element. Har dog et ønske:

Er det ikke muligt at få dato + antal visninger under overskrifterne? Ligesom herinde: www.footballworld.dk

Tak på forhånd.
 
flj
Tak!

Udskriften sker i denne linie - sidst i koden:



Den linie kan du ændre - også til det, du spørger efter. Prøv at "bladre" denne lange tråd igennem. Jeg mener det har været oppe før. Hvis du går i stå, så vend tilbage her.

 
Spring til debat: