Page 1 sur 1

Recuperer flux yahoo

Posté : 20 janv. 2008, 22:04
par momowell
Voila le flux http://fr.news.yahoo.com/rss/france.xml

je m'interresse a ceci

Code : Tout sélectionner

<item> <media:content url="http://d.yimg.com/eur.yimg.com/ng/ne/afp/20080120/19/2846836068-louis-de-cazenave-est-mort-lazare-ponticelli-devient-le-dernier.jpg?x=281&y=400&sig=YFVGznaz88kMKO8ySL.PAw--" height="400" width="281"></media:content> <title><![CDATA[Louis de Cazenave est mort, Lazare Ponticelli devient le dernier poilu vivant]]></title> <link>http://fr.news.yahoo.com/afp/20080120/tfr-histoire-defense-deces-prev-f56f567_2.html</link> <guid isPermaLink="false">/afp/20080120/r_t_afp_fr_other/tfr-histoire-defense-deces-prev-f56f567_2</guid> <pubDate>Sun, 20 Jan 2008 19:55:00 +0000</pubDate> <description><![CDATA[Louis de Cazenave, l'un des deux derniers poilus de la Première Guerre mondiale, s'est éteint dimanche au petit matin, à l'âge de 110 ans, faisant de Lazare Ponticelli, 110 ans et de quelques semaines son cadet, le dernier combattant français de la "Der des der" encore vivant.]]></description> <media:text type="html">Louis de Cazenave, l'un des deux derniers poilus de la Premi&#xE8;re Guerre mondiale, s'est &#xE9;teint dimanche au petit matin, &#xE0; l'&#xE2;ge de 110 ans, faisant de Lazare Ponticelli, 110 ans et de quelques semaines son cadet, le dernier combattant fran&#xE7;ais de la "Der des der" encore vivant.</media:text> <media:credit role="publishing company">AFP</media:credit> </item>
j'aimerai recuperer l'image
<media:content url="http://d.yimg.com/eur.yimg.com/ng/ne/af ... ernier.jpg?x=281&y=400&sig=YFVGznaz88kMKO8ySL.PAw--" height="400" width="281"></media:content>
cela fait deux jours que je cherche et rien, j'ai essayé plein de parseur et sa ne marche pas
avec simplexml j'obtient des choses comme ca:

Code : Tout sélectionner

object(SimpleXMLElement)#5 (5)
[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Posté : 20 janv. 2008, 22:12
par zeus
Bonjour, (c'est gratuit et ça fait plaisir)


Pour que nous puissions t'aider, il nous faudrait ton code actuel :?

Posté : 21 janv. 2008, 00:04
par momowell
bonsoir, désolé mais je n'ai pas l'habitude, je n'avais pas l'impression de parler a quelqu'un en particulier alors j'ai directement enchainé avec mon probleme.

donc j'ai un fichier test.php5
<?
var_dump (simplexml_load_file('http://fr.news.yahoo.com/rss/fc/britney-spears.xml'));
?>
Apres execution j'ai

Code : Tout sélectionner

object(SimpleXMLElement)#1 (2) { ["@attributes"]=> array(1) { ["version"]=> string(3) "2.0" } ["channel"]=> object(SimpleXMLElement)#2 (9) { ["title"]=> string(57) "Yahoo! Actualités: Britney Spears | Dossier d'actualité" ["copyright"]=> string(48) "Copyright © 2007 Yahoo! Tous droits réservés." ["link"]=> string(47) "http://fr.news.yahoo.com/fc/britney-spears.html" ["description"]=> object(SimpleXMLElement)#3 (0) { } ["language"]=> string(5) "fr-fr" ["lastBuildDate"]=> string(31) "Sun, 20 Jan 2008 16:46:00 +0000" ["ttl"]=> string(1) "5" ["image"]=> object(SimpleXMLElement)#4 (5) { ["title"]=> string(21) "Yahoo! Actualités FR" ["link"]=> string(47) "http://fr.news.yahoo.com/fc/britney-spears.html" ["url"]=> string(51) "http://l.yimg.com/eur.yimg.com/i/fr/main/l/news.gif" ["height"]=> string(2) "30" ["width"]=> string(3) "140" } ["item"]=> array(10) { [0]=> object(SimpleXMLElement)#5 (5) { ["title"]=> object(SimpleXMLElement)#15 (0) { } ["link"]=> string(101) "http://fr.news.yahoo.com/newsdestars/20080120/ten-britney-spears-est-morte-pour-l-asso-ff967a9_1.html" ["guid"]=> string(93) "/newsdestars/20080120/r_t_ndstrs_en_people/ten-britney-spears-est-morte-pour-l-asso-ff967a9_1" ["pubDate"]=> string(31) "Sun, 20 Jan 2008 16:46:00 +0000" ["description"]=> object(SimpleXMLElement)#16 (0) { } } [1]=> object(SimpleXMLElement)#6 (5) { ["title"]=> object(SimpleXMLElement)#17 (0) { } ["link"]=> string(99) "http://fr.news.yahoo.com/newsdestars/20080120/ten-viree-nocturne-pour-britney-spears-ff967a9_1.html" ["guid"]=> string(91) "/newsdestars/20080120/r_t_ndstrs_en_people/ten-viree-nocturne-pour-britney-spears-ff967a9_1" ["pubDate"]=> string(31) "Sun, 20 Jan 2008 13:28:00 +0000" ["description"]=> object(SimpleXMLElement)#18 (0) { } } [2]=> object(SimpleXMLElement)#7 (5) { ["title"]=> object(SimpleXMLElement)#19 (0) { } ["link"]=> string(101) "http://fr.news.yahoo.com/newsdestars/20080119/ten-britney-spears-et-kevin-federline-re-ff967a9_1.html" ["guid"]=> string(93) "/newsdestars/20080119/r_t_ndstrs_en_people/ten-britney-spears-et-kevin-federline-re-ff967a9_1" ["pubDate"]=> string(31) "Sat, 19 Jan 2008 13:46:00 +0000" ["description"]=> object(SimpleXMLElement)#20 (0) { } } [3]=> object(SimpleXMLElement)#8 (5) { ["title"]=> object(SimpleXMLElement)#21 (0) { } ["link"]=> string(81) "http://fr.news.yahoo.com/rtrs/20080119/tts-people-spears-paparazzi-ca02f96_1.html" ["guid"]=> string(70) "/rtrs/20080119/r_t_rtrs_ts_other/tts-people-spears-paparazzi-ca02f96_1" ["pubDate"]=> string(31) "Sat, 19 Jan 2008 08:48:00 +0000" ["description"]=> object(SimpleXMLElement)#22 (0) { } } [4]=> object(SimpleXMLElement)#9 (5) { ["title"]=> object(SimpleXMLElement)#23 (0) { } ["link"]=> string(101) "http://fr.news.yahoo.com/newsdestars/20080118/ten-britney-spears-enceinte-pour-la-troi-ff967a9_1.html" ["guid"]=> string(93) "/newsdestars/20080118/r_t_ndstrs_en_people/ten-britney-spears-enceinte-pour-la-troi-ff967a9_1" ["pubDate"]=> string(31) "Fri, 18 Jan 2008 08:13:00 +0000" ["description"]=> object(SimpleXMLElement)#24 (0) { } } [5]=> object(SimpleXMLElement)#10 (5) { ["title"]=> object(SimpleXMLElement)#25 (0) { } ["link"]=> string(100) "http://fr.news.yahoo.com/canalstars/20080117/ten-un-point-sur-les-spearseries-de-brit-df86444_1.html" ["guid"]=> string(91) "/canalstars/20080117/r_t_canalst_en_pepl/ten-un-point-sur-les-spearseries-de-brit-df86444_1" ["pubDate"]=> string(31) "Thu, 17 Jan 2008 14:58:03 +0000" ["description"]=> object(SimpleXMLElement)#26 (0) { } } [6]=> object(SimpleXMLElement)#11 (5) { ["title"]=> object(SimpleXMLElement)#27 (0) { } ["link"]=> string(101) "http://fr.news.yahoo.com/newsdestars/20080117/ten-britney-spears-dans-une-cabine-d-ess-ff967a9_1.html" ["guid"]=> string(93) "/newsdestars/20080117/r_t_ndstrs_en_people/ten-britney-spears-dans-une-cabine-d-ess-ff967a9_1" ["pubDate"]=> string(31) "Thu, 17 Jan 2008 12:43:00 +0000" ["description"]=> object(SimpleXMLElement)#28 (0) { } } [7]=> object(SimpleXMLElement)#12 (5) { ["title"]=> object(SimpleXMLElement)#29 (0) { } ["link"]=> string(85) "http://fr.news.yahoo.com/actustar/20080117/ten-britney-spears-enceinte-b50fa68_1.html" ["guid"]=> string(75) "/actustar/20080117/r_t_actust_en_pepl/ten-britney-spears-enceinte-b50fa68_1" ["pubDate"]=> string(31) "Thu, 17 Jan 2008 09:35:00 +0000" ["description"]=> object(SimpleXMLElement)#30 (0) { } } [8]=> object(SimpleXMLElement)#13 (5) { ["title"]=> object(SimpleXMLElement)#31 (0) { } ["link"]=> string(98) "http://fr.news.yahoo.com/actustar/20080116/ten-kevin-federline-se-confie-sur-ses-pr-b50fa68_2.html" ["guid"]=> string(88) "/actustar/20080116/r_t_actust_en_pepl/ten-kevin-federline-se-confie-sur-ses-pr-b50fa68_2" ["pubDate"]=> string(31) "Wed, 16 Jan 2008 10:45:00 +0000" ["description"]=> object(SimpleXMLElement)#32 (0) { } } [9]=> object(SimpleXMLElement)#14 (5) { ["title"]=> object(SimpleXMLElement)#33 (0) { } ["link"]=> string(101) "http://fr.news.yahoo.com/newsdestars/20080116/ten-britney-spears-fait-d-adnan-ghalib-s-ff967a9_1.html" ["guid"]=> string(93) "/newsdestars/20080116/r_t_ndstrs_en_people/ten-britney-spears-fait-d-adnan-ghalib-s-ff967a9_1" ["pubDate"]=> string(31) "Wed, 16 Jan 2008 09:46:00 +0000" ["description"]=> object(SimpleXMLElement)#34 (0) { } } } } }
je sais que je peut par exemple acceder à ce genre de champs

Code : Tout sélectionner

["title"]=> string(57) "Yahoo! Actualités: Britney Spears | Dossier d'actualité" ["copyright"]=> string(48) "Copyright © 2007 Yahoo! Tous droits réservés."
mais en ce qui concerne ceci

Code : Tout sélectionner

object(SimpleXMLElement)#15 (0) { }
je ne vois pas

un grand merci d'essayer de comprendre. Bonne soirée

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Posté : 21 janv. 2008, 00:27
par Hubert Roksor
désolé mais je n'ai pas l'habitude
Je ne sais pas comment ça se passe sur les autres forums que tu fréquentes, mais sur PHPFrance il est de bon ton de saluer ses lecteurs au début du sujet avant d'exposer son problème, expliquer ce que l'on a essayé, ce qui n'a pas marché, et ce que l'on recherche, avant de remercier les futurs participants.

Sinon, ton message ressemble à "c'est mon problème, réglez-le pour moi" et c'est généralement interprété comme de l'ingratitude.

À part ça, oublie toute forme de "parseur" et concentre-toi sur SimpleXML. Dans le code suivant, j'utilise XPath pour récupérer tous les nœuds media:content n'importe où dans l'arbre et possédant un attribut url qui n'est pas vide.
$rss = simplexml_load_file('http://fr.news.yahoo.com/rss/fc/britney-spears.xml');

foreach ($rss->xpath('//media:content[@url != ""]') as $content)
{
	$url = $content['url'];
}
À toi ensuite de voir ce que tu veux faire de $url. Si tu veux retirer tout ce qui suit le ?, regarde du côté de substr() / strpos()

Posté : 21 janv. 2008, 16:08
par Victor BRITO
Pour récupérer un nœud préfixé, il faut récupérer son espace de nom.

L'espace de nom est renseigné à la racine du flux, plus précisément dans l'attribut dont le nom est xmlns: suivi du préfixe. Dans ton cas, il s'agit de :

Code : Tout sélectionner

<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/">
Ensuite, avec SimpleXML et sa méthode children (), on procède comme suit :
<?php 
// Chargement du flux RSS
$xml = simplexml_load_file ('http://fr.news.yahoo.com/rss/france.xml');

// Récupération des nœuds item
$item = $xml -> channel -> item;

// On boucle sur chaque nœud item pour en récupérer les nœuds enfants
// correspondant à l'espace de nom de media (media:content, media:text et media:credit)
foreach ($item as $noeud)
{
  // On boucle sur chaque nœud enfant
  // correspondant à l'espace de nom de media (media:content, media:text et media:credit)
  foreach ($noeud -> children ('http://search.yahoo.com/mrss/') as $media => $valeur)
  {
    // Nœud media:content
    if ($media == 'content')
    {
      // Récupération des attributs
      foreach ($valeur -> attributes () as $nom => $attribut)
      {
        $media_content[$nom] = (string) $attribut;
      }
      echo '<p><img src="'.$media_content['url'].'" alt="" width="'.$media_content['width'].'" height="'.$media_content['height'].'" /></p>';
    }
    
    // Nœud media:text
    if ($media == 'text') echo '<p>'.$valeur.'</p>';
    
    // Nœud media:credit
    if ($media == 'credit') echo '<p>Source&nbsp: '.$valeur.'</p>';
  }
}
?>
PHPFrance, on a un problème : le œ ne s'affiche pas correctement entre les balises
. :-k[/size]

Posté : 21 janv. 2008, 16:17
par Hubert Roksor
Pour récupérer un nœud préfixé, il faut récupérer son espace de nom
Pas la peine sous XPath, l'"espace de nom" existe déjà dans le contexte. Le code que j'ai posté plus haut est garanti comme fonctionnel.
le œ ne s'affiche pas correctement entre les balises
. :-k[/size][/quote]
Le forum est en iso-8859-1, et ce caractère n'existe pas en iso-8859-1, ce qui signifie que ton navigateur renvoit le NCR correspondant, en HTML. Manque de bol, les NCR ne sont automatiquement échappés dans les balises [code] ou [php], pour éviter d'interférer avec le code posté. C'est malheureusement un problème insoluble en l'état. [i][Edit: ah ben non tiens, ça le fait pas sur les [code]][/i]

Posté : 21 janv. 2008, 16:23
par Victor BRITO
Pour récupérer un nœud préfixé, il faut récupérer son espace de nom
Pas la peine sous XPath, l'"espace de nom" existe déjà dans le contexte. Le code que j'ai posté plus haut est garanti comme fonctionnel.
Sans doute. Mais, si l'on ne recourt pas à XPath et que l'on se contente de la simplicité de SimpleXML, ce que j'ai dit et illustré est indispensable.
Le forum est en iso-8859-1, et ce caractère n'existe pas en iso-8859-1, ce qui signifie que ton navigateur renvoit le NCR correspondant, en HTML.
<troll>Vive l'UTF-8 ! :langue: </troll>

Posté : 21 janv. 2008, 16:57
par Hubert Roksor
Ben euh, la simplicité de SimpleXML c'est justement d'exécuter du XPath très facilement (à comparer avec l'enfer de DOMXpath). Et on ne peut pas dire XPath en lui-même soit très compliqué, en tout cas moi ça me paraît moins compliqué que plusieurs foreach imbriqués. C'est aussi la seule façon raisonnable de récupérer un nœud d'après son nom, où qu'il soit dans l'arbre.

En clair, XPath est indissociable de XML, ne vous privez pas de l'utiliser.

Posté : 21 janv. 2008, 17:07
par Victor BRITO
Et on ne peut pas dire XPath en lui-même soit très compliqué
Je n'ai jamais voulu dire le contraire. ;)

Posté : 21 janv. 2008, 21:42
par momowell
Merci pour les réponses très interressantes
voici donc ce que j'ai fait
<?

$rss = simplexml_load_file('http://fr.news.yahoo.com/rss/fc/britney-spears.xml');

foreach ($rss->xpath('//media:content[@url != ""]') as $content) 
{ 
 $url .= "<item>\n";
 $url .="\t<url>".$content['url']."</url>\n";
 $url .="\t<hauteur>".$content['height']."</hauteur>\n";
 $url .= "</item>\n";
}
echo $url;
?>
et voici ce que j'obtient

Code : Tout sélectionner

<item> <url>http://d.yimg.com/eur.yimg.com/ng/ne/canalstars/20080121/16/2166104705-britney-spears-aurait-largue-son-paparazzi.jpg?x=144&y=104&sig=8wQSXO41AXb0.RRuftMxZg--</url> <hauteur>104</hauteur> </item> <item> <url>http://d.yimg.com/eur.yimg.com/ng/ne/dontmiss/20080121/13/2933794165-britney-spears-sa-necro-est-dej-prete-chez-ap.jpg?x=400&y=393&sig=QsyY6E_b5uu_I7_FJ3EOAA--</url> <hauteur>393</hauteur> </item> <item> <url>http://d.yimg.com/eur.yimg.com/ng/ne/newsdestars/20080121/10/838841120-britney-spears-un-mariage-en-vue.jpg?x=160&y=154&sig=QN0DON8yxn5kOmZQoInRvw--</url> <hauteur>154</hauteur> </item> <item> <url>http://d.yimg.com/eur.yimg.com/ng/ne/newsdestars/20080121/16/2047251272-britney-spears-est-morte-pour-l-039-associated-press.jpg?x=160&y=240&sig=9KYSLk4rtFq_AwHGzoJdLg--</url> <hauteur>240</hauteur> </item> <item> <url>http://d.yimg.com/eur.yimg.com/ng/ne/newsdestars/20080121/16/1761994275-viree-nocturne-pour-britney-spears.jpg?x=160&y=240&sig=NoSPAdeaXIJl51ckx4XE3w--</url> <hauteur>240</hauteur> </item> <item> <url>http://d.yimg.com/eur.yimg.com/ng/ne/newsdestars/20080119/14/2121633646-britney-spears-et-kevin-federline-rencontre-en-secret.jpg?x=160&y=240&sig=2r3t_35VQAMie3uDxvU3og--</url> <hauteur>240</hauteur> </item> <item> <url>http://d.yimg.com/eur.yimg.com/ng/ne/rtrs/20080119/08/2110013088-britney-spears-inquiete-ses-proches.jpg?x=328&y=400&sig=8Lcq77A47y2PZfrTx03VRw--</url> <hauteur>400</hauteur> </item> <item> <url>http://d.yimg.com/eur.yimg.com/ng/ne/newsdestars/20080119/10/3812232415-britney-spears-enceinte-pour-la-troisieme-fois.jpg?x=160&y=232&sig=.m4MHyw1sDpkw2PGqxslzA--</url> <hauteur>232</hauteur> </item>
maintenant j'aimerai recuperer les balises <title><pubDate><link><description>
je suppose qu'il faut passer aussi par du foreach mais je ne vois pas comment faire
pour avoir au final une struture comme celle-ci

Code : Tout sélectionner

<item> <url>http://d.yimg.com/eur.yimg.com/ng/ne/canalstars/20080121/16/2166104705-britney-spears-aurait-largue-son-paparazzi.jpg?x=144&y=104&sig=8wQSXO41AXb0.RRuftMxZg--</url> <hauteur>104</hauteur> <titre>bla bla</titre> <date>bla bla</date> </item>