2011-11-30 5 views
0

Je crée un "widget" de podcast pour un client/ami qui héberge un spectacle scientifique.Obtenir le premier élément XML dans le flux

Ce code tire le titre et podcast mp3 à partir d'un flux XML en jplayer http://www.freeenergymedia.com/shared/PLAYER/player/player.php

reset($titles[1]) 

tire l'élément dernier dans l'alimentation tout

end($out[1]) 

tire le plus récent

Je dois les faire correspondre et les deux affichent les plus récents

$c = file_get_contents('http://rss.sonibyte.com/rssfeed/56.xml'); 
preg_match_all('/enclosure url="(.*)" length/', $c, $out, PREG_PATTERN_ORDER); 
preg_match_all("|<[title]+>StarTalk:(.*)</[title]+>|U", $c, $titles, PREG_PATTERN_ORDER); 
if(sizeof($out[1]) >= 3 && sizeof($titles[1]) >= 3) { 
    echo '['; 
    $e = end($out[1]); $b = reset($titles[1]); echo '{ title:"StarTalk:' . $b . '", mp3:"'.$e.'" },'; 
    $e = prev($out[1]); $b = next($titles[1]); echo '{ title:"StarTalk:' . $b . '", mp3:"'.$e.'" },'; 
    $e = prev($out[1]); $b = next($titles[1]); echo '{ title:"StarTalk:' . $b . '", mp3:"'.$e.'" }'; 
    echo ']'; 
} 

le php est inséré dans le plugin JPlayer ici, pour afficher l'URL mp3 et le titre

$(document).ready(function(){ 

    new jPlayerPlaylist({ 
     jPlayer: "#jquery_jplayer_1", 
     cssSelectorAncestor: "#jp_container_1" 
    }, <?php include('getxmlforplayer.php') ?>, { 
     swfPath: "js", 
     supplied: "mp3, oga", 
     wmode: "window" 
    }); 
}); 
+2

[Ne pas analyser XML avec des expressions régulières] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml -self-contained-tags/1732454 # 1732454)! –

+2

D'accord, essayez SimpleXML, c'est 2011 :). Nous avons des outils plus faciles maintenant ami. – Darren

+0

Merci, je vais vérifier, il semblait bien fonctionner pour le titre. –

Répondre

4

jamais Parse XML avec des expressions régulières.

Utilisez plutôt SimpleXML ou DOMDocument. Ci-dessous réimplémente tout votre code avec SimpleXML.

$url = 'http://rss.sonibyte.com/rssfeed/56.xml'; 
$rss = simplexml_load_file($url); 

$items = $rss->channel->item; 

// first item is this: 
$items[0]; 
// first title: 
$items[0]->title; 
// first url: 
$items[0]->enclosure['url']; 

$data = array(); 
foreach ($items as $item) { 
    $data[] = array(
     'title' => (string) $item->title, 
     'mp3' => (string) $item->enclosure['url'], 
    ); 
} 

$jsdata = json_encode($data); 

Votre javascript:

$(document).ready(function(){ 
    var playerdata = <?php echo htmlspecialchars($jsdata, ENT_NOQUOTES, 'utf-8');?>; 

    new jPlayerPlaylist({ 
     jPlayer: "#jquery_jplayer_1", 
     cssSelectorAncestor: "#jp_container_1" 
    }, playerdata, { 
     swfPath: "js", 
     supplied: "mp3, oga", 
     wmode: "window" 
    }); 
}); 
+0

+1 pour pointer vers JSON, c'est la bonne chose à utiliser. – Tomalak

4

"obtenir le premier élément XML dans un flux" serait comme ceci:

$rss = simplexml_load_string('http://rss.sonibyte.com/rssfeed/56.xml'); 

$item = $rss->channel->item[0]; 

print_r($item); 

Découvrez comment fonctionne SimpleXML in the docs. C'est en fait assez facile. Ne pas jamais analyser XML avec des expressions régulières.

Obtenir le lien serait aussi simple que

$url = (string)$item->link 
Questions connexes