Page 1 sur 1

requete dans une balises description XML [SQlite][Debutant]

Posté : 19 févr. 2008, 00:48
par glou
Bonjour,

Je suis debutant en php, en simpleXML et en SQlite !

J'ai trouver un chouette modèle d'agregateur (www.ASP-PHP.net) de plusieurs flux XML dans une base de donnée SQlite qui me permet après une récupération sous forme exploitable.

Voila un exemple : rsslist.php5

j'aimerai que la base de données réalisée ou que la page d'affichage ne traite que les items XML dont la balise description contient une année précise (par ex:2007).

Vu que les flux rss xml que 'utilise ne contienne pas de date, je suis obliger de trier sur la date se trouvant dans la balise description afin de ne pas afficher ce qui est plus vieux que 2007.

Je peu vous mettre une partie du code si necessaire

Merci de votre aide

Posté : 19 févr. 2008, 12:42
par mere-teresa
Modération :
Afin d'obtenir plus de réponses, le sujet est déplacé dans le forum "XML".

Posté : 19 févr. 2008, 14:03
par Invité
Bonjour et merci de m'aiguiller

étant nouveau j'ai un peu hésité sur la section ... j'avais l'impression que c'était plus du SQlite.

Si non, personne ne sait !

J'imagine que le plus simple pour la taille de la base sqlite serai lors de la création de la base de ne garder que les items dont la description contient la valeur choisie.

Voici mon début de code pour ceux que ça inspirerait:
<?php

// Connexion/création de la base
$db = @sqlite_open($db_path) or die("Impossible de créer la base !");

// Génération des tables
@sqlite_query($db,"CREATE TABLE flux(
   ID INTEGER PRIMARY KEY,
   titre varchar(50),
   url varchar(255),
   rubrique varchar(20),
   maj INTEGER
)");
@sqlite_query($db,"CREATE TABLE item(
   ID INTEGER PRIMARY KEY,
   IDflux INTEGER,
   titre varchar(50),
   lien varchar(255),
   pubdate INTEGER,
   description TEXT
)");

// SQLite n'aime pas les ' :s
function sql($txt) { return str_replace("'","’",$txt); }

// Extrait le nom du site de l'url
function site($url) {
   $site = parse_url($url);
   return str_replace("www.","",$site["host"]);
}

// Date française (Merci Fabrice :)
function datefr($time) {
   setlocale(LC_TIME, "fr");
   return ucfirst(strftime("%A %d %B %Y",$time));
}

// Mise à jour de la base
function lit_rss($url) {
   global $db;
   // Récupération de l'ID du flux
   $result = sqlite_query($db,"SELECT ID FROM flux WHERE url='".$url."'");
   $id = sqlite_fetch_single($result);
   // Lecture du flux
   if($flux=simplexml_load_file($url)) {
      $flux = $flux->channel;
      $titre = $flux->title;
      // Mise à jour du flux
      sqlite_query($db,"UPDATE flux SET titre='".sql($titre)."',maj=".time()." WHERE ID=".$id);
      // Pour chaque <item>
      foreach($flux->item as $item) {
         // On récupère les champs
         $date = strtotime($item->pubDate); if(!$date) $date=time();
         $titre = $item->title;
         $lien = $item->link;
         $desc = $item->description; 
         // Anti-doublon sur URL
         $result = sqlite_query($db,"SELECT ID FROM item WHERE lien='".$lien."' AND IDflux=".$id);
         // Mise à jour
         if(sqlite_num_rows($result)>0) {
            sqlite_query($db,"UPDATE item SET titre='".sql($titre)."',description='".sql($desc)
               ."' WHERE ID=".sqlite_fetch_single($result));
         // ou ajout à la BD
         } else {
            sqlite_query($db,"INSERT INTO item(IDflux,titre,lien,pubdate,description) 
               VALUES(".$id.",'".sql($titre)."','".$lien."',".$date.",'".sql($desc)."')");
         }
      }
   }
}

update();

?>