将SHOUTcast曲目信息分为“歌曲标题”和“艺术家姓名”

时间:2018-07-17 20:24:30

标签: jquery ajax shoutcast internet-radio

我正在使用此'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秒钟以艺术家姓名-曲目标题的格式返回名称。

是否有一种方法可以适应当前配置,以便在字符串分割后实现相同的效果?

4 个答案:

答案 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]);

这是流中的一个特殊问题,在艺术家或标题中可能使用了连字符,这会破坏试图查找分隔符的正则表达式。