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: 1

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
Tror der er gået ged i et eller andet. Prøv at starte forfra, og så kopiere de 2 ændringer ind.
 
wepper24
Det virker fint, hvis jeg f.eks kun skriver ''real'', men hvis jeg skriver ''real madrid'', så går det galt?
Redigeret af wepper24 d. 14-03-2008 17:26
 
www.tennisrunden.dk
flj
Jeg kan ikke reproducere fejlen. Er der andre, der kan prøve?

Du kan ikke "bare" skrive "real madrid". Mener at / til start og slut er krævet. Der er således en grund til, at jeg angav "/real madrid/i". Grunden er, at der checkes for match via et begreb, der hedder "regular expressions". En regular expression, er en ret avanceret måde at specificere, hvad du leder efter.

Du vil f.eks. kunne lave en regular expression, der giver dig alle de artikler, der indeholder en email adresse eller et telefonnumer. Grunden til at jeg valgte denne form, frem for et simpelt match på de angivne bogsaver er, at det er langt mere fleksibelt. Det "i" jeg har tilføjet til sidst i "/real madrid/i" betyder for eksempel, at der ikke skelnes mellem små og store bogstaver. Hvis du i stedet skrev "/^real madrid/i" ville du kun få artikler, der begyndte med "real madrid". Mulighederne er mangfoldige.

For de, der måtte ønske at udforske den verden, kan jeg anbefale denne tutorial på dansk.
 
wepper24
Nu skulle da også mene jeg ikke ''bare'' har skrevet real madrid, men har skrevet det på den rigtige måde:


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


`?
 
www.tennisrunden.dk
flj
Jeg kan desværre ikke vide hvad du rent faktisk gør. Jeg kan kun forholde mig til, hvad du skriver du gør:

Citer

Det virker fint, hvis jeg f.eks kun skriver ''real'', men hvis jeg skriver ''real madrid'', så går det galt?


Det var den statement, som jeg forholdt mig til.

Som jeg forstår det: Med

$pattern = "/real madrid/i";

får du fejlen

Warning: usort() [function.usort]: The argument should be an array in /usr/home/web/web207921/side_left.php(45) : eval()'d code on line 47

Warning: Invalid argument supplied for foreach() in /usr/home/web/web207921/side_left.php(45) : eval()'d code on line 70

mens det med

$pattern = "/real/i";

kører som det skal.

Er det rigtigt forstået?
 
wepper24
Ja.

Det er korrekt.
 
www.tennisrunden.dk
flj
Sorry, men hos mig spiller det bare.

Hvilken PHP version kører du?

Er der nogen andre, der kan reproducere wepper24's fejl?
 
flj
Jeg havde lige overset, at den fejl du refererer ikke skyldes ændringen i $pattern, men at du - når der ikke er nyheder, der matcher - får en udefineret variabel ($rss).

Det skulle være fixet nu (har rettet i den oprindelige kode).
 
wepper24
Tak. Nu virker det.

Forresten, er det så muligt at få det ind i en ''boks''.

Altså:

openside("name");
  echo "content";
closeside();



Jeg har selv forsøgt lidt, dog uden held.

EDIT:
Og evt. sådan at linksene popup'er i et nyt vindue istedet for det samme.
Redigeret af wepper24 d. 15-03-2008 13:03
 
www.tennisrunden.dk
Josso
Denne er i et element + åbner i nye vinduer. ;)


openside("RSS Nyheder");
/////////////////////////////////////////////////
// RSS reader
// 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();

// Looping for every rss feed to read
$rss = NULL;
$n = 0;
foreach($rss_feeds as $rss_feed)
{
// Load the RSS file
$rss_file = simplexml_load_file($rss_feed);

// Looping for every item returned
foreach($rss_file->channel->item as $item)
{
$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"] = utf8_decode($item->pubDate);
$rss[$n]["timestamp"] = $timestamp;
$rss[$n]["description"] = utf8_decode($item->description);
$n++;
}
}
}

// 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://ing.dk/rss/nyheder", "http://bt.dk/rss/sport.xml");

// Max age in hours
$max_age_hours = 8;

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

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


$rss = rss_feeds($rss_feeds, $max_age_hours, $pattern, $max_no);
if ($rss)
{
foreach($rss as $item)
{
echo("target='_blank'>".$item["title"]."
");
}
}
closeside();

Redigeret af Josso d. 15-03-2008 13:14
img186.imageshack.us/img186/7947/macuserbar1oz3.png
 
http://mymix.dk
flj
Fint det virker - drop gerne et link når du er helt færdig.

Hvis du klipper hele min kode ind i stedet for echo "content"; så burde det virke - det gør det hos mig. Jeg bruger et center-element da det er ret bredt.

For åbning i ny side tilføj target='_blank' til .
 
wepper24
Niksen. Virker desværre ikke.

''Parse error: syntax error, unexpected '[' in /usr/home/web/web207921/side_right.php(24) : eval()'d code on line 79''

EDIT:
Så ændrede du lige dit indlæg, så nu virker det..

Great job, man! Smile
Redigeret af wepper24 d. 15-03-2008 13:19
 
www.tennisrunden.dk
Josso

Citer

wepper24 skrev:
EDIT:
Så ændrede du lige dit indlæg, så nu virker det..

Great job, man! Smile

Heh.. opdagede at jeg ikke fik lukket et [color]-tag. Wink
img186.imageshack.us/img186/7947/macuserbar1oz3.png
 
http://mymix.dk
PiratDK
Jeg vil gerne lige informere om, at dette GENIALE element, ikke virker i php Version 4.4.0.
Det kræver mindst Version 5.X

Bare så folk ikke sidder og kæmper forgæves.
 
flj
Meget relevant - simplexml_load_file blev tilføjet i PHP5 - det er det, der er problemet.

For de ihærdige kan der uden tvivl google's en parser som simplexml_load_file, så det også duer med PHP 4.
 
wepper24
På min side www.hala-madrid.dk kan man fint se nyhederne, og de virker egentligt godt.

Dog kan man, hvis man trykker F5 - måske et par gange, se at den kokser fuldstændig i det.

Hvad kan årsagen til det være? Frown
 
www.tennisrunden.dk
flj
Det ser godt ud - virkelig en mulighed for at samle nogle nyheder sammen, som andre ikke har, og gøre siden unik og attraktiv!

Du henter fra mindst 4 feeds - hvor mange er der? Når jeg spørger er det fordi jeg tror, at det i praksis kan blive en begræsning, idet det godt kan tage lang tid at læse dem.

Jeg kan ikke fpå den til at kokse. Selv mange hurtige tryk på F5 har blot den konsekvens, atd er går noget tid.

Kan du beskrive hvad "kokse fuldstændig" indebærer - et billede eller en fejlmeddelelse. Det kan være browser-specifikt, men lad os se på det.
 
wepper24
Jeg henter fra 6 sider.

Her er et billede af fejlen:
http://imageshack.dk//viewimage.php?f...591552.jpg
Redigeret af wepper24 d. 16-03-2008 19:30
 
www.tennisrunden.dk
flj
Den kan jeg ikke lige greje. Hvad siger alle I phpfusion eksperter - hvad tror I årsagen er???
 
Josso
Hmm...
Det ser ud til at der er 3-4 forskellige fejl - sikkert pga. en fejl.

Læg lige din kode op, her. Wink
img186.imageshack.us/img186/7947/macuserbar1oz3.png
 
http://mymix.dk
wepper24

openside("Nyheder");
 /////////////////////////////////////////////////
// RSS reader
// 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();

// Looping for every rss feed to read
$rss = NULL;
$n = 0;
foreach($rss_feeds as $rss_feed)
{
// Load the RSS file
$rss_file = simplexml_load_file($rss_feed);

// Looping for every item returned
foreach($rss_file->channel->item as $item)
{
$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"] = utf8_decode($item->pubDate);
$rss[$n]["timestamp"] = $timestamp;
$rss[$n]["description"] = utf8_decode($item->description);
$n++;
}
}
}

// 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", "http://bt.dk/rss/sport.xml", "http://tipsbladet.dk/rss.php", "http://www.kunsport.dk/rss/rss_280.xml", "http://www.totalbold.dk/feeds/news.php", "http://www.indkast.dk/syndicate/rss.xml");


// Max age in hours
$max_age_hours = 240000;

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

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

$rss = rss_feeds($rss_feeds, $max_age_hours, $pattern, $max_no);
if ($rss)
{
foreach($rss as $item)
{
echo("".$item["title"]."
");
}
}
closeside();

Redigeret af wepper24 d. 16-03-2008 19:57
 
www.tennisrunden.dk
Spring til debat: