Comment extraire les tags XML itunes?

Comment extraire les tags XML itunes? - PHP - Programmation

Marsh Posté le 22-07-2007 à 21:47:33    

Bonjour à tous!
 
J'essaye depuis un bout de temps de transformer mon lecteur rss en php pour qu'il puisse donner un lien vers un vidéo grâce à un flux xml compatible itunes.
 
Voici le code initial :

Code :
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
  2. <?php
  3. /////////////////////////////////////////////////////////////////////////////////
  4. // PHPRSSReader.php - d'aprs HTML Reader par  Jorge Solis
  5. // traduit et simplifi par Pierre Rouarch pour tenir en un fichier
  6. ////////////////////////////////////////////////////////////////////////////////
  7. class xml {
  8. var $parser;
  9. function parse($xmlstring){
  10.   $this->parser = xml_parser_create();
  11.   xml_set_object($this->parser, $this);
  12.   xml_parser_set_option($this->parser, XML_OPTION_CASE_FOLDING, false);
  13.   xml_set_element_handler($this->parser, "tag_open", "tag_close" );
  14.   xml_set_character_data_handler($this->parser, "cdata" );
  15.   // Initialisation
  16.         $this->node_stack = array();
  17.         $this->tag_open(null, "root", array());
  18.         xml_parse($this->parser, $xmlstring);
  19.         xml_parser_free($this->parser);
  20.         $rnode = array_pop($this->node_stack);
  21.         return($rnode);
  22. }
  23. function tag_open($parser, $tag, $attributes){
  24.         // creation d'un nouveau node...
  25.         $node = array();
  26.         $node["_NAME"]      = $tag;
  27.         foreach ($attributes as $key => $value) {
  28.             $node[$key] = $value;
  29.         }
  30.         $node["_DATA"]      = "";
  31.         $node["_ELEMENTS"]  = array();
  32.         // ajouter le nouveau node  la fin de la pile de node
  33.         array_push($this->node_stack, $node); 
  34. }
  35. function cdata($parser, $cdata){
  36.   // ajouter les donnes au dernier node de la pile
  37.         $lastnode = count($this->node_stack);
  38.         $this->node_stack[$lastnode-1]["_DATA"] .= $cdata;
  39. }
  40. function tag_close($parser, $tag){
  41.   // suppression de la pile
  42.         $node = array_pop($this->node_stack);
  43.         $node["_DATA"] = trim($node["_DATA"]);
  44.         // and ajout comme lment  la fin de la pile...
  45.         $lastnode = count($this->node_stack);
  46.         array_push($this->node_stack[$lastnode-1]["_ELEMENTS"], $node);
  47. }
  48. } // end of class xml
  49. // recupration de l' adresse du RSS avec le paramtre rssurl
  50. $rssurl = $HTTP_GET_VARS["rssurl"];
  51. //////////////////////////////////////////////////////////////////////////////////////////////////
  52. //Modifiez ici pour mettre l'adresse URL de votre RSS au cas ou aucun argument n'est pass:
  53. // exemple :
  54. // http://www.votresite.com/votrefichierrss' target='_blank' rel='nofollow'>http://www.votresite.com/...
  55. /////////////////////////////////////////////////////////////////////////////////////////////
  56. if (!$rssurl ) $rssurl = "http://www.fakesite.com/rss/rss.xml";
  57. // rcupration du fichier par paquets de 4096
  58.   $fp = fopen($rssurl, "r" );
  59.   while (!feof ($fp)) $data .= fgets($fp, 4096);
  60.   fclose ($fp);
  61.   $initPos = strpos($data, "<channel>" ); // Saut de l'entte
  62. //parse les donnes
  63. $xml_parser = new xml();
  64. $data = substr($data, $initPos);
  65. $root_node = $xml_parser->parse($data);
  66. $channel    = array_shift($root_node["_ELEMENTS"]);
  67. //Rcupration  de certaines donnes du RSS (Voir les specifications rss 0.91, 0.92 et  2.0)
  68. ////// Rcupration entte de channel  /////////////////////////////////////////////////////////
  69. foreach ($channel["_ELEMENTS"] as $item){
  70. // suppression des antislashs
  71. if($item[_NAME]=="title" ) $base_name=stripslashes($item[_DATA]);
  72. if($item[_NAME]=="link" ) $base_url=stripslashes($item[_DATA]);
  73. if($item[_NAME]=="description" ) $base_desc=stripslashes($item[_DATA]);
  74. }
  75.   $base = "<b>Web: </b><a href=\"$base_url\" target=\"_new\">$base_name</a><br>$base_desc<br>";
  76. /////////////////////////////////////////////////////////////////////////
  77. ////////// Rcupration de chaque Item  --> titre, adresse url, date de publication, description //////////////////////////////////////////////////////
  78. foreach ($channel["_ELEMENTS"] as $item){
  79. if($item[_NAME]=="item" ) {
  80.   // suppression des antislashs   
  81.   foreach ($item["_ELEMENTS"] as $tag){
  82.     if($tag["_NAME"]=="title" ) $news_title=stripslashes($tag[_DATA]);
  83.     if($tag["_NAME"]=="link" ) $news_url=stripslashes($tag[_DATA]);
  84.     if($tag["_NAME"]=="pubDate" ) $news_pubDate=stripslashes($tag[_DATA]);
  85.     if($tag["_NAME"]=="description" ) $news_desc=stripslashes($tag[_DATA]);
  86. if($tag["_NAME"]=="itunes:duration" ) $news_duration=stripslashes($tag[_DATA]);
  87.   }
  88.   $news .= "<p>$news_pubDate<br><b>$news_title</b><br>$news_desc<br>$news_duration[0]<br><a href=\"$news_url\" target=\"_new\">$news_url</a><hr></p>"; 
  89. }
  90. }
  91. ////////////////////////////////////////////////////////////////////////////////
  92. ?>
  93. <html>
  94. <head>
  95. <title>Sample RSS Reader in PHP</title>
  96. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  97. </head>
  98. <body>
  99. <?php print($news) ?>
  100. <?php print($base) ?>
  101. </body>
  102. </html>


 
 
1- J'ai réussi à ajouter la durée en ajoutant dans le code :

Code :
  1. if($tag["_NAME"]=="itunes:duration" ) $news_duration=stripslashes($tag[_DATA]);


 
 
2- Mais comment puis-je extraire l'adresse de ma vidéo qui se présente de cette façon dans mon fichier xml :

Code :
  1. <enclosure url="http://www.cible.com/lavideo-ipod.mp4" length="29689117" type="video/mp4" />


 
 
3- La vidéo en question existe aussi en plusieurs formats et-il possible d'ajouté un lien vers les différents formats disponibles en modifiant le lien initial de cette façon :
 
www.cible.com/lavideo-ipod.mp4 en www.cible.com/lavideo-windows.wmv
 
 
Un GRAND merci à vous!

Reply

Marsh Posté le 22-07-2007 à 21:47:33   

Reply

Marsh Posté le 23-07-2007 à 11:02:54    

J'ai pas tout regardé en détail mais tu te fais chier pour pas grand chose la non ?
 
utilise Magpierss. Pour recuperer la date, le titre et une résumé je fais ça :
 

Code :
  1. <?php
  2. /*script pour recuperer les news du blog et les afficher*/
  3. require_once ('./lib/magpierss/rss_fetch.inc');
  4. define('MAGPIE_OUTPUT_ENCODING', 'ISO-8859-1');
  5. define('MAGPIE_INPUT_ENCODING', 'UTF-8');
  6. define('MAGPIE_DETECT_ENCODING', false);
  7. $url = 'http://feeds.feedburner.com/leflux';
  8. $rss = fetch_rss($url);
  9. $i=0;
  10. foreach ($rss->items as $item)
  11. {
  12.         //résumé de 150 charactères environs
  13. $sum = $item['summary'];
  14. if (strlen($sum) > 150)
  15. {
  16.     $sum = substr($sum, 0, 150);
  17.     $last_space = strrpos($sum, " " );
  18.     $sum = substr($sum, 0, $last_space)."...";
  19. }
  20.         //date
  21. $date = date("d-m-Y", $item['date_timestamp']);
  22.         //titre
  23. $title = $item['title'];
  24.         //url
  25. $url = $item['link'];
  26. echo "Le <b>$date</b> - <a href=$url>$title</a> - <i>$sum</i></li><br> ";
  27. $i++;
  28. if($i==4) break;
  29. }
  30. ?>


 
t'aura juste a recuperer ton champs $item['lenomdetonchamps'].
 
A mon avis c'est beaucoup éfficace que ta méthode, bcp plus court aussi :)


---------------
Comme dirait quelqu'un de beaucoup plus avisé que moi, quelquefois c'est toi qui cognes le bar mais d'autres fois, et ben, c'est le bar qui te cogne.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed