2011-11-30 41 views
0

我正在爲主持科學展示的客戶端/朋友創建播客「窗口小部件」。獲取訂閱源中的第一個XML元素

此代碼從XML提要拉標題和MP3播客到jplayer http://www.freeenergymedia.com/shared/PLAYER/player/player.php

reset($titles[1]) 

是拉動非常最後一個元素的飼料 在同時

end($out[1]) 

是拉動最近我需要它們來匹配並顯示最近的

$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 ']'; 
} 

php的插入JPlayer插件這裏,顯示的MP3 URL和標題

$(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

[不解析使用正則表達式XML(http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml -self包含的標籤/ 1732454#1732454)! –

+2

同意,嘗試SimpleXML,這是2011年:)。我們現在有更輕鬆的工具朋友。 – Darren

+0

謝謝,我會檢查出來的,但它似乎適用於標題。 –

回答

4

決不解析XML與正則表達式。

改爲使用SimpleXMLDOMDocument。下面用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); 

您的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指向JSON,這是正確的使用。 – Tomalak

4

「獲得第一個XML元素的飼料」會是這樣的:

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

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

print_r($item); 

查看SimpleXML的工作原理in the docs。其實很簡單。 有史以來用正則表達式解析XML。

獲取鏈接會這麼簡單

$url = (string)$item->link