2009-09-16

Blogger 打造紀實 - 自定訂閱 (Build Your Own RSS Feed)

Blogger LogoBlogger 設定 RSS Feed 的地方在後台介面的「設定 > 網站提供」的頁籤可以設定調整。但是,它也只有兩種選項可以選:完整,簡短。用「完整」呢…訂閱的讀者在 Reader 或 E-Mail 就可以看完全文,流量帶不進來…而「簡短」又往往被系統斷在很隨性的地方…搞不好引言就這樣變狗屁不通不夠引人入勝,流量也帶不進來…所以…Blogger 的 RSS Feed 是否能夠自訂引言,然後一個「繼續閱讀」把訪客帶進來,讓精心的排版不會淪為白工,要怎麼做呢?

阿布龜毛的個性,一篇文章常常寫寫調調改改,因為預覽是一回事,實際放上版面又是另一回事,所以不得不邊寫邊發佈,而 RSS Feed 有輪詢抓取更新的特性,也因此常常發個呆寫到一半的半成品就被抓走了…後來成立了一個草稿格專門拿來讓阿布改到爽,再放上來發佈…所以其實阿布洛格,是兩個部落格分工打造出來的…

是的…反正開新格不用錢…阿布想到了同樣的方式來解決自定訂閱的問題…



文章備份與架構設計
Blogger 的文章/意見(迴響)備份十分完備,也十分簡單。後台介面中 設定 > 基本 就可以看到。(基本!看到沒…真不知道國內某 BSP 竟然關掉這樣的功能實在是令人瞠目結舌的沒 Sense!)
匯入網誌 - 匯出網誌 - 刪除網誌

您可以從先前匯出的 Blogger 網誌匯入文章和意見、匯出此網誌,或將其永久刪除。

(這不是圖,阿布學得像不像?XDD)

匯出網誌把主格舊文匯出成一個 XML,再用匯入網誌灌給新成立的格子,就跨出了第一步。

再來,責任的劃分,新格只負責產出 RSS Feed,流量/閱讀還是要導給主格。
所以,規劃目標要餵出去的每則文章架構是這樣:
文章標題(新格文章網址,這裡避不掉,RSS Feed 沒加工過燒起來就是這樣)
阿布小品自訂的引導文,可長可短,自由控制。
自訂的引導文,可長可短,自由控制。
自訂的引導文,可長可短,自由控制。

繼續閱讀(可自訂樣式,連結主格文章網址)


所以,除了一一編修在新格匯入的文章成為想要的引言長度與格式外,一個重要的課題,就是萬一 RSS Feed 訂閱者是點文章標題(新格文章網址),而不是點繼續閱讀(主格文章網址)的時候,怎麼打回去主格文章網址?



Blogger 的命名規則 (Naming Rule)
一篇 Blogger 文章,在後台介面「設定 > 存檔」中,如下設定為啟用文章網頁時:

[張貼網頁] 讓您的每篇文章除了能出現在您的網誌首頁以外,還能擁有自己的唯一網頁。

文章的連結網址長這樣:http://網站 URL/YYYY(四碼年份)/MM(兩碼月份)/文章檔名.html
  • YYYY(四碼年份):文章第一次發佈/匯入時所設定張貼日期的年份
  • MM(兩碼月份):文章第一次發佈/匯入時所設定張貼日期的月份
  • 文章檔名的規則就複雜了點:
    • 檔名為文章標題中數字、英文符號「-」所組成,而空格(space)會換為符號「-」
    • 所有其它的中文字,特殊符號都會被完全過濾
    • 如果是全中文的標題,則系統會預設以「blog-post」為預設檔名
    • 如果「YYYY/MM/」底下已有「 blog-post」存在,則系統會附加編號成為「blog-post_編號」作為文章的檔名。

會特意解釋這一大段,是因為『匯入網誌』的動作,系統會依循這樣的命名規則,為每一篇匯入的文章成立它的檔案名稱(在匯入的當下就決定了,不是發佈的時候才決定)。所以,要做到主格新格在「/YYYY/MM/文章檔名.html」部分的一致,在下標題的時候就要先下點功夫。

中文標題在「blog-post_編號」的命名規則的情況下,編號很難掌控,在新發佈的時候跟匯入的時候,編號產生的規則又不太一樣,而且用的是「_」分隔,即便想用英文標題矇混搞偷吃步都沒機會。所以在發佈的時候盡量不要使用中文標題,不管是為了 SEO 也好,還是文章管理考量也好,都請讓標題/檔名處在可被掌控的情況下。



網址轉換的魔術
前面的文章匯入/編修以及主格新格「/YYYY/MM/文章檔名.html」的一致都只是準備工作。接下來要變一個魔術,把所有「http://新格URL/YYYY/MM/文章檔名.html」的連結都把它導向「http://主格URL/YYYY/MM/文章檔名.html」。整個在 RSS Feed 動的手腳就可以接近無痕了!

是的!JavaScript 的 location.replace 是我們需要的。

<script type='text/javascript'>
var urlStr = location.href;
urlStr = urlStr.replace('新格URL','主格URL');
location.replace(urlStr);
</script>
插入的位置,阿布是放在 head tag 後的第一行。作用就是把所有「http://新格URL/YYYY/MM/文章檔名.html」強制轉換到「http://主格URL/YYYY/MM/文章檔名.html」,即便是直接連結「http://新格URL/」也會被導向「http://主格URL/」。

因為期望對外網址的統一,所以做了這樣的轉址動作,當然這樣的統一對 SEO 也有所幫助。為什麼不把新格隱藏起來就好?因為隱藏的格子/有設定讀取權限的格子,會對 RSS Feed 的產生限制,這也是合理的邏輯。當然,訪客要強行撞進來還是撞得進來,也不難撞進來,只是即便撞進來意義也不大,主要的資訊提供還是會引導到主格去。


這樣自定訂閱的方式,有很大的人工介入,但是其實不難,端看部落格中有多少文章需要整理。很多事情,是要趁早起步逐漸累積的。放出去給人訂閱的,就是這個加工過的新格 RSS Feed,不過,這也代表著,如果主格有新作發表,還需要多一個去新格同步發佈的動作。

這跟站內的繼續閱讀不同,RSS Feed 是要吐出去給 FeedBurner,給 Reader 的,任何程式化的控制方式,像是 CSS/JavaScript,可能都使不上力。不知道是不是阿布太龜毛了,沒看過類似的討論與實作,希望能幫到有需要的人。如果有更好的實作方式,也期待您與阿布分享。

0 回應 :

張貼留言

讓阿布知道你對這篇文章的想法吧!