Gå til innhold

Legge rss feed inn i database


Anbefalte innlegg

Hei!

 

Jeg skal legge vg/dagbladet`s rss feed inn i en database, slik at jeg kan vise siste nyheter på siden min. Vet det kommer ett standar oppsett, men på denne måten kan jeg vise dem som jeg vil.

 

Jeg har laget en fil som parser og legger inn, men har 2 problemer.

 

1.

Når nyhetene legges inn i databasen, legges de inn uten noe form for sjekk at de finnes fra før. Derfor legges det inn duplisering av nyhetene.

Tenkte en sjekk på de siste 100 nyhetene som er lagt inn skulle holde.

Det må da sjekkes om overskrifta er lik den som ligger i databasen.

 

2.

Denne fila må kunne startes som en cron jobb.

Jeg har foreløpig laget den som en php fil. Hvordan kan man lage dette slik at en cron jobb kan legge inn automatisk hvert 5 min?

 

Under her følger fila som er på "nybegynner" stadiet enda.

 

--------------------------------------------------------------------------------------------

<?
$filen = "http://www.dagbladet.no/rss/oppdatert.xml";
$result = "";
$query = "";
global $link;
global $description;
global $title;
global $date;
global $avis;
global $test;
function startElement($parser, $navn, $attrs) {
global $denneTagg;
$denneTagg = $navn;
global $avis;
switch ($navn) {
case "CHANNEL":
reset($attrs);
while (list($key, $value) = each($attrs)){
if($key == "RDF:ABOUT"){
if($value == "http://www.dagbladet.no/"){
$avis = "Dagbladet";
}else if($value == "http://www.vg.no/export/Alle/rdf.hbs"){
$avis = "VG";
}
echo $avis;
}
}
break;
case "NYHET":
//echo "<i>$navn </i>";
break;

case "TITLE":
//echo "<i>$navn </i>";
break;

case "LINK":
//echo "<i>$navn </i>";
break;

case "DESCRIPTION":
//echo "<i>$navn </i>";
break;


case "DC ATE":
$date = $data;
list ($year, $month, $day, $tid, $forskjell) = split ('[T+/.-]', $date);
echo "Month: $month; Day: $day; Year: $year; Time: $tid, Forskjell: $forskjell<br>\n";

case "DC:DATE":
//echo "<i>$navn </i>";
break;
default:
break;


}
}

function sluttElement($parser, $navn) {

global $denneTagg;

switch ($navn) {
case "NYHET":
//echo "<i>$navn </i>";
break;

case "TITLE":
//echo "<i>$navn </i>";
break;

case "LINK":
//echo "<i>$navn </i>";
break;

case "DESCRIPTION":
//echo "<i>$navn </i>";
break;


case "DC ATE":
$date = $data;
list ($year, $month, $day, $tid, $forskjell) = split ('[T+/.-]', $date);
echo "Month: $month; Day: $day; Year: $year; Time: $tid, Forskjell: $forskjell<br>\n";

case "DC:DATE":
//echo "<i>$navn </i>";
break;


default:
break;
}

$denneTagg = "";

}

function mellomData($parser, $data) {

global $denneTagg;
global $result;
global $query;
global $title;
global $link;
global $description;
global $date;
global $flag;
global $avis;

switch ($denneTagg) {

case "TITLE":
$title = $data;
break;

case "LINK":
$link = $data;
break;

case "DESCRIPTION":
$description = $data;
break;

case "DC:DATE":
$date = $data;
list ($year, $month, $day, $tid, $forskjell) = split ('[T+/.-]', $date);
echo "Month: $month; Day: $day; Year: $year; Time: $tid, Forskjell: $forskjell<br>\n";

case "DC:DATE":
$date = $data;
$flag = 1;
break;

default:
break;
}

if($flag ==1 ){
die(mysql_error()); 
@mysql_select_db(nuke_nuke1) 
|| die("Unable to select database"); 
$query = "insert into nuke_stories(aid,title, time, hometext, counter, informant, notes, link) values('$avis', '$title','$date', '$description', 0, '$avis', '$tid',  '$link')"; 
//$query = "UPDATE nuke_authors SET counter=counter+1 where aid='Dagbladet'"; 
$this->result = mysql_query($query); 

print "spørringen er ". $query;
$flag =0;
}
}

$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startElement", "sluttElement");
xml_set_character_data_handler($xml_parser, "mellomData");

if (!($fp = fopen($filen, "r")))
{
die("Kan ikke finne xml filen: $filen");
}
while ($data = fread($fp, 4096))
{
if (!xml_parse($xml_parser, $data, feof($fp)))
{
die(sprintf("XML feil: %s på linje %d",xml_error_string(xml_get_error_code($xml_parser)),xml_get_current_line_number($xml_parser)));
}
}
xml_parser_free($xml_parser);

?>

 

 

Noen forslag?

På forhånd takk :)

Endret av trondheim24
Lenke til kommentar
Videoannonse
Annonse

hvis du vil kjøre fia som en cron job er det bare å sette noe sånt som dette inn i cron-fila di:

 

wget http://127.0.0.1/hentnyhet.php /dev/null

 

Det mangler litt der, bla. hvor ofte den skal kjøre, men det er jo opp til deg å bestemme.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...