我正在使用此'Now playing' jQuery plugin,想知道是否有一种方法可以从SHOUTcast获取的拆分曲目信息 (艺术家姓名-曲目标题)不同的字符串:“艺术家姓名”和“曲目标题”。
这是插件的基本配置:
$.SHOUTcast({
host : '91.109.241.252',
port : 8170,
interval : 5000,
stats : function(){
$('#songtitle').text(this.get('songtitle','Temporarily Off Air'));
}
}).startStats();
上面的代码将每5秒钟以艺术家姓名-曲目标题的格式返回名称。
是否有一种方法可以适应当前配置,以便在字符串分割后实现相同的效果?
答案 0 :(得分:1)
不幸的是,SHOUTcast样式元数据包含一个字段。为了获得演出者和曲目,您已经注意到,标准格式是在演出者和曲目之间带有连字符。
const artist = meta.substr(0, meta.indexOf(' - '));
const title = meta.substr(meta.indexOf(' - ') + 3);
这将一直进行到第一个-
,并假设您的艺术家姓名中没有-
,从而为您提供艺术家和标题(理论上)。它将在标题中使用连字符,因为我们只拆分第一个。
请注意,如果这不是正在使用的格式,则它将中断。您可能需要先测试字符串,以查看是否有连字符。 DJ节目不使用这种格式很常见。
答案 1 :(得分:1)
您可以获取字符串“ artist-song”并进行分割:
var fullTitle = this.get('songtitle','Off Air').split(" - ");
然后分别获取每个项目:
var artist = fullTitle[0];
var title = fullTitle[1];
并用不同的html标签编写它:
$('#title').text(title);
$('#artist').text(artist);
答案 2 :(得分:1)
我想我会添加更多关于从 Shoutcast 流中获取艺术家/标题数据的方法的更多信息,因为提出原始问题的用户似乎仍然不确定。 $songArray 数组包含来自流的所有可用信息,但在这种情况下,我们只对艺术家和标题感兴趣。
$splitSongRegex = "/\ \-\ /";
$streamUrl = "http://".$server.":".$port."/stats?sid=1"; // Convert stream
// Convert stream XML data to lowercase Json array
$xml = simplexml_load_string(strtolower($streamData), "SimpleXMLElement", LIBXML_NOCDATA);
$json = json_encode($xml);
$streamDataArray = json_decode($json, TRUE);
$song = ucwords(trim($streamDataArray['songtitle']));
$songArray = preg_split($splitSongRegex, $song, -1, PREG_SPLIT_DELIM_CAPTURE);
$artist = ucwords(trim($songArray[0]));
$track = ucwords(trim($songArray[1]));
我们使用它从我们的流中获取艺术家/标题信息,以便对其进行尝试和测试。
答案 3 :(得分:0)
似乎尚未涵盖的另一个可能的答案是,重写艺术家/曲目分隔符,使用正则表达式在艺术家中找到它-曲目组合,然后在存储完后将其放回原始$与正则表达式匹配。这就是我们通过Artwork API进行的操作,我们使用它来查找艺术家/标题组合的图像,并且我们发现这是用PHP进行编码的最可靠方法。
preg_match('/^(.*)%space%hyphen%space(.*)$/mi', $artist.'%space%hyphen%space'.$track, $matches, PREG_OFFSET_CAPTURE);
$matches[0][0] = str_replace('%space%hyphen%space', ' - ', $matches[0][0]);
这是流中的一个特殊问题,在艺术家或标题中可能使用了连字符,这会破坏试图查找分隔符的正则表达式。