【问题标题】:Splitting SHOUTcast track info into "Song title" and "Artist name"将 SHOUTcast 曲目信息拆分为“歌曲名称”和“艺术家姓名”
【发布时间】:2018-12-25 15:27:54
【问题描述】:

我正在使用这个'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();

上面的代码将每 5 秒返回 艺术家姓名 - 曲目标题格式的名称。

有没有办法调整当前配置以实现与字符串拆分相同的效果?

【问题讨论】:

    标签: jquery ajax shoutcast internet-radio


    【解决方案1】:

    不幸的是,SHOUTcast 风格的元数据包含一个字段。如您所见,要获取艺术家和曲目,标准格式是在艺术家和曲目之间使用连字符。

    const artist = meta.substr(0, meta.indexOf(' - '));
    const title = meta.substr(meta.indexOf(' - ') + 3);
    

    这将拆分到第一个 -,给你一个艺术家和标题(理论上),假设艺术家名称中没有 -。它将允许标题中的连字符,因为我们只拆分到第一个。

    请注意,如果这不是所使用的格式,则会中断。您可能想先测试字符串,看看是否有连字符。 DJ 节目通常不使用这种格式。

    【讨论】:

    • 我无法弄清楚如何使用默认配置来实现这两行。它们应该在同一个函数中工作还是在单独的函数中工作?对不起,但我的知识非常基础。谢谢!
    【解决方案2】:

    你可以获取字符串“艺术家-歌曲”并进行拆分:

    var fullTitle = this.get('songtitle','Off Air').split(" - ");
    

    然后分别获取每一项:

    var artist = fullTitle[0];
    var title = fullTitle[1];
    

    并写在不同的html标签中:

    $('#title').text(title);
    $('#artist').text(artist);
    

    【讨论】:

      【解决方案3】:

      另一个似乎尚未涵盖的可能答案是重写艺术家/曲目分隔符,使用正则表达式在艺术家 - 曲目组合中找到它,然后在存储后将其恢复为原始状态$matches 来自正则表达式。这就是我们使用 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]);
      

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

      【讨论】:

        【解决方案4】:

        我想我会添加更多关于从 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]));
        

        我们使用它从我们的流中获取艺术家/标题信息,以便对其进行尝试和测试。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-03-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-04-22
          • 1970-01-01
          • 2011-05-22
          相关资源
          最近更新 更多