可以收聽hinet廣播的widget

Mac 軟體使用經驗交流專區

版主: Alex Tsaiross_ttdigdog

回覆文章
內容
發表人
aqueous0201
基本會員
文章: 35
註冊時間: 09/10/2005 11:27 am

可以收聽hinet廣播的widget

#1 文章 aqueous0201 »

在mac上,自始以來都沒有一個好用的廣播收聽程式,即使現在有開發出get_mms這軟體,但也只限於擷取mms後來啟動media player播放
對於到達真正的好用實在還有一段距離。

因此,網路上開始有人提出使用widget的方式來聽廣播,我看了之後,也決定是看看,在我經過多番嘗試後,的確真的可以使用widget來收聽台灣的廣播電台。
但是,問題出在hinet那邊:

現行的網路廣播都集中在hinet上面(http://radio.hinet.net/radio/index.html),但是hinet廣播用的播放程式卻不支援mac,所已變成打開了網頁連結要聽卻無法聽。
因此,後來有其他人想到另一個方法:擷取播放頁面中的mms原始碼後,丟給media player去播放,所以應此產生了get_mms這個應用程式。

而現在問題出在於,hinet中的播放頁面中的mms原始碼會隨著時間更新,也就是說,也許今天我早上抓到了mms://xxxxxx,下午卻可能變成mms://yyyyyyy
因此,我想請教大家,不知道是否有方法用javascript來擷取hinet播放頁面的mms原始碼呢?
這樣一來,widget在啟動後,可以先去hinet的廣播頁面抓取mms再來播放,就不會有變動mms的困擾。

我舉個例子:
例如,我要聽亞洲廣播電台,因此我先連到hinet(http://radio.hinet.net/radio/index.html)
然後,點下亞洲廣播電台的收聽按鈕
點下後會開出這個播放頁面:http://radio.hinet.net/radio/player/pla ... dio_id=295

然後,我檢視這頁面的原始碼,會看到一行:

Player.URL = "http://grm.cdn.hinet.net/media/radio/pl ... 01393FEDFB";

此行中的mms://live.media.hinet.net/Radio_asiafm923?RADIOWEBF17EB2C3-888C-4603-85F8-2A01393FEDFB就是可以給media player播放的正確mms連結。

但也是這個該死的連結會變動,所以必須在每次收聽時要去檢查,不然連結改了就會聽不到。

因此我想請教各位高手是否有辦法利用javascript去擷取頁面中的mms串流,然後交給一個變數,我再使用此變數來丟給media player來收聽呢?

(以上都是在widget中要完成)


所以,不知道大家是否可以給我些指示呢?

感謝^^


by the way,我已經做好了可以收聽中廣流行、新聞、音樂網的widget了

請享用:http://homepage.mac.com/dreamcatcher020 ... o.wdgt.zip

不過載使用同時也請大家給我幫助,我會盡快做出好用的廣播收聽widget!
頭像
詹姆士
討論區管理員
文章: 2894
註冊時間: 04/22/2005 7:51 pm
來自: 台北
聯繫:

#2 文章 詹姆士 »

可以的,要用 xmlhttprequest 讓這個網頁的原始碼傳回,拆解內部,就可以達到您的需求。
那您就要設定一個 function 定期去抓原始碼,對應前後提供的網址是否有所變化,再替換,雖然會有個斷缺的時間(緩衝處理),不過應該是可以接受的。
aqueous0201
基本會員
文章: 35
註冊時間: 09/10/2005 11:27 am

#3 文章 aqueous0201 »

我後來參考了yahoo字典的widget寫法,不過還是弄不太出來,我po一下原始碼,能否請您過目一下,看看我是哪兒出了問題呢?

<HEAD>
<TITLE>
Retrieving data from an XML document
</TITLE>

<SCRIPT LANGUAGE="JavaScript">
function hinetmms{
var rhead = /Player.URL = "http://grm.cdn.hinet.net/media/radio/play.asp?mmsurl=.*/;
var endMatch = '";';
var output ='';
var req = new XMLHttpRequest();
MyURL = 'http://radio.hinet.net/radio/player/player.jsp?radio_id=206';
req.open("GET", MyURL , false);
req.send();
restHtml=req.responseText;

startPos = restHtml.search(rhead);

if(startPos != -1) {
itemBlock = restHtml.substring(startPos);
endPos = itemBlock.indexOf(endMatch);
output = itemBlock.substring(0, endPos);
if(output != '')
output = output;

}
else output = "<p>??§£(R)?°I</p>";
document.getElementById('content').innerHTML = output;




}
</SCRIPT>


我不知道上面寫法是哪裡錯了(我想一定錯很多@@)
而且,接下來取得的output結果會是一組mms串流,而那組串流我要怎麼才能交給下面的變數呢?
我發現接下來的html原始碼中,沒辦法讀到output的結果耶?是要用到繼承嗎?是不是因為不同層級所以下面的html原始碼讀不到上面的javascript抓來的mms串流?


好難喔@@,就只差這部份了><.....


(對了,這是一個html檔案)
回覆文章