2017年1月24日 星期二

[1073老機不死] 收看 TED 的 PHP 程式

.

(1073刷r12韌體適用)

雖然電腦、平板、chromecast...都能收看 TED。

但總覺得還是以坐在客廳拿著遙控器控制媒體播放機來收看最方便。

只是已經很久不能用媒體播放機收看TED節目了。

由於 PC/NB 都還可以看,所以PHP程式應該可以讓1073/1283 媒體播放機也能收看。

所以就嘗試看看了。

嘗試的步驟

1.
PC/NB 可以看
http://www.ted.com/talks?sort=newest&language=zh-tw
的TED繁體字幕節目。














2.

http://www.ted.com/talks?sort=newest&language=zh-tw
的網頁原始碼,可以找到每個節目的標題(title),
以及每個標題所對應的一個連結。

而真正需要的mp4檔案網址則放在該連結的網頁中。

3.
所以,整個運作機制是這樣的:
PHP程式到
http://www.ted.com/talks?sort=newest&language=zh-tw
抓取
十個標題

十個連結。

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

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

為了建立十個標題供選擇,它總共會開啟1+10個網頁來解析,所以會讓1073/1283產生
十幾秒的delay。之後的選取---收看就沒有這樣的delay。

4.
TED 應該已改用 https 格式,所以在1283/vod/pvr/101t上都無法播放。
刷了r12韌體的HD-A5則可以順利播放。 








































5.
PHP 程式如下:
(逢山挖洞,遇河搭橋。先求能用,沒管能不能最佳化)


<?php

$link = "http://www.ted.com/talks?sort=newest&language=zh-tw";

podcasting($link);


#從 link 抓 480p-zh-tw.mp4 的 function
function get003($url2){
    $url2='http://www.ted.com'.$url2;
    $text = file_get_contents($url2);
    preg_match('/zh-tw.mp4","high":"(.*)480p-zh-tw.mp4/', $text, $u001);
    $mp4url = $u001[0];
    $mp4url = str_replace("zh-tw.mp4\",\"high\":\"https","https",$mp4url);
    return $mp4url;                        
}

function podcasting($s2){

$text = file_get_contents($s2);


$p_string = '<rss><channel>';

#抓title, 抓 link, 從link抓mp4, 合成 podcast
preg_match_all('/lang=\'zh\-tw\'>\n(.*?)\n<\/a>/im', $text, $t001,PREG_PATTERN_ORDER);
preg_match_all('/href=\'(.*)\' language=\'zh-tw\'>/', $text, $m001,PREG_PATTERN_ORDER);

for ($index=0;$index < 5; $index++){
$p_string .= '<item><title>';
$p_string .= $t001[1][$index];

$p_string .= '</title><description></description>';
$mlink = get003($m001[1][$index]);
$p_string .= '<enclosure'."\n".'url="'.$mlink.'"/>';
$p_string .= '</item>';
}

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

}

?>






















沒有留言: