최근 블로그에서 토론이 활발해지며 귀중한 댓글이 속속 등장했습니다. 때때로 우리는 특정 기사의 RSS 댓글을 구독하고 싶지만 불행하게도 블로그 파크에는 현재 이 기능이 없습니다. 등록된 사용자의 경우 댓글 상자 아래에 있는 "답장 구독" 링크를 클릭하면 새 댓글이 나타날 때 이메일을 받을 수 있습니다. 익명의 사용자가 최근 논의된 내용에 주의를 기울이기 위해 지속적으로 새로 고쳐야 하는 것은 안타까운 일입니다. 그런데 우리는 누구입니까? 우리는 프로그래머이기 때문에 이 장애물은 우리에게 있어서 사소한 문제에 지나지 않습니다. 자신만의 사이트를 구축하고, 페이지 데이터를 얻고, HTML을 분석하고, RSS로 출력하는 것은 너무나 간단합니다.
Lao Zhao는 이에 대한 가장 간단한 예를 제시했습니다. http://jeffreyzhao.cnblogs.com에서 모든 기사의 댓글을 구독할 수 있습니다. 단순한 개인 도구 프로그램이기 때문에 성능, 확장성, 확장성, 내결함성을 고려하지 않고 단위 테스트, 종속성 주입 등과 같은 "모범 사례"를 모두 폐기합니다. . 한마디로, 그것은 가능한 한 쉽게 다가온다.
이 예는 두 개의 그룹으로 구성됩니다. 첫 번째 부분은 기사 URL을 기반으로 을 생성하고 다음으로 전달하는 정적HTML 페이지입니다. 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('url').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 Framework에는 유용한 도구가 너무 많이 준비되어 있으므로 이들을 연결하기만 하면 됩니다. 예를 들어 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의 웹프로그래밍모델리소스에서 이 보고서를 참조하세요.
GetRssReed의 핵심은 HTML문자열 을 분석하는 것입니다. 여기서 Zhao는 정규식 을 사용하여 제목, URL, 시간, 사용자 및 콘텐츠를 일치시켰습니다. 그렇다면 SyndicationFeed 개체를 구성하는 것이 이보다 더 간단할 수는 없습니다. 안타깝게도 블로그 파크에 있는 다양한 템플릿의 HTML이 다르기 때문에 이 Lao Zhao의 예는 현재 템플릿만 지원합니다. 예를 들어 HTML 구문 분석 방법을 지정하기 위해 CommentRss.ashx에 새 매개변수를 추가하는 등 직접 수정할 수 있으며, 그런 다음 여러 템플릿에서 사용할 수 있습니다.
이 예제는 사용하기도 매우 간단합니다. 로컬 IIS에서 컴파일하거나 배포하고 Default.html 페이지를 열고 "Old Zhao Talks about IL(2)"와 같은 기사의 URL을 복사할 수 있습니다. )" 기사 URL:버튼을 클릭하면 RSS 페이지로 연결됩니다. 따라서 IE에는 다음과 같이 표시됩니다.
이때 로컬 RSS 리더에 URL만 입력하면 됩니다. 프로그램이 귀하의 컴퓨터에 배포되기 때문에 Google 리더와 같은 도구를 사용하여 구독할 수 없습니다. 조건이 있으면 가상공간이나 다른 장소에 넣어두시면 됩니다. 귀하의 프로그램은 귀하에게만 서비스를 제공하기 때문에 많은 리소스를 차지하지 않으며 현재 작성 방식으로 충분합니다. 우리는 프로그래머입니다. 스스로 하시고 음식과 의복을 충분히 갖추십시오. [관련 추천] 1.위 내용은 댓글 RSS를 수동으로 생성하는 코드 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!