【问题标题】:How to return recently played song from Shoutcast server using PHP如何使用 PHP 从 Shoutcast 服务器返回最近播放的歌曲
【发布时间】:2017-07-20 06:31:44
【问题描述】:

我正在尝试使用 PHP 和 JQuery 从 Shoutcast 服务器获取歌曲历史记录。我对一个 php 文件执行了 ajax 调用,该文件包含从流服务器获取最近播放的歌曲的代码。Jquery 写在我的应用程序文件夹中

jquery:

$.ajax({
        type: "GET",
        url: "http://example.com/recent_songs.php",
        headers: {'Access-Control-Allow-Origin': '*'},
        success: function(response){
            console.log(response);
            return false;
        },
        error: function(error){
            console.log(error);
            console.log("Network Error!");
        }
    });

PHP 文件与 Jquery 文件位于不同的服务器上。

PHP (recent_songs.php):

$handle = '';
$handle = get_data();

function get_data() {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_USERAGENT,  'Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0' );
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 4);
        curl_setopt($ch, CURLOPT_TIMEOUT, 8);

        $data_string = "";
        function write_function($handle, $data) {
            global $data_string;
            $data_string .= $data;
            if (strlen($data_string) > 200) {
              return 0;
            }
            else {
              return strlen($data);
             }
         }
        curl_setopt($ch, CURLOPT_URL, 'ip:port/played.html');
        $data = curl_exec($ch);         
        $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);          
        if ($code!='200'){
            return 'error';
        }else{
            return 'success';           
}

它总是返回 http 代码 0 和来自直播服务器的空响应。但是,当我在浏览器中运行此网址时:ip:port/played.html 它会在那里显示完整的歌曲历史记录。有什么想法可以从广播服务器获得响应。

我们将不胜感激任何形式的帮助。谢谢!

【问题讨论】:

  • 大概ip:port 只是占位符,而您实际上使用的是IP 地址和端口号?
  • 是的,我实际上是在使用 ip 地址和端口号进行广播。

标签: php jquery shoutcast


【解决方案1】:
/* Frisky Radio */
$ip='50.7.64.226';
$port=8000;

function get_data( $ip=false, $port=false ) {
    try{
        if( $ip && $port ){
            $ch = curl_init();

            curl_setopt($ch, CURLOPT_URL, "{$ip}:{$port}/played.html" );
            curl_setopt($ch, CURLOPT_USERAGENT,  'Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0' );
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 4);
            curl_setopt($ch, CURLOPT_TIMEOUT, 8);

            $data=(object)array(
                'response'  =>  curl_exec($ch),
                'info'      =>  (object)curl_getinfo($ch)
            );

            return $data;
        }

        throw new Exception('Ip address and port number are required');
    }catch( Exception $e ){
        echo $e->getMessage();
    }
}


$data=get_data( $ip, $port );
if( $data->info->http_code==200 ){
    echo '<pre>',print_r( $data->response,true ),'</pre>';
}

上面的输出(稍作编辑)是:

02:09:28    FRISKY | RPO Records Session - March 2017 - Oscar Vasquez   Current Song
01:09:29    FRISKY | Rogue - July 2017 - Amber Long
00:09:32    FRISKY | Feelin FRISKY - June 2017 - Strachan
22:06:31    FRISKY | Voyager - July 2017 - Deepsense
20:02:07    FRISKY | Fatalist - July 2017 - Digital Department
18:00:47    FRISKY | 6th Auditorium - July 2017 - Andrea Cassino
17:02:07    FRISKY | Perspectives - July 2017 - Paul Kardos
16:02:11    FRISKY | Perspectives - July 2017 - Darin Epsilon
15:06:33    FRISKY | Hazendonk FM - July 2017 - Paul Hazendonk
14:03:26    FRISKY | Southside - July 2017 - Graziano Raffa

或者,对于响应数据,您可以使用DOMDocumentDOMXPath 来获取显示数据的表格并在页面内某处使用。 因此,响应:

/* Not all shoutcast servers have a list of played songs */
$table='No results';

$dom=new DOMDocument();
$dom->loadHTML( $data->response );

$xp=new DOMXPath( $dom );
$col=$xp->query('//table[2]');


if( !empty( $col ) ){
    $doc=new DOMDocument();
    $doc->appendChild( $doc->importNode( $col->item( 0 ),true ) );
    $table=$doc->saveHTML();
}

$dom = $doc = $xp = $col = null;

echo $table;

【讨论】:

  • 我已经尝试过您提供的代码。但是在这两种情况下(我的和你的) curl_exec() 在我的服务器上都返回 false 并且它返回 http_code 0 即使所有选项都相同。你有什么想法吗?
  • 您想访问什么 IP/端口?是在互联网上还是在本地服务器上?
  • 我正在使用实时 IP 和端口连接到直播。是的,它在互联网上
  • 可以添加直播服务器 ip/port 还是敏感的?
  • 感谢@RamRaider,这是我的服务器关于配置的问题。我把它放在其他服务器上,它在那里工作。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-21
  • 1970-01-01
  • 1970-01-01
  • 2017-03-26
  • 2012-05-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多