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) puisque je n’ai pas d’information de date valable, je ne peu me baser sur un pubdate.
Il faut donc que je sache comment faire une recherche d’un mot dans le contenu text d’une balise XML contenue dans une base SQlite ?
Quel commande puis je utilisée ? PHP, SQlite, …
Une partie du code si necessaire
Merci d’avance
?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();
?>
Merci de votre aide