묻고답하기
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
[방송정보 얻어오기에서] 타이틀 부분 관련
2004.05.21 18:03
<?
class winamp_cast_information {
var $now_listen;
var $max_listen_persons;
var $cast_title;
var $cast_song;
var $cast_kbps;
var $cast_peak;
var $cast_a_l_time;
var $cast_genre;
var $cast_url;
var $cast_aim;
# var $cast_irc;
#--------------------------------------------------------------
# 단일서버 정보 얻어 오기 메소드
function winamp_cast($cast_ip){
$listen = $this->winamp_shoutcast_listen($cast_ip);
# 현재 청취자수 와 최대청취할수 있는 인원
$this->now_listen = $listen[0];
$this->max_listen_persons = $listen[1];
$cast_info = $this->winamp_shoutcast_info($cast_ip);
if($cast_info[title]){ $this->cast_title = $this->str_re("title",$cast_info[title]); }
if($cast_info[song]){ $this->cast_song = $this->str_re("song",$cast_info[song]); }
$this->cast_kbps = $cast_info[kbps];
$this->cast_peak = $cast_info[peak];
$this->cast_a_l_time = $cast_info[a_l_time];
$this->cast_genre = $cast_info[genre];
$this->cast_url = $cast_info[url];
$this->cast_aim = urldecode($cast_info[aim]);
# $this->cast_irc = $cast_info[irc];
}
#--------------------------------------------------------------
# 멀티방송 서버 정보 얻어 오기 메소드
function winamp_cast_array_list($array_cast_ip_list){
for($i=0;$i < sizeof($array_cast_ip_list);$i++){
$server_ip = $array_cast_ip_list[$i];
$listen = $this->winamp_shoutcast_listen($server_ip);
# 현재 청취자수 와 최대청취할수 있는 인원
$this->now_listen += $listen[0];
$this->max_listen_persons += $listen[1];
$cast_info = $this->winamp_shoutcast_info($server_ip);
if($cast_info[title]){ $this->cast_title = $this->str_re("title",$cast_info[title]);}
if($cast_info[song]){ $this->cast_song = $this->str_re("song",$cast_info[song]);}
$this->cast_kbps = $cast_info[kbps];
$this->cast_peak += $cast_info[peak];
$this->cast_a_l_time = $cast_info[a_l_time];
$this->cast_genre = $cast_info[genre];
$this->cast_url = $cast_info[url];
$this->cast_aim = $cast_info[aim];
#$this->cast_irc = $cast_info[irc];
}
}
#--------------------------------------------------------------
### 방송정보를 알아내는 메소드 시작 - 방송제목(title), 현재곡(song) ###
function winamp_shoutcast_info($server_ip){
$info = array();
$ip = $this->shoutcast_ip_filter($server_ip);
$address = $ip["address"];
$port = $ip["port"];
$data = $this->shoutcast_data_read($address,$port,"info","no");
#문단 1 시작
if(!$data){
$info[ok] = 0;
}else{
$info[ok] = 1;
$data = strip_tags ("$data");
if(eregi("(([1-9]){2,3}) kbps",$data,$arr)){ $info[kbps] = $arr[1]; }
# 최고 청취자수 얻기
$one = explode ("Listener Peak:", $data);
$two = explode ("Average Listen Time:",$one[1]);
$info["peak"] = $two[0];
$data = $two[1];
# --------------------
# 방송정보(평춘청취시간,방송타이틀,방송장르,URL,AIM,IRC채널) 얻기
$val = array("a_l_time","title","genre","url","aim","irc");
$explode_word = array("Stream Title:","Stream Genre:","Stream URL:","Stream AIM:","Stream IRC:","Current Song:");
for($i=0;$i < 6;$i++){
$one = explode ($explode_word[$i], $data);
$info[$val[$i]] = $one[0];
$data = $one[1];
}
# --------------------
# 현재곡명 얻기
$info["song"] = $data;
}
# 결과 리턴
return $info;
}
### 방송정보를 알아내는 메소드 끝 - 방송제목(title), 현재곡(song) ###
#--------------------------------------------------------------
# 청취자수 알아내는 메소드 시작
function winamp_shoutcast_listen($server_ip){
$listen = array();
$ip = $this->shoutcast_ip_filter($server_ip);
$address = $ip["address"];
$port = $ip["port"];
$data = $this->shoutcast_data_read($address,$port,"info","no");
if(!$data){
# 청취자수
$listen[0] = 0;
# 최대 청취자수
$listen[1] = 0;
}else{
$data = strip_tags ("$data");
if(eregi("with (([0-9]){1,}) of (([0-9]){1,}) listeners", $data,$arr)){
# 청취자수
$listen[0] = $arr[1];
# 최대 청취자수
$listen[1] = $arr[3];
}
#문단 2 끝
}
# 결과 리턴
return $listen;
# 청취자수 알아내는 메소드 끝
}
#--------------------------------------------------------------
function str_re($what,$value){
if($what == "title"){
$end = str_replace("Content Type: audio/mpeg","", $value);
}else if($what == "song"){
$end = str_replace("Written by Stephen 'Tag Loomis, Tom Pepper and Justin Frankel","", $value);
$end = str_replace("Copyright Nullsoft Inc. 1998-2002","", $end);
}
return $end;
}
#--------------------------------------------------------------
#### 주소 필터
function shoutcast_ip_filter($server_ip){
$server_ip = str_replace("http://", "", $server_ip);
$server_ip = str_replace("/", "", $server_ip);
# 방송주소을 (:)으로 주소(ip)와 포트(port)로 나눈다
$addre = explode(":","$server_ip");
$ip = array();
$ip["address"] = $addre[0];
$ip["port"] = $addre[1];
return $ip;
}
#--------------------------------------------------------------
function shoutcast_data_read($address,$port,$option,$pls_file_name){
if($option == "info") {
$fp = fsockopen("$address", $port, $errno, $errstr);
if($fp){
# 소켓을 이용해서 서버에 html 형태로 테이타를 보내라고 명령한다
fputs ($fp, "GET /index.html HTTP/1.0nUser-Agent: Mozilla/4.0nn");
# 소켓의 마지막(eof) 까지 데이타를 읽는다(1024바이트씩)
while(!feof($fp)){
$data .= fgets($fp,1024);
}
# 소켓을 닫는다
fclose($fp);
}else{
return 0;
}
}else if($option == "history") {
$fp = fsockopen("$address","$port", $errno, $errstr);
# 문단1-1 시작
if($fp){
fputs ($fp, "GET /played.html HTTP/1.0nUser-Agent: Mozilla/4.0nn");
while(!feof($fp)){
$data .= fgets($fp,1024);
}
# 소켓을 닫는다
fclose($fp);
}else{
return 0;
}
}else if($option == "pls_file") {
$fp = fsockopen("$address","$port", $errno, $errstr);
if($fp){
$out = "GET /${pls_file_name} HTTP/1.1rn";
$out .= "Host: $addressrn";
$out .= "Connection: Closernrn";
fputs($fp, $out);
while(!feof($fp)){
$data .= fgets($fp,1024);
}
# 소켓을 닫는다
fclose($fp);
}else{
return 0;
}
}
return $data;
}
#--------------------------------------------------------------
########## 방송 히스토리 정보 얻어오기 메소드 시작
function winamp_shoutcast_history($server_ip){
$ip = $this->shoutcast_ip_filter($server_ip);
$address = $ip["address"];
$port = $ip["port"];
$data = $this->shoutcast_data_read($address,$port,"history","no");
if(!$data){
echo "방송히스토리를 가져올수 없습니다";
}else{
$data = strip_tags ("$data",'<td>');
$haha = explode ("<td>", $data);
for($i=0;$i <= sizeof($haha);$i++){
#$haha 배열변수의 $i번째에 속한것이 시간이면 배열변수 $time에 넣는다
if(eregi("(([0-9]){2}):(([0-9]){2}):(([0-9]){2})", $haha[$i])){
$time[] = strip_tags ($haha[$i]);
}else{
$tmp[] = $haha[$i];
}
}
for($i=0;$i <= sizeof($tmp)-1;$i++){
# $tmp배열에 $i 번째에 속한 내용이 타이틀을 경우 배열변수 $history_title에 넣는다
if(!$this->history_title_ck($tmp[$i])){ $history_title[] = strip_tags ($tmp[$i]); }
}
}
# 이차원 배열로 시간과 타이틀을 묶어버린다
$history = array("time" => $time, "title" => $history_title);
return $history;
}
########## 방송 히스토리 정보 얻어오기 메소드 끝
# 방송히스토리 타이틀인가 아닌가를 구분
function history_title_ck($title){
if(eregi("HTTP/1.0 200 OK",$title) or eregi("Server Version",$title) or eregi("Played @",$title)
or eregi("Song Title",$title) or eregi("Current Song",$title) or eregi("Written by Stephen 'Tag Loomis",$title)){ $v = 1; }else{ $v = 0; }
return $v;
}
#----------------------------
function winamp_cast_inlive_type($address,$pls_file_name){
$data = $this->shoutcast_data_read($address,80,"pls_file",$pls_file_name);
$data_array = spliti( "file[0-9]{1,2}", $data);
for($i=0;$i <= sizeof($data_array);$i++){
if(eregi("http://(([a-zA-Z0-9]){1,}).(([a-zA-Z0-9]){1,}).(([a-zA-Z0-9]){1,}).(([a-zA-Z0-9]){1,}):(([0-9]){1,})", $data_array[$i],$aa)){
if($tmp != $data_array[$i]){ $ip[] = $aa[0]; }
$tmp = $data_array[$i];
}
}
if(sizeof($ip) > 1){
$this->winamp_cast_array_list($ip);
}else{
$this->winamp_cast($ip[0]);
}
}
function info_reset(){
$this->now_listen = "";
$this->max_listen_persons = "";
$this->cast_title = "";
$this->cast_song = "";
$this->cast_kbps = "";
$this->cast_peak = "";
$this->cast_a_l_time = "";
$this->cast_genre = "";
$this->cast_url = "";
$this->cast_aim = "";
$this->cast_irc = "";
}
#------------------------
}
?>
이게 php란의 소스에 올라와 이는 방송보기 소스 인데.
여기서
타이틀 방송제목 부분이죠..
$this->cast_genre = ""; 이 함수를..
방송중이 아닐때는 방송중이지 않습니다.로
방송중일때는 cast_genre 로 나타나게 하는방법이 있을거 같은데 무언지 모르겠습니다.
2틀을 찾아 해매다 못해... 질문을 던집니다...
조언 부탁 드려요.
class winamp_cast_information {
var $now_listen;
var $max_listen_persons;
var $cast_title;
var $cast_song;
var $cast_kbps;
var $cast_peak;
var $cast_a_l_time;
var $cast_genre;
var $cast_url;
var $cast_aim;
# var $cast_irc;
#--------------------------------------------------------------
# 단일서버 정보 얻어 오기 메소드
function winamp_cast($cast_ip){
$listen = $this->winamp_shoutcast_listen($cast_ip);
# 현재 청취자수 와 최대청취할수 있는 인원
$this->now_listen = $listen[0];
$this->max_listen_persons = $listen[1];
$cast_info = $this->winamp_shoutcast_info($cast_ip);
if($cast_info[title]){ $this->cast_title = $this->str_re("title",$cast_info[title]); }
if($cast_info[song]){ $this->cast_song = $this->str_re("song",$cast_info[song]); }
$this->cast_kbps = $cast_info[kbps];
$this->cast_peak = $cast_info[peak];
$this->cast_a_l_time = $cast_info[a_l_time];
$this->cast_genre = $cast_info[genre];
$this->cast_url = $cast_info[url];
$this->cast_aim = urldecode($cast_info[aim]);
# $this->cast_irc = $cast_info[irc];
}
#--------------------------------------------------------------
# 멀티방송 서버 정보 얻어 오기 메소드
function winamp_cast_array_list($array_cast_ip_list){
for($i=0;$i < sizeof($array_cast_ip_list);$i++){
$server_ip = $array_cast_ip_list[$i];
$listen = $this->winamp_shoutcast_listen($server_ip);
# 현재 청취자수 와 최대청취할수 있는 인원
$this->now_listen += $listen[0];
$this->max_listen_persons += $listen[1];
$cast_info = $this->winamp_shoutcast_info($server_ip);
if($cast_info[title]){ $this->cast_title = $this->str_re("title",$cast_info[title]);}
if($cast_info[song]){ $this->cast_song = $this->str_re("song",$cast_info[song]);}
$this->cast_kbps = $cast_info[kbps];
$this->cast_peak += $cast_info[peak];
$this->cast_a_l_time = $cast_info[a_l_time];
$this->cast_genre = $cast_info[genre];
$this->cast_url = $cast_info[url];
$this->cast_aim = $cast_info[aim];
#$this->cast_irc = $cast_info[irc];
}
}
#--------------------------------------------------------------
### 방송정보를 알아내는 메소드 시작 - 방송제목(title), 현재곡(song) ###
function winamp_shoutcast_info($server_ip){
$info = array();
$ip = $this->shoutcast_ip_filter($server_ip);
$address = $ip["address"];
$port = $ip["port"];
$data = $this->shoutcast_data_read($address,$port,"info","no");
#문단 1 시작
if(!$data){
$info[ok] = 0;
}else{
$info[ok] = 1;
$data = strip_tags ("$data");
if(eregi("(([1-9]){2,3}) kbps",$data,$arr)){ $info[kbps] = $arr[1]; }
# 최고 청취자수 얻기
$one = explode ("Listener Peak:", $data);
$two = explode ("Average Listen Time:",$one[1]);
$info["peak"] = $two[0];
$data = $two[1];
# --------------------
# 방송정보(평춘청취시간,방송타이틀,방송장르,URL,AIM,IRC채널) 얻기
$val = array("a_l_time","title","genre","url","aim","irc");
$explode_word = array("Stream Title:","Stream Genre:","Stream URL:","Stream AIM:","Stream IRC:","Current Song:");
for($i=0;$i < 6;$i++){
$one = explode ($explode_word[$i], $data);
$info[$val[$i]] = $one[0];
$data = $one[1];
}
# --------------------
# 현재곡명 얻기
$info["song"] = $data;
}
# 결과 리턴
return $info;
}
### 방송정보를 알아내는 메소드 끝 - 방송제목(title), 현재곡(song) ###
#--------------------------------------------------------------
# 청취자수 알아내는 메소드 시작
function winamp_shoutcast_listen($server_ip){
$listen = array();
$ip = $this->shoutcast_ip_filter($server_ip);
$address = $ip["address"];
$port = $ip["port"];
$data = $this->shoutcast_data_read($address,$port,"info","no");
if(!$data){
# 청취자수
$listen[0] = 0;
# 최대 청취자수
$listen[1] = 0;
}else{
$data = strip_tags ("$data");
if(eregi("with (([0-9]){1,}) of (([0-9]){1,}) listeners", $data,$arr)){
# 청취자수
$listen[0] = $arr[1];
# 최대 청취자수
$listen[1] = $arr[3];
}
#문단 2 끝
}
# 결과 리턴
return $listen;
# 청취자수 알아내는 메소드 끝
}
#--------------------------------------------------------------
function str_re($what,$value){
if($what == "title"){
$end = str_replace("Content Type: audio/mpeg","", $value);
}else if($what == "song"){
$end = str_replace("Written by Stephen 'Tag Loomis, Tom Pepper and Justin Frankel","", $value);
$end = str_replace("Copyright Nullsoft Inc. 1998-2002","", $end);
}
return $end;
}
#--------------------------------------------------------------
#### 주소 필터
function shoutcast_ip_filter($server_ip){
$server_ip = str_replace("http://", "", $server_ip);
$server_ip = str_replace("/", "", $server_ip);
# 방송주소을 (:)으로 주소(ip)와 포트(port)로 나눈다
$addre = explode(":","$server_ip");
$ip = array();
$ip["address"] = $addre[0];
$ip["port"] = $addre[1];
return $ip;
}
#--------------------------------------------------------------
function shoutcast_data_read($address,$port,$option,$pls_file_name){
if($option == "info") {
$fp = fsockopen("$address", $port, $errno, $errstr);
if($fp){
# 소켓을 이용해서 서버에 html 형태로 테이타를 보내라고 명령한다
fputs ($fp, "GET /index.html HTTP/1.0nUser-Agent: Mozilla/4.0nn");
# 소켓의 마지막(eof) 까지 데이타를 읽는다(1024바이트씩)
while(!feof($fp)){
$data .= fgets($fp,1024);
}
# 소켓을 닫는다
fclose($fp);
}else{
return 0;
}
}else if($option == "history") {
$fp = fsockopen("$address","$port", $errno, $errstr);
# 문단1-1 시작
if($fp){
fputs ($fp, "GET /played.html HTTP/1.0nUser-Agent: Mozilla/4.0nn");
while(!feof($fp)){
$data .= fgets($fp,1024);
}
# 소켓을 닫는다
fclose($fp);
}else{
return 0;
}
}else if($option == "pls_file") {
$fp = fsockopen("$address","$port", $errno, $errstr);
if($fp){
$out = "GET /${pls_file_name} HTTP/1.1rn";
$out .= "Host: $addressrn";
$out .= "Connection: Closernrn";
fputs($fp, $out);
while(!feof($fp)){
$data .= fgets($fp,1024);
}
# 소켓을 닫는다
fclose($fp);
}else{
return 0;
}
}
return $data;
}
#--------------------------------------------------------------
########## 방송 히스토리 정보 얻어오기 메소드 시작
function winamp_shoutcast_history($server_ip){
$ip = $this->shoutcast_ip_filter($server_ip);
$address = $ip["address"];
$port = $ip["port"];
$data = $this->shoutcast_data_read($address,$port,"history","no");
if(!$data){
echo "방송히스토리를 가져올수 없습니다";
}else{
$data = strip_tags ("$data",'<td>');
$haha = explode ("<td>", $data);
for($i=0;$i <= sizeof($haha);$i++){
#$haha 배열변수의 $i번째에 속한것이 시간이면 배열변수 $time에 넣는다
if(eregi("(([0-9]){2}):(([0-9]){2}):(([0-9]){2})", $haha[$i])){
$time[] = strip_tags ($haha[$i]);
}else{
$tmp[] = $haha[$i];
}
}
for($i=0;$i <= sizeof($tmp)-1;$i++){
# $tmp배열에 $i 번째에 속한 내용이 타이틀을 경우 배열변수 $history_title에 넣는다
if(!$this->history_title_ck($tmp[$i])){ $history_title[] = strip_tags ($tmp[$i]); }
}
}
# 이차원 배열로 시간과 타이틀을 묶어버린다
$history = array("time" => $time, "title" => $history_title);
return $history;
}
########## 방송 히스토리 정보 얻어오기 메소드 끝
# 방송히스토리 타이틀인가 아닌가를 구분
function history_title_ck($title){
if(eregi("HTTP/1.0 200 OK",$title) or eregi("Server Version",$title) or eregi("Played @",$title)
or eregi("Song Title",$title) or eregi("Current Song",$title) or eregi("Written by Stephen 'Tag Loomis",$title)){ $v = 1; }else{ $v = 0; }
return $v;
}
#----------------------------
function winamp_cast_inlive_type($address,$pls_file_name){
$data = $this->shoutcast_data_read($address,80,"pls_file",$pls_file_name);
$data_array = spliti( "file[0-9]{1,2}", $data);
for($i=0;$i <= sizeof($data_array);$i++){
if(eregi("http://(([a-zA-Z0-9]){1,}).(([a-zA-Z0-9]){1,}).(([a-zA-Z0-9]){1,}).(([a-zA-Z0-9]){1,}):(([0-9]){1,})", $data_array[$i],$aa)){
if($tmp != $data_array[$i]){ $ip[] = $aa[0]; }
$tmp = $data_array[$i];
}
}
if(sizeof($ip) > 1){
$this->winamp_cast_array_list($ip);
}else{
$this->winamp_cast($ip[0]);
}
}
function info_reset(){
$this->now_listen = "";
$this->max_listen_persons = "";
$this->cast_title = "";
$this->cast_song = "";
$this->cast_kbps = "";
$this->cast_peak = "";
$this->cast_a_l_time = "";
$this->cast_genre = "";
$this->cast_url = "";
$this->cast_aim = "";
$this->cast_irc = "";
}
#------------------------
}
?>
이게 php란의 소스에 올라와 이는 방송보기 소스 인데.
여기서
타이틀 방송제목 부분이죠..
$this->cast_genre = ""; 이 함수를..
방송중이 아닐때는 방송중이지 않습니다.로
방송중일때는 cast_genre 로 나타나게 하는방법이 있을거 같은데 무언지 모르겠습니다.
2틀을 찾아 해매다 못해... 질문을 던집니다...
조언 부탁 드려요.