将 SHOUTcast 曲目信息拆分为 "Song title" 和 "Artist name"
Splitting SHOUTcast track info into "Song title" and "Artist name"
我正在使用这个 'Now playing' jQuery plugin 并且想知道是否有办法 拆分从 SHOUTcast 获取的曲目信息 (艺术家姓名 - 曲目标题) 分别分成两个不同的字符串:'Artist name' 和 'Track title'。
这是插件的基本配置:
$.SHOUTcast({
host : '91.109.241.252',
port : 8170,
interval : 5000,
stats : function(){
$('#songtitle').text(this.get('songtitle','Temporarily Off Air'));
}
}).startStats();
上面的代码将 return,每 5 秒,格式为 艺术家姓名 - 曲目标题.
有没有一种方法可以调整当前配置以实现与拆分字符串相同的效果?
遗憾的是,SHOUTcast 样式元数据包含一个字段。如您所见,要获取艺术家和曲目,标准格式是在艺术家和曲目之间使用连字符。
const artist = meta.substr(0, meta.indexOf(' - '));
const title = meta.substr(meta.indexOf(' - ') + 3);
这将拆分到第一个 -
,给你一个艺术家和标题(理论上),假设艺术家姓名中没有 -
。它将允许在标题中使用连字符,因为我们只拆分到第一个。
请注意,如果这不是正在使用的格式,这将会中断。您可能想先测试字符串以查看是否有任何连字符。 DJ 节目不使用这种格式很常见。
可以得到字符串"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);
另一个可能的答案,似乎没有被覆盖是重写 artist/track 分隔符,使用正则表达式在艺术家 - 曲目组合中找到它,然后把它放回它的存储来自正则表达式的 $ 匹配项后的原始值。这就是我们如何处理我们的艺术作品 API,我们用它来查找 artist/title 组合的图像,我们发现这是在 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]);
这是流媒体的一个特殊问题,其中艺术家或标题中可能使用了连字符,这会破坏试图找到分隔符的正则表达式。
我想我会添加更多关于从 Shoutcast 流中获取 artist/title 数据的方法的信息,因为提出原始问题的用户似乎仍然不确定。
$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]));
我们使用它从我们的流中获取 artist/title 信息,因此它已经过试验和测试。
我正在使用这个 'Now playing' jQuery plugin 并且想知道是否有办法 拆分从 SHOUTcast 获取的曲目信息 (艺术家姓名 - 曲目标题) 分别分成两个不同的字符串:'Artist name' 和 'Track title'。
这是插件的基本配置:
$.SHOUTcast({
host : '91.109.241.252',
port : 8170,
interval : 5000,
stats : function(){
$('#songtitle').text(this.get('songtitle','Temporarily Off Air'));
}
}).startStats();
上面的代码将 return,每 5 秒,格式为 艺术家姓名 - 曲目标题.
有没有一种方法可以调整当前配置以实现与拆分字符串相同的效果?
遗憾的是,SHOUTcast 样式元数据包含一个字段。如您所见,要获取艺术家和曲目,标准格式是在艺术家和曲目之间使用连字符。
const artist = meta.substr(0, meta.indexOf(' - '));
const title = meta.substr(meta.indexOf(' - ') + 3);
这将拆分到第一个 -
,给你一个艺术家和标题(理论上),假设艺术家姓名中没有 -
。它将允许在标题中使用连字符,因为我们只拆分到第一个。
请注意,如果这不是正在使用的格式,这将会中断。您可能想先测试字符串以查看是否有任何连字符。 DJ 节目不使用这种格式很常见。
可以得到字符串"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);
另一个可能的答案,似乎没有被覆盖是重写 artist/track 分隔符,使用正则表达式在艺术家 - 曲目组合中找到它,然后把它放回它的存储来自正则表达式的 $ 匹配项后的原始值。这就是我们如何处理我们的艺术作品 API,我们用它来查找 artist/title 组合的图像,我们发现这是在 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]);
这是流媒体的一个特殊问题,其中艺术家或标题中可能使用了连字符,这会破坏试图找到分隔符的正则表达式。
我想我会添加更多关于从 Shoutcast 流中获取 artist/title 数据的方法的信息,因为提出原始问题的用户似乎仍然不确定。 $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]));
我们使用它从我们的流中获取 artist/title 信息,因此它已经过试验和测试。