regex et ATOM

Répondre
bibi
le 19/04/2005 à 17:39
bibi
Bonjour les gens . Ca fait un petit moment que je viens plus sur le site, trop a fond dans wow et dans mon stage :)

Je voulai faire un gestionnaire et afficheur de flux et donc je dois gérer tous les types de flux RSS mais la n'est pas le probleme. Lorsque le flux est de type ATOM, je dois catcher les <link ... > qui sont que de type text/html donc type="text/html"

voici a quoi ressemble une balise link
<link href="http://www.blogger.com/atom/6356614/108567929825946436" rel="service.edit" title="How to make a linkblog in Atom" type="application/atom+xml"/>
<link href="http://diveintomark.org/archives/2004/05/27/howto-atom-linkblog" rel="related" title="How to make a linkblog in Atom" type="text/html"/>


Le premier n'est pas a catché car il n'a pas le bon type, donc on doit prendre le 2eme . Mais le type="text/html" peut etre soit avant, soit apres le href et donc la se pose le probleme car je voudrais que s'il n'y est pas avant, il doit absolument y etre apres. J'ai donc regardé les sous-masques conditionnels et j'ai fait cette expression:

'/<link(.*)(type="text\/html")(.*) href="([^"]+)"(?(2)(.*)|(type="text\/html"))(\/?)>/i'


qui tourne avec un preg_match :

preg_match('/<link(.*)(type="text\/html")(.*) href="([^"]+)"(?(2)(.*)|(type="text\/html"))(\/?)>/i',$this->items[$i+1],$lien_atom);


Avec ceci:
<link href="http://www.blogger.com/atom/6356614/108567929825946436" rel="service.edit" title="How to make a linkblog in Atom" type="application/atom+xml"/>
<link href="http://diveintomark.org/archives/2004/05/27/howto-atom-linkblog" rel="related" title="How to make a linkblog in Atom" type="text/html"/>


Le tableau $lien_atom est vide.

Par contre , avec ceci :

<link rel="alternate" type="text/html" href="http://eurosport.tf1.fr/home/pages/v4/l3/s18/sport_lng3_spo18_sto709471.shtml">


le tableau ressemble a ca :

Array
(
[0] => <link rel="alternate" type="text/html" href="http://eurosport.tf1.fr/home/pages/v4/l3/s18/sport_lng3_spo18_sto709471.shtml">
[1] => rel="alternate"
[2] => type="text/html"
[3] =>
[4] => http://eurosport.tf1.fr/home/pages/v4/l3/s18/sport_lng3_spo18_sto709471.shtml
[5] =>
[6] =>
[7] =>
)


et donc tout fonctionne parfaitement.

J'espere avoir été clair

En gros, je voudrais que le premier exemple catch la ligne de link ou le type est text/html, comme dans le 2eme exemple meme si ce dernier ne comporte qu'une balise link

merci d'avance si vous avez eu la volonté d'arriver jusque la
commit suicide
zebden
le 20/04/2005 à 18:51
zebden
J'ai pas eu vraiment le temps de me pencher réélement dessus donc une fois que tu as ta balise en tout cas :

<?php
$attribut = Array('type', 'href');
$attribut = implode('|', $attribut);

$texte = '<link type="text/html" href="http://totot.com" />';
$masque = '`('.$attribut.')=\"(.[^\"]+)\"`i';

preg_match_all($masque, $texte, $match);

print_r($match);
?>


J'essaierais de refaire une fonction plus adequat pour ton problème quand je rentrerais du taff.. par contre si ca suffit, dis le que je me tue pas a la tache pour toi smiley
zebdinou pour les intimes / Blog : http://www.zebden.fr
bibi
le 20/04/2005 à 21:14
bibi
yop a vrai dire je l'ai fait en 2 fois moi comme ca :

<?php
$nb_debut = preg_match('/<link(.*)(type="text\/html")(.*) href="([^"]+)"(.*)(\/?)>/i',$this->items[$i+1],$lien_atom1);
if(empty($nb_debut))
{

preg_match('/<link(.*) href="([^"]+)"(.*)(type="text\/html")(.*)(\/?)>/i',$this->items[$i+1],$lien_atom2);
}
?>


j'essaye ta technique demain :)
commit suicide
zebden
le 02/05/2005 à 11:29
zebden
T'as reussi au final alors ??
zebdinou pour les intimes / Blog : http://www.zebden.fr
bibi
le 02/05/2005 à 22:41
bibi
ouep ca marche le truc avec 2 regex :)
commit suicide
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours