2017年1月22日 星期日

[1073/1283老機不死] 收看美國之音的 PHP 程式

.

美國之音本來有提供 podcast(播客)格式的節目,所以 1073/1283 系列的媒體播放機
可以輕鬆收看。

但後來,播客節目的相關連結都變成了空白。

有寫e-mal去問,但沒有回音。他們網頁上的「播客」項目也沒有移除。

所以,我不知道他們那邊「究竟發生了什麼事」?當然更不知道「他們以後會有什麼
方向」?


還好,用 PC/NB 仍然可看。


既然 PC/NB 還可以看,那就嘗試寫一段PHP程式,或許也能讓 1073/1283 媒體播放機
可以收看?


所以就練習寫看看了。


嘗試的步驟

1.
http://www.voachinese.com/
可以看到「播客」項目。

點選「播客」項目進入網頁後,裏面的「視頻播客」都是空白的。

2.
從 PC/NB 進入
http://www.voachinese.com/rss.html?tab=Podcast
點選「VOA衛視」、「每日視頻新聞」、「時事大家談」...等等,都可以收看。

3.
我們就以「VOA衛視」為例,來看PHP程式可不可以從
http://www.voachinese.com/z/1774.html
擷取 podcast 格式所需要的基本訊息。

4.
美國之音的節目每日都會更新。


http://www.voachinese.com/z/1774.html
網頁的原始碼,可以看到所有新聞的標題(title),以及每個標題所對應
的一個.html連結。

而真正相對應、可播放的 mp4 檔案網址是在該 .html 連結中。

5.
所以,整個運作機制是這樣的:

PHP程式到
http://www.voachinese.com/z/1774.html
抓取
十個標題

十個.html連結。

各.html連結各開啟一個網頁,從裡面再抓取真正的mp4網址。

最後將十個標題及十個mp4網址合併成 podcast 格式。

也就是:
假定要建立十個標題供選擇,它總共會開啟11個網頁來分別進行解析,對1073/1283就
會產生大約十幾秒的 delay。之後的「選取---收看」動作不會有這樣的 delay。

6.
每個.html連結網頁內都有3個或4個mp4網址。3個或4個的內容都一樣,只是解析度不同:

.mp4
_mobile.mp4
_hq.mp4
_fullhd.mp4(不一定有)

我們當然要抓_hq.mp4或_fullhd.mp4(不一定有)。

_hq.mp4 的畫質比以前收看播客的時候來得好,這應該是自己寫 PHP 程式的額外收穫吧。











































7.
PHP 程式如下:

(逢山挖洞,遇河搭橋。先求能用,沒管能不能最佳化)

(只能依原始碼寫解析程式,原始碼一有變動,就會導致錯位或功能喪失。這是一種無奈)


<?php

$link = "http://www.voachinese.com/z/1774.html";

podcasting($link);


#從.html抓_hq.mp4 的 function
function get003($url2){
    $url2='http://www.voachinese.com'.$url2.'html';
    $text = file_get_contents($url2);
    preg_match('/https(.*)mp4/', $text, $u001);
    $mp4url = $u001[0];
    $mp4url = str_replace("https","http",$mp4url);
    $mp4url = str_replace(".mp4","_hq.mp4",$mp4url);
    return $mp4url;                        
}

function podcasting($s2){

$text = file_get_contents($s2);
$p_string = '<rss><channel>';

#抓title, 抓.html, 從.html抓mp4, 合成 podcast
preg_match_all('/class="img-wrapper" title="(.*)">/', $text, $t001,PREG_PATTERN_ORDER);
preg_match_all('/<a href="(.*)html"./', $text, $m001,PREG_PATTERN_ORDER);

for ($index=2;$index < 12; $index++){
$p_string .= '<item><title>';
$p_string .= $t001[1][$index];
$p_string .= '</title><description></description>';
$mindex = $index;
#$mindex += 4;
$mindex += 2;
$mlink = get003($m001[1][$mindex]);
$p_string .= '<enclosure'."\n".'url="'.$mlink.'"/>';
$p_string .= '</item>';
}

$p_string .= '</channel></rss>';
echo $p_string;

}

?>


8.

$link = "http://www.voachinese.com/z/1774.html";
改成
$link = "http://www.voachinese.com/z/1927.html";
就可以收視「每日視頻新聞」。




.

沒有留言: