Home » Posts tagged "atom"

Hacker News 的三種 feed

Hacker News 上有不少人會貼東西上去,算是個不錯的新聞或是消息來源,但這麼多資料要怎麼挑著看,這邊介紹三種不同更新頻率的 feed 可以訂閱。

第一種是每個禮拜一篇的「n-gate.com. we can't both be right.」,不過這個站的字型故意使用 Comic Sans,會需要拿個 Stylus 改一下,我是改成 sans-serif,就順眼多了...

第二種是每天一篇的「Daily Hacker News」。

第三種是官方的 feed,會一直更新,頻率最高:「Links for the intellectually curious, ranked by readers.」。

我是三個都訂起來,至少討論得很熱的會出現好幾次...

第一次拿 Headless Chrome (Chromium) 出來玩...

前陣子發現 PChome 24h 的輕小說 Atom feed 掛掉了 (在 gslin/pchome24h-feed 這邊),看了一下頁面發現換 url 了,而且從 BIG5 變成 UTF-8 (賀!!!),但變成大量的 js call 產生資料產生頁面 (還不是 ajax 的 JSON),而且有一堆奇怪的 magic number 在裡面 (感覺會因為改版就產生變化 XD),就懶得再自己組出來了,決定玩看看 Headless Chrome 練個功...

Chrome 從 2017 年七月的 59 版就推出了 Headless 功能 (stable channel 的時間),也因此在去年四月的時候 PhantomJS 就決定停止維護下去:「Google Chrome 的 Headless 模式與 PhantomJS 的歷史」。

官方的文件「Getting Started with Headless Chrome」寫的很完整,而且也可以看到 Headless Chrome 把常見的功能都先實做完了。在不另外裝軟體的情況下就可以做很多事情。像是直接把生成好的 DOM 轉成 HTML 丟出來:

chrome --headless --disable-gpu --dump-dom https://www.chromestatus.com/

或是把頁面輸出成 PDF,或是輸出成圖片 (screenshot.png):

chrome --headless --disable-gpu --print-to-pdf https://www.chromestatus.com/
chrome --headless --disable-gpu --screenshot https://www.chromestatus.com/

也可以直接開 js console 出來互動:

$ chrome --headless --disable-gpu --repl --crash-dumps-dir=./tmp https://www.chromestatus.com/
[0608/112805.245285:INFO:headless_shell.cc(278)] Type a Javascript expression to evaluate or "quit" to exit.
>>> location.href
{"result":{"type":"string","value":"https://www.chromestatus.com/features"}}
>>> quit
$

在文件後面也提供了大量範例,教你怎麼用 Selenium + WebDriver + ChromeDriver 操作,順著用裡面的範例找一下 Python 會怎麼寫就寫好了... 之後也機會來測試 Firefox 好了 :o

銀行 (信用卡) 的最新優惠消息...

已經好幾次遇到「根本不知道有哪些優惠」的情況了,去找 feed 沒幾家有做,只好自己做一個來生 Atom feed:「Useful Feeds」。

網站的程式碼放在 GitHub 上,要改的人可以開 ticket 或是直接 fork + pull-request,目前還有很多地方需要修正 (像是 Atom feed validator 問題)。

出了信用卡的以外,之後如果有遇到需要加的功能會再加上去...

請支援 PubSubHubbub...

PubSubHubbub 對於內容提供者 (包括 Blog Platform 或是 Micro Blogging Platform) 已經是很簡單的協定了,不僅可以增加更新速度,還可以降低伺服器 loading,不過國內幾個平台還是沒人支援啊...

首先是標準規格書:「PubSubHubbub Core 0.3 -- Working Draft」,不過這文件對於要支援 PubSubHubbub 的 content provider 不是很重要,只要把裡面的觀念看懂就好。

PubSubHubbub 中有三種不同身份,可以用不同的伺服器跑。一個是內容提供者 (Publisher),一個是訂閱者 (Subscriber),另外一個是 Hub。內容提供者在這邊的例子就是 (Micro/) Blog Platform,而訂閱者可以是 Google Reader,Hub 則是中繼角色,目前有 Google 提供的服務可以用,也有 open source 軟體可以自己架。

第一步,內容提供者在先在 feed 中加入一個或多個 hub 位置,像是這樣:

<link rel="hub" href="http://pubsubhubbub.appspot.com" />
<link rel="hub" href="http://superfeedr.com/hubbub" />

第二步,當該 feed 有更新時送出 ping 給 hub,這部份假設用 PerlNet-PubSubHubbub-Publisher 做的話則是:

my $pub = Net::PubSubHubbub::Publisher->new(hub => 'http://pubsubhubbub.appspot.com');
$pub->publish_update('http://admin.pixnet.net/blog/feed');

就是這樣子而已!

Archives