Just nu i M3-nätverket
Jump to content

rss till en databas


adji

Recommended Posts

jag håller på att göra en sida som ska hämta rss info från lite olika siter och lägga in i en databas, jag har fixat så att den bara hämtar 1gång/timmen och updaterar databasen. Det är bara ett problem; den uppdaterar bara nyhet 1-2, 5-10. Alltså inte 3 och 4. Jag blir tokig. Nån som har nån aning varför?:

Här kommer exempelkoden på hur jag lägger in rss infot i databasen

$host1 = 'macrumors.com';
$uri1 = 'macrumors.xml';

$fp = fsockopen($host1, 80, $errno, $errstr, 20);

if (!$fp) {
die("Network error: $errstr ($errno)");
} else {
$xml1 = '';
fputs($fp, "GET /$uri1 HTTP/1.0\r\nHost: $host1\r\n\r\n");
while (!feof($fp)) {
	$xml1 .= fgets($fp, 128);
}
fclose ($fp);
}

function untag($string, $tag) {
$tmpval = array();
$preg = "|<$tag>(.*?)</$tag>|s";

preg_match_all($preg, $string, $tags);
foreach ($tags[1] as $tmpcont){
	$tmpval[] = $tmpcont;
}
return $tmpval;
}



$items = untag($xml1, 'item');

foreach ($items as $item) {
$title = untag($item, 'title');
$link = untag($item, 'link');
$num = $num + 1;
$id= $num;

#$html .= '<img src=redDot.gif> <a href="' . $link[0] . '">' . $title[0] . "</a> $id <br />\n";
$dbinfo = mysql_db_query("newsfeeder", "UPDATE macroumors SET title = '$title[0]', link = '$link[0]' WHERE id ='$id'");

 

[inlägget ändrat 2003-02-09 21:08:25 av / Adji]

Link to comment
Share on other sites

Det beror antagligen (bara läst igenom din kod, inte testat) på det reguljära uttrycket i untag()-funktionen.

Reguljära uttryck är som standard "greedy" som det står i manualen. Det beryder att de försöker matcha så mycket de kan.

I ditt fall har du <$tag>(.*?)</$tag>

(.*?) delen kan ju matcha vad som helst, även en annan <$tag> exempelvis.

Så mitt förslag är att du letar fram med strpos() istället exempelvis, eller ändrar ditt reguljära uttryck. Hur det skulle se ut har jag dock inte funderat på, men hör av dig igen om du behöver mer jälp så ska jag försöka klura ut det... ;)

 

Link to comment
Share on other sites

cariad: jag är inte säker på att jag förstår vad du menar, problemet ligger ju inte i att läsa xml(rss) filen utan varför inte samtliga hämtade rubriker lagras i dataabasen. Alltså varför den hoppar över 2st (3 & 4)

 

Om jag kör samma slinga som ovan fast byter ut partiet som sparar i databasen och bara skriver ut resultatet fungerar det fin fint...

 

Link to comment
Share on other sites

Aha! Du klargjorde inte riktigt det i första inlägget.

Nu ser jag i alla fall vad problemet är.

I både 3 & 4 finns ett '-tecken i titeln. Nu säger du nog också "aha!" :)

 

Du måste ju "escape":a ' teckenen i din SQL-fråga.

Görs med exempelvis:

$sql = "INSERT ... VALUES('" . addcslashes($title[0], "\\'") . "')";

 

 

[inlägget ändrat 2003-02-10 00:01:15 av Cariad]

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...