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;

}

?>






















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";
就可以收視「每日視頻新聞」。




.

2017年1月16日 星期一

1073/1283 收看中央社的全球視野

.

中央社全球視野的網址是
http://cnavideo.cna.com.tw/

1.
可以先用瀏覽器看它的網頁原始碼。

2.
然後再從網頁原始碼中找尋標題、大綱、mp4連結。

3.
最後把它們轉換成 podcast 格式,丟給 1073/1283 解讀就大功告成。


這樣三個步驟,我們就可以透過 1073/1283 媒體播放機來收看中央社的全球視野:












































本 PHP 程式只抓當天一天的節目資訊。如要抓更多天,應該也是可以,只是程式會變複雜。



<?php

$link = "http://cnavideo.cna.com.tw/";

podcasting($link);

function podcasting($link)
{
$text = file_get_contents($link);

#抓標題
preg_match('/"2.*?集/is', $text, $t001);
$text3 .= $t001[0];
$text3 = str_replace("\"","",$text3);

#抓綱要說明
preg_match('/。.*?。/is', $text, $d001);
$text4 .= $d001[0];
$text4 = str_replace("。","",$text4);
$text4 = preg_replace('/\b(https?):\/\/[-A-Z0-9+&@#\/%?=~_|$!:,.;]*[A-Z0-9+&@#\/%=~_|$]/i', '', $text4);

#抓mp4連接
preg_match('/\<source.*?mp4"/is', $text, $u001);
$text5 .= $u001[0];
$text5 = str_replace("source src","enclosure url",$text5);
$text5 .= '/>';

#組成podcast格式
$p_string = '<rss><channel>';
$p_string .= '<item><title>';
$p_string .= $text3;
$p_string .= '</title><description>';
$p_string .= $text4;
$p_string .= '</description>';
$p_string .= $text5;
$p_string .= '</item>';
$p_string .= '</channel></rss>';
echo $p_string;

}
?>




如何使用的細節,與收看大愛電視一樣:

http://electronmania.blogspot.tw/2016/06/10731283.html


.

補充:

中央社全球視野也有在華視播出(華視與地球對話),而從 2017.02.03開始,華視
新聞資訊台改以HD播出,因此在華視新聞資訊台上看中央社的全球視野,內容
比較多,畫質也比較好。













2017年1月11日 星期三

有的掛鐘為什麼指定用鹼性電池

.

以前就有一篇有關鹼性電池用法的舊文:

我對「熱水器、時鐘、遙控器…不能用鹼性電池」的看法



今天,我麼要看的是,為什麼有的掛鐘會指定用鹼性電池?






























這個掛鐘的電池槽印著「USE ALKALINE BATTERIES」(使用鹼性電池)。

為什麼這個掛鐘要指定使用鹼性電池呢?

道理很簡單,因為它比較耗電。

它為什麼比較耗電?因為它是掃秒式掛鐘。(秒針連續性轉動)

用三用電表量測它的電流,在0.5x~0.6x~0.7x ma之間連續導電。

如果量測跳秒式掛鐘(秒針一秒跳一次),它的電流是 0.5x---0 (或極低讀數)---0.6x---
0 (或極低讀數)--- 0.5x ma...間歇性導電。

數據說明:掃秒式掛鐘 比 跳秒式掛鐘 耗電。


如果掃秒式掛鐘使用一般碳鋅電池,說不定不到半年就沒電了。但使用鹼性電池,或許可以
使用一年以上。


只是這個掛鐘的外包裝盒仍然「不能免俗的」印上這麼一段:









這當然是錯的。


為什麼「熱水器、時鐘、遙控器…不能用鹼性電池」的傳言會傳的那麼開?

我想說不定是從有人以碳鋅電池外殼裝鹼性材料的偷工技法來生產鹼性電池開始的。

鹼性電池的容量高於碳鋅電池,所以在低耗電裝置上可以用很久,久到鹼性材料有足夠的
時間腐蝕外殼造成流湯。

很多品質不良的鹼性電池,就算都不用,只是放在抽屜裡,過一段時間,也是電池外殼被
腐蝕,導致流湯。

很多人都有此慘痛教訓,又聽人傳言「熱水器、時鐘、遙控器…不能用鹼性電池」,於是
就信以為真,然後自己也加入傳言的陣容。這樣,一傳十、十傳百,就這樣整個傳開了。


其實,買外殼品質夠好的鹼性電池就不會有這些煩惱。

在大賣場有看過外殼品質夠好的自我品牌鹼性電池。應可一試。




補充
(關於文末提到的大賣場自我品牌鹼性電池)

大賣場有很多自我品牌的商品,其中也包括鹼性電池。

出於好奇,我買回來後還沒開始用,就先撕掉它的外皮,
發現它的負極部分從筒身到底部是一體成形,是一個看起
來帶有不銹鋼氣質的金屬容器。

雖然無法確認它的實際材質,但是一付看起來不容易被蝕穿的氣質
,就讓人頓生不少信心。

我是很放心的把它們裝入遙控器中,但也才開始用沒多久,要看最終實驗報告
,可能要二、三年後吧?



2017-07-22 補充

原來我對大賣廠看似有氣質鹼性電池的看法是「自我感覺良好」。

裝在遙控器裡面的兩顆4號鹼性電池有一顆已經流湯(外殼沒有被腐蝕,湯從正極與外殼負極
的縫隙間流出):




幸好,遙控器的電池槽並沒有受損。


而裝在掛鐘上的3號鹼性電池則正常,但電壓只剩下 0.98V, 看來它是撐不了一年了。




2017-08-12 再補充

掛鐘在今天停擺。秒針不動了。3號鹼性電池電壓只剩下 0.690V,沒有流湯。

所以:
大賣場的自我品牌3號鹼性電池在這個大賣場掃秒式掛鐘上只跑了7個月。

不曉得是鹼性電池不夠力還是掛鐘太耗電?
























2017年1月2日 星期一

[Linux 小筆記] 用 sed 插入含 & 的多行字串

.

目的:

想在 .xinitrc 檔案中的
. /etc/rc.d/PUPSTATE 這一行後面,
插入多行文字---

export GTK_IM_MODULE=gcin
export QT_IM_MODULE=gcin
export LC_CTYPE=zh_TW.UTF-8
export XMODIFIERS="@im=gcin"
gcin &
gtk-query-immodules-2.0 --update-cache
gtk-query-immodules-3.0 --update-cache


方法:

可以執行這個 .sh:

sed -i -e 's/PUPSTATE/PUPSTATE\
# GCIN begin\
export GTK_IM_MODULE=gcin\
export QT_IM_MODULE=gcin\
export LC_CTYPE=zh_TW.UTF-8\
export XMODIFIERS="@im=gcin"\
gcin\ \&\
gtk-query-immodules-2.0 --update-cache\
gtk-query-immodules-3.0 --update-cache\
# GCIN end/' ~/.xinitrc


(sed 指令 's/---/---/ '  檔案)




.