WordPress 文章聯播 – 全面取代 Google Feed API 擷取RSS Feed文章

全新上線!從原先的「免費的喘息聯播」變成「WordPress 優質文章聯播」,除了只是換個名字之外,其實還改寫了底層的機制與語法。從過往的人工審核、改程式碼加入網站,現在變成半自動的模式進行,加快網站的審核腳步。以往要修改程式碼加入網站聯播還真有點辛苦,現在變成半自動的方式絕對可以幫各位要加入的大大們快速審核通過,但是新版也增添了一些機制與規範。

新版的聯播系統推出與修正主要是因為Google Feed API在2016年12月15日終止服務,造成我們的聯播系統整個停擺,雖然福哥已經跟我講這件事了,但因為那陣子很忙完全沒有時間處理,再加上之前是修改他人分享的JS程式,其實自己沒有改寫太多東西,所以對於Google API並沒有熟悉。而好用的Google Feed API關閉之後,雖然對大多數的WordPress使用者沒太多影響,但對喘息聯播影響就有點大了。


最早成立「免費的喘息輪播」是因為當年RSS輪播很夯,再加上最早期台灣的WordPress討論區「WordPress歡樂正體中文交流所(最早出現於2006年,現在居然已經消失了)也有一個相同的聯播機制,覺得這個模式很棒自己也想要弄一個,所以在2009年之前使用「NewsGator」(此服務也已消失)服務製作聯播,也有人使用Google Reader 製作(此服務也已消失),不過想要更棒的客製調整,最後採用了Google Feed API 來弄出多網站RSS文章聯播系統在2009年7月。

WordPress 文章聯播 - 全面取代 Google Feed API 擷取RSS Feed文章

現在回過頭看,聯播系統居然已經使用了7年之久,想想時間也夠久了,網路上的服務要超過5年以上的真的是相對少,要超過10年的真的越來越難找了,想想無名小站也不過8年的時間就消失了。你覺得要超過10年的服務會有多少呢?回想起來都是時代的眼淚。對了,忘記跟大家說香腸炒魷魚今年4月25日即將邁入第10年了,很多人都說看我部落格長大,但我是高三就開始寫了…其實我也沒有很老QQ

申請WordPress聯播系統

聯播申請網址https://wpbox.tips/blogroll/

聯播細節不多說明,請看申請網頁上的介紹文字,規則有一點變動。聯播系統多出了圖片展示,RSS沒輸出圖片的用戶可以找一下RSS Image相關外掛即可滿足,聯播機制如同以前相同,每一個網站僅有一篇出現。聯播語法記得幫我們更新一下,以求最完善的WordPress聯播表現。

Google Feed API 替代方案分享

好啦,這篇文章其實只是要記錄一下我尋找Google Feed API替代方案的心路歷程。面對擺放了接近4個月持續不中斷的壞掉RSS聯播網服務,本月終於有一點點時間來正視與面對這個Google Feed API關閉的問題,本來想說找找有無快速無腦替代方案,看了一下其他也是採用Google Feed API的服務,目前也仍屬於停擺狀態。所以Google 搜尋了「google feed api replacement」、「google feed api alternatives」等等的關鍵字,找找看有無大大分享。

RSS to json

WordPress 文章聯播 - 全面取代 Google Feed API 擷取RSS Feed文章

終於讓我發現一個救星就是利用「RSS to Json」的服務幫我把RSS快速轉成JSON,結果正當以為即將完成之時,去發現他有API存取次數限制,所以作罷。簡單說一下,此服務可以get json格式,只要放入rss feed即可自動轉成json檔案,方便你直接ajax擷取RSS資料,針對單個RSS Feed執行。有提供付費使用,但因為我們聯播網站改版之前接近150個,實在是不敷使用。

 

YQL – Yahoo! Query Language

找到這個的時候其實是透過日本網站文章「Google Feed API が使えなくなったのでYQLで代替してみた」介紹與使用,測試上主要是把RSS連結丟到YQL查詢,接著會吐出json檔案,並透過jquery寫入網頁的div內。看起來很簡單,複製範例也可以使用,本來要拿來當主要使用方案了,卻發現他針對單一RSS查詢可以,針對多RSS查詢會整個卡住,更何況我丟了近150的RSS URL,整個無法讀取。但後來想想YQL哪天學Google Feed API 忽然中止服務,又要再改版一次真的吃不消,尤其改版就要重新輸入RSS URL,放過我吧…

然後順道一提,研究上述兩個東西就把我美好的星期天吃掉了,這時候來到了晚上。找了一整天的時間,發現替代服務很多,自己因為要聯播多網站,其實缺的是RSS MIX的東西,需要一個服務幫我把所有RSS整合起來,然後產出單一RSS(各站一篇文章)。所以我就繼續尋找RSS MIX服務。

Feedly Mixes

Google Reader 收掉的時候,Feedly算是首推的RSS Reader服務。本來上面嘗試失敗的時候有想說回去使用「NewsGator」可惜服務已終止。然後想到Feedly既然可以訂閱應該也可以把訂閱清單輸出文章。剛好找到官方Feedly Mixes說明文件,但操作半天都不對,後來發現是付費服務,每個月要5-7美金,一年下來就要多2000多台幣,這真的有點吃不消,再加上也不知道真的可否用所以作罷。

FeedWind

這個FeedWind真的是Google Feed API救星,找到他測試的時候我就差眼淚沒掉下來趴在電腦前。因為他真的是滿足了我的Google Feed API需求,可以整合多網站,甚至撈出來的畫面非常好看,還會自動輪播、圖片與文字摘要輸出、顏色可自行修改也能自己弄CSS調整。,管理上也不困難。提供的widget支援script和iframe嵌入,非常推薦給一般人使用。

不過精彩的才要開始,正當把樣式調好,準備正式取代聯播系統的時候,加入RSS Feed才發現他免費用戶最多只能15個網站(單一個widget),瞬間從天堂掉到地獄,這時候已經是隔日的凌晨兩點多。付費方案也沒有講明是否有上限,而且既然免費有限額付費應該有限制,畢竟自己寫過後都知道這個很消耗系統資源。所以這個又被捨棄了。只能說服自己,別人的服務總有一天會收。而且他不能一個網站只抓一篇。

WP RSS Aggregator

半夜快三點,測試這個外掛,外掛好處基本上已經滿足我所有需求,可自己會入RSS URL,提供完善介面管理,可以設定每個網站抓取文章數量。在WordPress內可以使用shortcode插入到任何地方,其實會開發可以搭配custom page template的方式,輸出RSS聯播網。這個算是最後的備案,當然還有一個優點他可以針對每一個網站只抓一篇並且使用時間排序,恢復與我前一版聯播一樣的排列方式。

不過小小嫌棄的缺點是為了聯播系統要安裝一個WordPress,只能輸出標題、日期、文章超連結、網站名稱。無法輸出網站名稱、摘要文字和圖片,因為這是要購買30元美金的付費外掛才能享受的功能。好,心想沒關係,至少可以回到以前聯播的方式就好了。另外這個外掛還可輸出我期待的RSS Mix,各站RSS Feed抓出一篇變成XML RSS。然後我可以搭配YQL和jQuery寫ajax或getJSON方式把資料讀出來,算是較簡單的方式。但後來我沒使用,因為福哥隔天幫我找到更好的方式。

 

RSS-API

接下來就是自己的程式自己架設,都是基本的程式可以架設在虛擬主機、VPS上跑,不過因為現在很多主機都強調優化,例如opcache、pagespeed等,以及面臨PHP5和PHP7轉換期,主機環境都有不同設定,造成開發上都有困難,前面研究這麼多個程式腦細胞一半都已經掛了。這個RSS API一丟上測試網站就跑ERROR,完全不想看LOG直接先宣告掰掰,所以這個我沒有多測試,未來可能可以當備用方案。

 

RSS-PHP

回到了PHP老本行,大概已經有一年沒有認真的開發PHP底層的東西,腦細胞也生鏽了不少,還有前面走掉的,大概已經無腦狀態了。福哥提供了這個API和一篇教學文《「Google Feed API」の代替として「rss-php」でRSSやAtomフィードを取得・表示する》,瞬間眼睛亮起來。因為寫法不困難,github抓下來就只有一隻PHP檔案。再加上看了一下code是使用curl方式去抓RSS Feed資料,腦東飄過很吃資源這件事情,所以仔細看一下發現有cache機制,好就決定是他了。

Google Sheet + RSS PHP 結案!

花了整整12個小時以上的時間,坐在電腦前不吃不喝只會跑一下廁所,連Facebook都不想已讀任何訊息,全心投入寫這個程式,畢竟寫jQuery本身就很容易卡關,再加上PHP底層的東西太久沒用有點忘記,平常都是寫WordPress佈景主題,只要看懂WordPress的function和CSS就可以結案了,我只能說WordPress Codex太好用了(大堆)。話說回來這個RSS PHP搭配上日本人的範例,很快我就測試出聯播系統。

但為什麼是測出不是做出,因為我花了一大部分的時間在寫自動化,基於前面說過因為審核太慢+懶得審核+每次審核都要開FTP加入網站,實在是很麻煩,所以把腦筋動到了Google Docs Sheets上。透過Google表單的提交表單提交後,將資料儲存在「試算表1 – 工作表1」,接著把「試算表1 – 工作表1」部分欄位讀入部分資料丟到「試算表1 – 工作表2」,簡單說擷取出我要的部分。接著再把「試算表1 – 工作表2」內的資料讀到另一張全新的試算表「試算表2 – 工作表1」並且設公開權限以及文件發布成網頁。

跨不同的「試算表」可以使用Google的「importrange」下規則,即可讀取進去。另外輸出RSS Link的時候我特別在「試算表1 – 工作表1」裡面增設了一個「審核」,當設yes就是輸出、設no就是不輸出,這個判斷使用「query」。這邊不要問我為什麼不用圖片表示因為要配合圖片畫好累…哥的腦細胞已經下班了。

運作流程:提交申請表→申請者資料儲存→擷取已允許的RSS URL→公開RSS URL→PHP讀入這些允許的URL→使用jQuery的ajax判斷抓出文章。

光前面這段半自動化,面對第一次寫這麼複雜(?)的東西,真的是有點小吃力。再來就是花大把的時間在研究怎麼正確讀取json檔案,畢竟太久沒寫會把物件和陣列的輸出方式搞錯,測試超久,一直看error log 在debug,近期內休想再叫我看error log!!後面的東西就交給RSS PHP這隻程式擷取出檔案變成json,再由HTML去讀取這些json,接著花時間在CSS和HML上美化聯播系統,主要是參考「FeedWind」的呈現方式再處理,另外搭配輸出網站名稱、限制一個網站只能一篇避免惡意洗版。

剛開始寫好沒有寫ajax 的error判斷,每次只要有人的rss錯誤就會整頁無法噴出,第三天又花一點時間修正一下,另外RSS第一次載入會有點慢,再來是每小時第一次載入都會慢一次,因為要重新撈出所有文章(去檢查每一個網站),因為怕空白太久,所以加入了一個很可愛的loadin圖案,前一陣子很夯。

WordPress 文章聯播 - 全面取代 Google Feed API 擷取RSS Feed文章

另外讀取錯誤也會顯示在畫面請各未告知一下我QQ。

WordPress 文章聯播 - 全面取代 Google Feed API 擷取RSS Feed文章

好,非常莫名的有感打文這篇文章,時間也來到半夜接近1點了。文章字數居然已經超過5000字,看來我廢話也是不少。以上的幾個服務或者是套件可以提供正在尋找Google Feed API的使用,至於我的系統目前我只寫給自己使用,沒有打算公開程式碼獻醜,流程大概是以上的方向,會寫程式的應該不會需要我再額外提供東西了,因為很多東西是寫在jQueyr上的,其實翻一下code大概就是用ajax抓資料而已,其餘就是丟上去就可以執行了。

Google Sheets 部分不做其實很簡單的,我個人也擔心Google Sheets哪天就要強迫使用Google API v4 版本,屆時我可能不想找新的寫法,可能直接用人工方式改PHP檔案了,希望API別這麼快收,這個聯播系統基於一些機制與調整,目前從150多個網站精簡到50多個(截至這篇文章刊文前)。主要是很多網站都收掉了,再來是有些網站可能想說聯播壞掉太久也把我們刪除了、還有一部分就是網站文章停留在2015年已經超過半年、一年沒更新了,所以就暫時先將這些網站不聯播,未來大家有再次新增文章的時候都可以再申請,目前沒有黑名單網站,請放心服用。