Avatar billede buttersi Nybegynder
10. april 2007 - 12:43 Der er 17 kommentarer

gem nyheder fra rss til database

Hej,

Er det muligt at gemme nyheder fra f.eks Ekstra-bladets RSS feed ned til sin database.

Hvis ja, hvordan gør man det :-)?
Avatar billede jakobdo Ekspert
10. april 2007 - 13:33 #1
Ja, du skal have fat i en rss reader til php.
F.eks. kunne du tage et kig på magpie.
Derefter løber du alle feeds igennem og gemmer dem i en databasen.
Avatar billede jakobdo Ekspert
10. april 2007 - 13:33 #2
Avatar billede buttersi Nybegynder
10. april 2007 - 13:40 #3
Hej jakobdo, nu har jeg ført og fremmest lavet en side som viser mig de seneste nyheder fra fck.dk

det kan ses her http://fckonline.dk/opgave/gemrss.php

koden til den side ser således ud:

<?php
         
    require_once('magpierss-0.72/rss_fetch.inc');
        $num_items = 5;
        $rss = fetch_rss('http://fck.dk/rss/');
        $items = array_slice($rss->items, 0, $num_items);

    foreach ($items as $item) {
        $title = $item['title'];
        $description = str_replace('','',$item['description']);

    echo "<b>$title</b> <br>$description<br><br>";
      }
    ?>
Avatar billede buttersi Nybegynder
10. april 2007 - 13:42 #4
Så har jeg lavet en database med dette indhold:

id
title
description
dato
link
Avatar billede buttersi Nybegynder
10. april 2007 - 13:47 #5
Skal jeg så bare skrive

$gemrss = "INSERT INTO rss (title,description) values ('$title','$description')";
    mysql_query($gemrss) or die('Error');

så min kode ser således ud:

<?php
         
    require_once('magpierss-0.72/rss_fetch.inc');
        $num_items = 5;
        $rss = fetch_rss('http://fck.dk/rss/');
        $items = array_slice($rss->items, 0, $num_items);

    foreach ($items as $item) {
        $title = $item['title'];
        $description = str_replace('','',$item['description']);

    echo "<b>$title</b> <br>$description<br><br>";
      }
     
      include("include/connect.txt");
     
      $gemrss = "INSERT INTO rss (title,description) values ('$title','$description')";
    mysql_query($gemrss) or die('Error');

     
     
    ?>
Avatar billede jakobdo Ekspert
10. april 2007 - 13:51 #6
F.eks.:

foreach ($items as $item)
{
  $title      = $item['title'];
    $description = $item['description'];
    $date        = $item['pubDate'];
    $link        = $item['guid'];

    mysql_query("INSERT INTO tabel_navn (id,title,description,dato,link) VALUES ('','".$title."','".$description."','".$date."','".$link."')");
}
Avatar billede jakobdo Ekspert
10. april 2007 - 13:53 #7
og det hele samlet:

<?php

require('include/connect.txt');
require_once('magpierss-0.72/rss_fetch.inc');
$num_items = 5;
$rss = fetch_rss('http://fck.dk/rss/');
$items = array_slice($rss->items, 0, $num_items);

foreach ($items as $item)
{
    $title      = $item['title'];
    $description = $item['description'];
    $date        = $item['pubDate'];
    $link        = $item['guid'];

    mysql_query("INSERT INTO tabel_navn (id,title,description,dato,link) VALUES ('','".$title."','".$description."','".$date."','".$link."')");
}
?>
Avatar billede buttersi Nybegynder
10. april 2007 - 13:57 #8
Det virker fint, men jeg skal bare ind og opdatere siden for at den gemmer nyheden til min database. Og hvis jeg opdatere flere gange indsætter den nyheden igen.

Er der en måde man kan få den til at gemme nyhederne automatisk til databsen?
Avatar billede jakobdo Ekspert
10. april 2007 - 14:18 #9
Problemet bliver følgende:

Hvad gør en feed unik?
Dato?
Overskrift?
Dato + overskrift?
Avatar billede buttersi Nybegynder
10. april 2007 - 14:19 #10
Kunne det ikke også være Linket
Avatar billede jakobdo Ekspert
10. april 2007 - 14:26 #11
Det kunne man også godt bruge.
Det er et valg du skal tage.
Men i så fald, kunne man lave:

<?php

require('include/connect.txt');
require_once('magpierss-0.72/rss_fetch.inc');
$num_items = 5;
$rss = fetch_rss('http://fck.dk/rss/');
$items = array_slice($rss->items, 0, $num_items);

foreach ($items as $item)
{
    $title      = $item['title'];
    $description = $item['description'];
    $date        = $item['pubDate'];
    $link        = $item['guid'];
   
    //Vi tjekker om vi allerede har feeden i vores DB.
    $query = mysql_query("SELECT id FROM rss WHERE link = $link LIMIT 1");
    if(mysql_num_rows($query)==0)
    {
        //Hvis ikke, så indsætter vi den...
        mysql_query("INSERT INTO tabel_navn (id,title,description,dato,link) VALUES ('','".$title."','".$description."','".$date."','".$link."')");
    }
}
?>
Avatar billede buttersi Nybegynder
10. april 2007 - 14:35 #12
Hej igen,

har lige prøvet din kode, men hvis jeg opdatere to gange indsætter den stadig nyheden to gange
Avatar billede buttersi Nybegynder
10. april 2007 - 14:40 #13
Så så jeg også at der lige var kommet en ny nyhed i rss feedet. Men den selvom jeg opdatere siden gemmer den ikke den nye nyhed med derimod den forige
Avatar billede buttersi Nybegynder
10. april 2007 - 14:41 #14
* Så så jeg også at der var kommet en ny nyhed i rss feedet. Men selvom jeg opdatere siden gemmer den ikke den nye nyhed men derimod den forige nyhed.
Avatar billede jakobdo Ekspert
10. april 2007 - 14:57 #15
Du skal lige rette:

$query = mysql_query("SELECT id FROM rss WHERE link = $link LIMIT 1");
til:
$query = mysql_query("SELECT id FROM rss WHERE link = '$link' LIMIT 1");
Avatar billede buttersi Nybegynder
10. april 2007 - 15:04 #16
Okay nu tilføjer den ikke samme nyhed :-)

Men den vælger åbenbart at tilføje den næst nyeste nyhed. Og selvom jeg trykker opdater indsætter den ikke den nyeste nyhed.
Avatar billede jakobdo Ekspert
10. april 2007 - 15:13 #17
Hvad mener du med nyeste?
Du trækker jo 5 ud her: $num_items = 5;
Og når du trækker dem ud, så bør du sortere på dato.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester