Navigation
Supportsider
Senest Online
helmuth 1 Dag
tyson 2 Dage
HenningS 2 Dage
zepder 2 Dage
olelau 2 Uger
Henrik Bendtsen 2 Uger
flj 2 Uger
orgermer 4 Uger
Didos 4 Uger
BronX 4 Uger
Besøgende
Gæster online: 3

Brugere online: 0

Antal brugere: 172
Nyeste bruger: Michael Mogensen
Se indlæg
PHP-Fusion - Danmark » PHP-Fusion version 6 » Elementer v6
 Udskriv debat
Element: Nyheder udefra via RSS feeds
flj
@wepper24:
Kan jeg bede dig checke følgende:

Skriv eller kopier en adresse, som IKKE ikke viser nyheder ældre end 24 timer direkte ind i adresse-feltet på din browser.

Nu skulle du få alle de nyheder at se, som "ejeren" har valgt vist i din browser.

Hvis der ER nogle nyheder der, som er ældre end 24 timer, så er det en fejl i min kode, som jeg meget gerne hører nærmere om, og vil fixe.

Hvis IKKE der er nogle nyheder der, som er ældre end 24 timer, så er det fordi "ejeren" sletter dem (måske synes han ikke det er nyheder længere Wink). Så har josso ret og så er det ikke noget jeg lige kan gøre noget ved, men det er da altid rart med en tilbagemelding alligevel.
 
flj
Her er koden der skal indsættes i et element:


openside("Nyt om New Orleans Saints");
/////////////////////////////////////////////////
// RSS reader v3 2008-03-23
// by Flemming Jensen, Copyright 2008
/////////////////////////////////////////////////

// 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_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 && 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.neworleanssaints.com/RSS%20Feeds/Latest%20Events.aspx",
"http://www.neworleanssaints.com/RSS%20Feeds/Latest%20News.aspx"

);

// Max age in hours
$max_age_hours = 1000;

// Pattern to match - see preg_match(...)
$pattern = "//i"; // Matches everything

// Max no of news to return
$max_no = 30;

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

if ($rss)
{
foreach($rss as $item)
{
echo("".$item["title"]."
");
}
}

closeside();

Redigeret af flj d. 05-06-2008 14:09
 
deuce

Citer

flj skrev:
Her er koden der skal indsættes i et element:
...


Har du en idé om hvorfor RSS feedet ikke vises, og hvorfor bunden af siden er blevet "spist"?
 
http://www.neworleanssaints.dk
flj
Næh, ikke lige - har du et link til siden, hvor jeg kan se det - synes ikke lige jeg kan finde det på www.neworleanssaints.dk.

Har du aktiveret elementet? Ellers vises det ikke.
 
deuce
Det har været deaktiveret. Men er nu aktiveret!
 
http://www.neworleanssaints.dk
flj
Skal det forstås således, at det virker for dig nu?
 
deuce
Nej desværre...

Men nu er elementet aktiveret så I kan se hvad jeg mener med at elementet 'spiser' bund delen af siden.
 
http://www.neworleanssaints.dk
flj
Det ser ud til, at du får en time-out. Dvs. serveren står og venter på svar, men får det ikke, og efter en tid afbrydes eksekveringen af koden, og du må "nøjes" med hvad der er udskrevet indtil da. Jeg kan ikke forklare hvorfor, men hvis du retter linierne med specifikationen af dine feeds til dette:


$rss_feeds = array(
"http://www.neworleanssaints.com/RSS Feeds/Latest Events.aspx",
"http://www.neworleanssaints.com/RSS Feeds/Latest News.aspx"
);


så virker det - i hvert fald hos mig.

Det mærkelige er, at hvis brugen af %20 gav en forkert adresse, så burde du ikke få time-out, men en fejl. Men måske en med mere kendskab til finesserne bag url-adresser kan forklare det?
Redigeret af flj d. 23-06-2008 22:23
 
deuce
Nej, er stadig det samme...?!
 
http://www.neworleanssaints.dk
duedal
Prøv at ændre 3600 til 36000000.

Det hjalp hos mig.
 
flj
Prøv endelig, men det tror jeg ikke på. Det er tydeligt, at koden ikke kører færdig, så jeg tror slet ikke den kommer derhen, hvor tallet bruges.

Jeg tror, at det er fordi den amerikanske server nogen gange er langsom. Prøv at slette det ene af de 2 feeds (behold et, hvor der er nogen nyheder), og se om det hjælper.
 
flj
Nu er jeg forvirret?!

Det virker med blanktegn her på siden og på domaindirect.dk, men ikke på one.com. På one.com virker det med %20.

På din side virker det åbenbart ikke med nogen af delene. Kan du ikke prøve med et RSS feed uden blanke. Fx. "http://www.bold.dk/feed/rss.xml", og så melde tilbage.

Hvis det virker, så tror jeg det er noget med de blanke tegn i feedet. Hvis ikke er der noget andet galt, som skal fixes først.
 
deuce
Nu har jeg prøvet begge forslag men desværre ingen succes...
 
http://www.neworleanssaints.dk
flj
Hvis "bold.dk" ikke kører, er der noget mere fundamentalt galt. Kan du ikke poste koden i dit element, så skal jeg se på den.

Er du hurtig, bliver det inden ferienWink
 
deuce

openside("Nyt om New Orleans Saints");
/////////////////////////////////////////////////
// RSS reader v3 2008-03-23
// by Flemming Jensen, Copyright 2008
/////////////////////////////////////////////////

// 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*36000000; // 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_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 && 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.bold.dk/feed/rss.xml"
);

// Max age in hours
$max_age_hours = 1000;

// Pattern to match - see preg_match(...)
$pattern = "//i"; // Matches everything

// Max no of news to return
$max_no = 30;

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

if ($rss)
{
foreach($rss as $item)
{
echo("".$item["title"]."
");
}
}

closeside();

 
http://www.neworleanssaints.dk
flj
@deuce: Som du kan se her virker det uden videre hos mig.

Hvilket web-hotel?
Har du checket dine fejlmeldinger?
Hvilken PHP version?

Er på ferie fra i morgen, så hvis jeg ikke svarer er det derfor
Redigeret af flj d. 08-07-2008 09:43
 
deuce

Citer

flj skrev:
@deuce: Som du kan se her virker det uden videre hos mig.

Hvilket web-hotel?
Har du checket dine fejlmeldinger?
Hvilken PHP version?

Er på ferie fra i morgen, så hvis jeg ikke svarer er det derfor



Hvilket web-hotel? one.com
Har du checket dine fejlmeldinger? Nej, hvor gør man det?
Hvilken PHP version? v6.01.5
 
http://www.neworleanssaints.dk
pldk
kan man lave det så der står dato og tidspunkt før nyheden i rss?
 
flj
Ja, du kan bare modifere denne linie:



Problemet er, at den let bliver for "bred".

Tilføjelse:Fx sådan her:


Redigeret af flj d. 26-08-2008 23:29
 
Nielsen
Hey .. super godt script.. - det må jeg gi' dig .. meget nyttig..

Jeg har bare lidt problemer, den laver "?" -tegn fremfor "-" -tegn.. hvad kan det skyldes?
 
Nielsen
Hej igen..
Jeg har selv fundet løsningen på problemet jeg brugte en "str_replace".. det virkede ret godt..
 
Spring til debat: