Rss feeds in database en uitlezen problematisch
Ik ben bezig met een website voor gamers waar op 1 site via RSS feeds van andere websites nieuws op mijn pagina komt. Om de snelheid wat te behouden wil ik dus een cronjob laten lopen die om een bepaalde tijd een update script run die feeds van de andere sites haalt en in mijn eigen database stop. Zodat ik die dus kan aanroepen op mijn site(logisch).
Ik gebruik op het moment een scriptje die ik hier heb weggeplukt maar heb hem een beetje aangepast.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?
function rssfeed($bron, $id)
{
$xml_feed = file_get_contents($bron);
$xml_praser = xml_parser_create();
xml_parse_into_struct($xml_praser,$xml_feed,$xml_keys,$xml_index);
xml_parser_free($xml_praser);
for($i = 0;!empty($xml_index['TITLE'][$i]);$i++){
$link = $xml_keys[$xml_index['LINK'][$i]]['value'];
$titel = $xml_keys[$xml_index['TITLE'][$i]]['value'];
$kop = $xml_keys[$xml_index['TITLE'][0]]['value'];
$description = $xml_keys[$xml_index['DESCRIPTION'][$i]]['value'];
//echo $kop . ' : ' . $titel . '<br>' . $description . '<br><br>';
mysql_query("insert into items(titel, description, link, feed_id) values('$titel','$description','$link','$id')");
}
}
connectDB();
$sql = mysql_query("select * from feeds");
while($row = mysql_fetch_object($sql)){
rssfeed($row->url_feed, $row->id);
}
?>
function rssfeed($bron, $id)
{
$xml_feed = file_get_contents($bron);
$xml_praser = xml_parser_create();
xml_parse_into_struct($xml_praser,$xml_feed,$xml_keys,$xml_index);
xml_parser_free($xml_praser);
for($i = 0;!empty($xml_index['TITLE'][$i]);$i++){
$link = $xml_keys[$xml_index['LINK'][$i]]['value'];
$titel = $xml_keys[$xml_index['TITLE'][$i]]['value'];
$kop = $xml_keys[$xml_index['TITLE'][0]]['value'];
$description = $xml_keys[$xml_index['DESCRIPTION'][$i]]['value'];
//echo $kop . ' : ' . $titel . '<br>' . $description . '<br><br>';
mysql_query("insert into items(titel, description, link, feed_id) values('$titel','$description','$link','$id')");
}
}
connectDB();
$sql = mysql_query("select * from feeds");
while($row = mysql_fetch_object($sql)){
rssfeed($row->url_feed, $row->id);
}
?>
...heel simpel. Ik heb dus een tabel met urls naar xml feeds van andere sites. Voor elke feed haal ik dus items op en stop ik die in de database.
Wat is nu het probleem?
1. Als ik de feed items gewoon echo werkt het allemaal prima. Als ik ze daarintegen in de database gooi, pakt ie sommige items niet.
2. Als ik het bestand aanroept gooit ie maar 127 items in de DB?! Heel raar maar waar.
3. Ik gooi dus items in de DB en elk item krijgt dus een id, het laatst ingevoerde item heeft dus het hoogste id:P Maar, hoe krijg ik dan het laatste nieuwsitem boven? Stel dat ik 10 nieuwe items invoer, waarvan de nieuwste dus de eerste is die ingevoerd word. Hoe krijg ik dan dus de nieuwste boven aan? Met asc en desc sorten werkt dus niet. Moet ik dan nieuwe tabellen aanmaken voor elke feed opzich? Of is er een andere manier?
Alvast bedankt voor jullie replies/antwoorden...
Gewijzigd op 01/01/1970 01:00:00 door Martijn
bump...?
Tijdens het inserten in je DB haalt MySQL misschien sommige tekens er uit voor je. Probeer het eens via mysql_real_escape_string.
2. Als ik het bestand aanroept gooit ie maar 127 items in de DB?! Heel raar maar waar.
Dat heeft misschien te maken met de maximum tijd dat een script mag draaien.
3. Ik gooi dus items in de DB en elk item krijgt dus een id, het laatst ingevoerde item heeft dus het hoogste id:P Maar, hoe krijg ik dan het laatste nieuwsitem boven? Stel dat ik 10 nieuwe items invoer, waarvan de nieuwste dus de eerste is die ingevoerd word. Hoe krijg ik dan dus de nieuwste boven aan? Met asc en desc sorten werkt dus niet. Moet ik dan nieuwe tabellen aanmaken voor elke feed opzich? Of is er een andere manier?
Je kunt een DATETIME veld aanmaken in je DB en die vullen met NOW() in je INSERT query. Later kun je daar dan op sorteren.
Wat een moeilijk gedoe, zorg gewoon dat je via PHP in die database kan(externe connectie). en vervolgens lees je daaruit je berichten. Wil je echt via RSS werken dan doe je hetzelfde enkel maak je er ff een content-type XML en dan in een while loop je XML tags
@ Jurgen, ik kan moeilijk database connectie maken naar andere sites. Die ik zelf niet beheer. Dit is de enigste mogelijkheid.
Ik zal even wat proberen, bedankt voor jullie input.
Ow, ik dacht dat je bevriend was met de andere webmaster oid.