看到 Eric Meyer 弄了 BCD Watch 觀察 MDN 上面的 Browser Compatibility Data 變化:「Announcing BCD Watch」。
看起來是每個禮拜更新一次,而網站有提供 RSS feed 可以訂閱,所以不用自己一直跑去翻。
這種網站果然是掛在 GitHub Pages 上面 (+ GitHub Actions),專案則是在 https://github.com/bkardell/bcd-watch 這邊可以看到。
幹壞事是進步最大的原動力
看到 Eric Meyer 弄了 BCD Watch 觀察 MDN 上面的 Browser Compatibility Data 變化:「Announcing BCD Watch」。
看起來是每個禮拜更新一次,而網站有提供 RSS feed 可以訂閱,所以不用自己一直跑去翻。
這種網站果然是掛在 GitHub Pages 上面 (+ GitHub Actions),專案則是在 https://github.com/bkardell/bcd-watch 這邊可以看到。
在「Bluesky has launched RSS feeds (openrss.org)」這邊看到 Bluesky 支援 RSS 2.0 的消息:「Bluesky has launched RSS feeds」。
以作者提到的例子來說,Jay Graber 的頁面上 (在「@jay.bsky.team on Bluesky」這邊) 有 auto-discovery link:
<link rel="alternate" type="application/rss+xml" href="https://bsky.app/profile/did:plc:oky5czdrnfjpqslsw2a5iclo/rss">
選擇 RSS 2.0 而不是 Atom,不知道是什麼原因...
有了 feed 以後現有的 RSS reader 都可以直接訂起來了,像是在 Slack 上可以用 /feed add [url]
訂閱。
在 Hacker News 上看到「Generate RSS feed for any website using CSS selectors (rss-bridge.org)」這個,裡面的連結是 CssSelectorBridge,看起來是剛併進去的:「Add CustomBridge #3457」。
我拿蘋果日報為例子,網址設為 https://tw.nextapple.com/
,文章的選擇器設為 .stories-container article
,文章的內容設為 .post-inner p
,產生出來的頁面連結裡面就包括了 Atom 以及其他種類的 feed。
對於沒有 feed 的網站可以用這可以工具省下不少功夫,之前寫的 feedgen 裡面有不少東西可以退役 (不過當初是打算練 Python,有額外的目的...)
Twitter 把我本來 read-only 的兩個應用程式停用掉了,加上這陣子的新聞,就改用其他方式來處理。
用的是先前在「用 RSS-Bridge 接服務」提到的 RSS-Bridge,可以將 Twitter 的資料轉成 JSON Feed。
其中 RSS-Bridge 是 PHP 寫的,剛好就拿先前在「在 Fly.io 上面跑 PHP」這邊提到的方法丟上 Fly.io,不需要自己架主機跑了。
然後把 twitter2facebook 與 twitter2plurk 這兩個專案裡面本來抓 Twitter API 的程式碼改成抓 JSON Feed。
先這樣子弄,之後再看看要不要搬...
看到「News Minimalist – Only significant news (newsminimalist.com)」這個,把新聞網站所有的文章都丟進 ChatGPT 裡面評分,然後過濾出最高分的產生 newsletter:「News Minimalist」。
It uses AI (ChatGPT-4) to read the top 1000 news every day and rank them by significance on a scale from 0 to 10 based on event magnitude, scale, potential, and source credibility.
然後有 feed 可以讀,所以除了用 RSS reader 讀以外,也可以用 /feed add https://rss.beehiiv.com/feeds/4aF2pGVAEN.xml
的方式掛進 Slack 裡面。
查資料的時候發現 RSS-Bridge 這個用 PHP 寫的專案,直接找個 PHP hosting 架起來就可以用了,沒有什麼其他的需求。
簡單架起來測了一輪,看起來不賴啊,如果一般人要用的話可以考慮就用這個專案就好,量很少的人可以用官方列出來的 Public instances 玩一下,量多的人可以自己架,PHP hosting 還蠻好找的,官方要求要 7.4+,注意一下 PHP hosting 提供的版本應該不會有太多問題。
自己寫的 feedgen 比較偏順便練 Python,不過當時的確是還不知道有這樣的專案,看了一下 GitHub 上的 tag 記錄,2013 就有的專案...
看到「Autosummarized HN」這個工具,算是一個組合技的應用:
All summaries have been generated automatically by GPT-3. No responsibility is claimed for their contents nor its accuracy.
透過 GPT-3 解讀並產生出摘要,目前頁面上是沒有 RSS feed,但可以透過一些工具直接拉出來 (像是 PolitePol),然後就可以掛到 Slack 或是 RSS reader 裡面...
RSS Please 是一套簡單設定 (但應該是對 programmer 簡單),可以把網頁內容轉成 RSS/Atom feed 的軟體。
我把官網上範例的註解拿掉,可以看到你需要去讀 HTML 頁面的結構,然後找出對應的 css selector:
output = "/tmp" [[feed]] title = "My Great RSS Feed" filename = "wezm.rss" [feed.config] url = "https://www.wezm.net/" item = "article" heading = "h3 a" summary = ".post-body" date = "time"
跟我在 feedgen 上用 Python 做的事情其實差不多,他用了彈性換方便性:rsspls 可以簡單設定一些值就生出一個 feed,而我這邊的 feedgen 需要寫一段 code (雖然不長);但因為 feedgen 是用 Python 處理事情,所以可以不只可以讀 HTML 也可以讀 JSON API,另外也可以設計一些轉換邏輯 (像是 summary 的部份)。
但有人寫起來推廣總是不錯...
在 Lobsters Daily 上看到在介紹 RSS 2.0 的文章:「Implementing RSS for my blog (yes, this one!)」。
大多數我們都會選擇用 library 來輸出 RSS feed 或是 Atom feed,但這並不代表自己己幹 template 會很難,只要處理好 XML 的輸出就可以了。
作者分成兩塊介紹,第一塊是這個 RSS feed 是什麼,第二塊是這個 RSS feed 裡面有什麼。
第一塊的部份是描述 channel 本身的資訊,另外可以看到 {{{items}}}
這段,這是等下要放第二段的部份:
<rss version="2.0"> <channel"> <title">title}}</title"> <link">{{link}}</link"> <description">{{description}}</description"> <language">en-US</language"> <pubDate">pubDate}}</pubDate"> {{{items}}} </channel"> </rss">
接下來就是解釋 items
的部份,裡面可以有很多 item
資料:
<item> <title>{{metadata.title}}</title> <link>{{getFullUrl slug}}</link> <description>{{metadata.summary}}</description> <author>mail@nsood.in</author> <pubDate>{{rssDatetime metadata.time}}</pubDate> </item>
你可以靜態寫到檔案裡面,也可以動態產生這個內容,這樣基本上已經會動了。當然,要記得該有的 XML escaping 要放進去。
另外我之前有提到「實做 RSS/Atom feed 的最佳實踐」,也可以參考看看,這算是多做的部份,可以讓 feed crawler 更新速度變得比較即時。
前陣子看到的文章,在講實做 RSS/Atom feed 的 best practice:「RSS Feed Best Practises」。
最簡單的當然還是丟個 Atom feed 就好,接下來就是一些延伸出來可以多做的事情。
首先有提到 discovery,可以讓 crawler 在抓到 HTML 頁面的時候知道 feed 在哪裡,這對於 user experience 來說蠻重要的,大多數的 feed reader 都可以透過這個方式抓到真正的 feed 位置。舉個例子來說,我丟 https://blog.gslin.org/
進 feed reader,可以透過 discovery 的方式告訴 feed reader 我的 feed 位置在 https://blog.gslin.org/feed/
:
<link rel="alternate" type="application/rss+xml" title="Gea-Suan Lin's BLOG » Feed" href="https://blog.gslin.org/feed/" />
另外是常見的 cache 問題,這個設起來不算太難,主要是細節很多 XD
後面提到的 WebSub,以前叫做 PubSubHubbub,是一個在 feed 更新後主動通知讓 crawler 來抓的機制。不做的話也還好,現在的 crawler 現在都還蠻聰明的,會針對更新比較頻繁的 feed 常常去確認,但這樣總是會有一些時間差。
不過裡面好像沒提到 Update Services,這是比較早期的方法,走 XML-RPC,雖然也不知道現在有什麼用途了,大概就是這樣所以沒提...