WRInaute occasionnel
Salut,
J'ai un souci qui me prend la tête depuis plusieurs jours.
dans le cadre d'un projet, je vais permettre à tous de charger un flux XML à travers un formulaire. Pas de souci, je contrôle si l'URL est accessible, s'il s'agit bien d'un flux... mais comme tout le monde risque de soumettre un peu tout et n'importe quoi, je dois aussi m'assurer que la structure du flux est bonne avec la présence des balises title, link et description
Mon souci, impossible de contrôler si mes trois balises sont bien présentes. Voici mon code, qui pourra peut être en aider certains :
C'est au niveau de ces lignes que je ne sais pas comment vérifier si la balise existe ou non :
Pour le reste, tout est ok. Je veux pas que tout parte en sucette si au lien d'utiliser les balises standard, un flux utilise des balises maison du type "titre", "lien" et "texte", ce qui rendrait le parsing problématique.
Je précise qu'il s'agit bien entendu de flux distants qui ne sont pas les miens, sinon, je ne me poserait même pas la question de la conformité du balisage.
Si vous avez la soluce, merci.
J'ai un souci qui me prend la tête depuis plusieurs jours.
dans le cadre d'un projet, je vais permettre à tous de charger un flux XML à travers un formulaire. Pas de souci, je contrôle si l'URL est accessible, s'il s'agit bien d'un flux... mais comme tout le monde risque de soumettre un peu tout et n'importe quoi, je dois aussi m'assurer que la structure du flux est bonne avec la présence des balises title, link et description
Mon souci, impossible de contrôler si mes trois balises sont bien présentes. Voici mon code, qui pourra peut être en aider certains :
Code:
//-- Nombre maximum de lignes qui s'affichent sur votre site
$max_lignes = 1;
$adresse_flux = $_POST['urlrss']; //-- Adresse complète du flux RSS.
//-- Nom des Balises à afficher dans le résumé du flux ( voir (1) )
$balises = array('title', 'link', 'description');
function readFeedCurl ( $url, $objets, $nb_items ) {
$msg_error = 'Erreur';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec ($curl);
curl_close ($curl);
if ( !empty ( $data ) ) {
$pos = strpos ( $data, '<?xml version="1.0" encoding="utf-8"?>' );
if ( $pos === false ) {
echo utf8_encode ( $msg_error );
}
else {
@$xml = new simpleXMLElement ( $data );
$i = 0;
$resultat = array();
//-- On boucle pour récupérer les différents <item>
foreach ( $xml -> channel -> item as $item ) {
//-- On boucle pour automatiser les récupération des balises en fonction du tableau
foreach ( $objets as $objet ) {
$resultat[$i][$objet] = $item->$objet;
if ( $resultat[$i][$objet] ) { return true; }
else {
echo utf8_encode ( $msg_error );
break;
}
}
$i++;
if ( $i > $nb_items ) { break; }
}
if ( empty ( $resultat[0] ) ) { echo utf8_encode ( $msg_error ); }
}
}
else {
echo utf8_encode ( $msg_error );
}
}
C'est au niveau de ces lignes que je ne sais pas comment vérifier si la balise existe ou non :
Code:
début des soucis if ( $resultat[$i][$objet] ) { return true; }
else {
echo utf8_encode ( $msg_error );
break;
Fin des soucis }
Je précise qu'il s'agit bien entendu de flux distants qui ne sont pas les miens, sinon, je ne me poserait même pas la question de la conformité du balisage.
Si vous avez la soluce, merci.