Stocker dans une BDD les infos d'un flux RSS

Fermé
boss183 Messages postés 181 Date d'inscription lundi 7 janvier 2008 Statut Membre Dernière intervention 7 octobre 2011 - 15 avril 2011 à 16:27
creadiff Messages postés 445 Date d'inscription samedi 3 avril 2010 Statut Membre Dernière intervention 3 novembre 2011 - 18 avril 2011 à 16:13
Bonjour à tous,

Je souhaiterais récupérer des infos provenant de flux RSS et les stocker directement dans une base de données. Je n'ai pas réellement d'idée pour faire ça, je pense que la difficulté va être d'extraire juste les infos que l'on veut et qu'elles constituent les différents attributs de la table.

Merci d'avance

9 réponses

creadiff Messages postés 445 Date d'inscription samedi 3 avril 2010 Statut Membre Dernière intervention 3 novembre 2011 57
17 avril 2011 à 04:47
Trois étapes importantes :

1 - Récupérer le contenu texte du flux RSS (en PHP, tu pourras utiliser file_get_contents($url_du_flux_rss)

2 - Parser le flux RSS, qui est à la base au format XML (en PHP, la classe DOMDocument pourra t'être d'une grande aide)

3 - Rechercher les informations d'intérêt dans ce flux, et les placer dans une base de données (en PHP, à grands coups de foreach(){} et de mysql_query())
1
boss183 Messages postés 181 Date d'inscription lundi 7 janvier 2008 Statut Membre Dernière intervention 7 octobre 2011 17
18 avril 2011 à 09:07
Bonjour,

Alors j'ai réussi à stocker dans une base de donnée mais malheureusement pour moi les informations venant du flux RSS sont une chaine de caractère.
Exemple : CERTA-2011-AVI-223 : Multiples vulnérabilités dans BlackBerry Enterprise Server (14 avril 2011)
Pour l'instant je n'isole que 3 paramètres : title, link et desciption mais je souhaiterais isoler le nom du logiciel et je ne sais pas trop comment surtout que je souhaiterais exploiter d'autres flux RSS qui n'auront pas le même modèle.
En tout cas, je vous remercie pour votre aide.
0
creadiff Messages postés 445 Date d'inscription samedi 3 avril 2010 Statut Membre Dernière intervention 3 novembre 2011 57
18 avril 2011 à 12:37
Le flux RSS n'est pas une chaîne de caractères ; c'est un format standardisé, qui s'organise sous cette forme :
<rss>
    <channel>
        <title>Titre du flux</title>
        <link>Lien vers le site source</link>
        <description>Description du contenu du flux</description>
        <title>
        <item>
            <title>Titre du premier article</title>
            <link>Lien vers l'article source</link>
            <description>Contenu du premier article</description>
        </item>
        <item>
            <title>Titre du deuxième article</title>
            <link>Lien vers l'article source</link>
            <description>Contenu du deuxième article</description>
        </item>
    </channel>
</rss>

Ces balises sont loin d'être les seules, d'autres peuvent venir les compléter (voir ici).
Seules les plus utilisées ont été présentées ci-dessus.

Certains navigateurs n'afficheront que le texte, dans ce cas il faudra afficher la source pour visualiser le XML. Sinon, donne un lien vers le flux que tu utilises, je verrai si je peux t'orienter à partir de là.
0
boss183 Messages postés 181 Date d'inscription lundi 7 janvier 2008 Statut Membre Dernière intervention 7 octobre 2011 17
18 avril 2011 à 14:16
Merci pour ta réponse, je te donne quelques liens dont je veux extraire les données :

http://www.certa.ssi.gouv.fr/site/certa.rss
http://www.auscert.org.au/rss.html
https://sc1.checkpoint.com/sc1/web/smartdefense_atomz.xml

donc voilà je sais pas si tu vas pouvoir m'aider, pour l'instant mon code ressemble à ça :

require_once 'rss_fetch.inc';

$urlcerta = 'http://www.certa.ssi.gouv.fr/site/certa.rss';
$rss = fetch_rss($urlcerta);

foreach ($rss->items as $item ) {
        $sql= "INSERT INTO fluxrss VALUES ('$item[title]','$item[link]','$item[description]')";
        mysql_query ($sql);
}


merci d'avance
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
creadiff Messages postés 445 Date d'inscription samedi 3 avril 2010 Statut Membre Dernière intervention 3 novembre 2011 57
18 avril 2011 à 14:53
Ton INSERT laisse penser qu'il n'y a pas de clé primaire dans ta table... Très important !
Et il faut faire attention aux doublons aussi...
Bref.

Sinon, il est préférable d'écrire
$sql= "INSERT INTO fluxrss (title, link, desc)
VALUES ('$item[title]','$item[link]','$item[description]')";


Ce code est plus facile à maintenir ; en effet, le jour où tu rajoutes une colonne (comme une clé primaire (j'insiste, c'est très important), la date d'insertion, le numéro d'identification du message...), il n'y aura pas besoin de changer toutes tes requêtes...
0
boss183 Messages postés 181 Date d'inscription lundi 7 janvier 2008 Statut Membre Dernière intervention 7 octobre 2011 17
18 avril 2011 à 14:55
ok merci, je fais les changements sur mes requêtes.
Tu as une idée pour extraire que le nom du logiciel pour ces flux RSS ?
0
creadiff Messages postés 445 Date d'inscription samedi 3 avril 2010 Statut Membre Dernière intervention 3 novembre 2011 57
18 avril 2011 à 14:58
N'oublions pas non plus d'échapper certains caractères !
Sinon, les bugs seront fréquents (voire systématiques (voire graves)).

foreach ($rss->items as $item ) {
    $title = mysql_real_escape_string($item["title"]);
    $link = mysql_real_escape_string($item["link"]);
    $description = mysql_real_escape_string($item["description"]);
    $sql = "INSERT INTO  (title, link, description) ";
    $sql.= "VALUES ('$title','$link','$description')";
    mysql_query($sql);
}
0
boss183 Messages postés 181 Date d'inscription lundi 7 janvier 2008 Statut Membre Dernière intervention 7 octobre 2011 17
18 avril 2011 à 15:12
encore merci !

Par contre, je ne sais toujours pas extraire les données qui m'intéressent dans ce flux. Tu as pu regarder les exemple que je t'ai mis ?
0
creadiff Messages postés 445 Date d'inscription samedi 3 avril 2010 Statut Membre Dernière intervention 3 novembre 2011 57
18 avril 2011 à 16:13
Oui, c'est bien du beau RSS tout valide !

Par contre je ne connais pas la librairie que tu utilises (rss_fetch.inc), personnellement je parse directement le XML avec DOMDocument (que j'évoquais au premier post).
0