Just nu i M3-nätverket
Gå till innehåll

rss till en databas


adji

Rekommendera Poster

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]

Länk till kommentar
Dela på andra webbplatser

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... ;)

 

Länk till kommentar
Dela på andra webbplatser

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...

 

Länk till kommentar
Dela på andra webbplatser

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]

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...