首頁  >  文章  >  後端開發  >  手動產生評論RSS的程式碼實例

手動產生評論RSS的程式碼實例

Y2J
Y2J原創
2017-05-05 09:21:521855瀏覽

最近博客園討論氣氛熱烈,有價值的評論也層出不窮。有時候我們會很希望訂閱某篇文章的評論RSS,只可惜博客園目前沒有這個功能。對於註冊用戶來說,我們可以透過點擊評論框下方的「訂閱回應」鏈接,這樣就會在出現新評論的時候收到郵件。可惜匿名用戶,只好不斷刷新才能關注最近討論到什麼地方了。不過我們是什麼人?我們是程式設計師,這點障礙對我們來說應該是簡單不過的小事了。自己搭一個站點,取得頁面數據,分析HTML,輸出為RSS,就這麼簡單。

老趙為此作了一個最簡單的範例,可以訂閱http://jeffreyzhao.cnblogs.com上任一篇文章的評論。由於只是簡單的個人工具程序,所以完全不考慮性能、伸縮性、擴展性,容錯性,也拋棄任何的單元測試依賴注入等“最佳實踐” 。總之一句話,怎麼容易怎麼來。

這個範例由兩部分組成,第一部分是個靜態HTML頁面,根據文章URL產生並轉向其RSS連結。寥寥數行HTML和JavaScript

<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>博客园RSS</title>
    <script language="javascript" type="text/javascript">
        function goToCommentRss(url) {
            window.location = "CommentRss.ashx?url=" + encodeURIComponent(url);
        }    </script>
</head>
<body>
    <textarea id="url" cols="50" rows="10"></textarea><br />
    <input type="button" value="Comment RSS"        onclick="goToCommentRss(document.getElementById(&#39;url&#39;).value)" />
</body>
</html>

CommentRss.ashx將為我們輸出評論的RSS。它的程式碼如下:

public class CommentRss : IHttpHandler{    public void ProcessRequest(HttpContext context)
    {        string url = context.Request.QueryString["url"];        WebClient webClient = new WebClient();
        webClient.Encoding = Encoding.UTF8;        string html = webClient.DownloadString(url);

        context.Response.ContentType = "text/xml";
        context.Response.ContentEncoding = Encoding.UTF8;        SyndicationFeed feed = GetRssFeed(url, html);        Rss20FeedFormatter rssFormatter = new Rss20FeedFormatter(feed);        XmlWriter rssWriter = XmlWriter.Create(context.Response.Output);
        rssFormatter.WriteTo(rssWriter);
        rssWriter.Close();
    }    private static SyndicationFeed GetRssFeed(string url, string html)
    {
        ...
    }    public bool IsReusable { get { return false; } }
}

其實.NET框架已經為我們準備了太多太多有用的工具,我們只需要將它們拼接起來。例如有了WebClient類,三行程式碼便可下載到頁面的HTML。然後我們透過GetRssFeed方法來取得一個SyndicationFeed物件,再透過Rss20FeedFormatter輸出。 SyndicationFeed和Rss20FeedFormatter都是.NET 3.5中自帶的類別庫,放在System.ServiceModel.dll程式集中的System.ServiceModel.Syndication命名空間裡,可以方便讀取或產生Atom 1.0或RSS 2.0格式的XML為我們所用。更多資訊可以參考InfoQ中文站的這篇報告:WCF的Web程式設計模型資源。

GetRssReed的關鍵在於分析HTML字串,老趙在這裡使用了正規表示式匹配出每條評論的標題、URL、時間、使用者和內容。然後建構出一個SyndicationFeed物件就再簡單不過了。可惜的是,博客園不同模板的HTML不同,因此老趙的這個範例只支援現在用的這個模板。您可以自行改造,例如為CommentRss.ashx增加一個新的參數,用來指稱HTML的解析方式,便可以用於多個模板了。

這個範例使用起來也非常簡單,您可以將其編譯或部署在本地的IIS上,打開Default.html頁面,將文章的URL複製進去,如《老趙談IL(2)》一文的URL:

手動產生評論RSS的程式碼實例

點選按鈕,便會連結至RSS頁。於是在IE中便會展​​示為:

手動產生評論RSS的程式碼實例

此時您只要把URL放入本地的RSS閱讀器即可。因為程式部署在您的機器上,因此您無法使用Google Reader等工具進行訂閱。如果您有條件的話,把它們放到虛擬空間等地方即可。由於您的程式只為您一個人服務,因此不會佔用大量資源,目前的寫法也足夠了。

我們是程式設計師。自己動手,豐衣足食。

 【相關推薦】

1. RSS高效率入門教學

#

以上是手動產生評論RSS的程式碼實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn