用AJAX技術在自己Blog上彙總並顯示朋友Blog的最新文章(通過RSS)

來源:互聯網
上載者:User

有時候,你的Blog可能需要這樣的功能:

在自己Blog上彙總並顯示朋友Blog的最新文章,這樣方便自己及時瞭解朋友的訊息,另外,也方便訪問者找到和本Blog相關的blog和文章。

這個功能你可以叫它“Blog彙總”或者“Blog聯播”,目前,實現這樣功能的軟體或服務都有限制:比如,Terac Sinfonia、Lilina、MXNA雖然功能都很強大,但是需要安裝,不能自由定製,不能嵌入到Blog側邊欄。另一方面,目前提供這樣服務的BSP只能彙總本系統內的使用者,限制也很多。

為瞭解決以上問題,我採用AJAX(Asynchronous JavaScript + XML)技術實現了在自己Blog上彙總並顯示朋友Blog的最新文章的功能,你可以根據需要,進行自由定製。預設是支援RSS 2.0規範的,Terac Miracle、Movable Type、Word Press、Donews / 部落格園 / CSDN採用的.Text系統都能很好的支援,你可以自由修改,來支援RSS 0.92、RSS 1.0、Atom 0.3。顯示效果可以看我這個blog右下角的“朋友的最新Blog”。

為什麼採用AJAX呢。首先,彙總別人的RSS不能影響自己網站的速度,所以需要非同步執行,其次,RSS本身就是一個很規範的XML文檔,另外,由於彙總內容大小不可定,所以必須要局部重新整理,最重要的一點,採用AJAX完全把載入解析XML的操作放到用戶端進行處理,節省伺服器頻寬和資源,最後,這個功能我完全用JavaScript實現的,這樣,不管你的blog是ASP、.Net、PHP、JSP、Perl,甚至純HTML的都能用。下面說用法:

首先,在你Blog側邊欄合適位置加入這樣一段代碼:

<script src="ajax_rss.js" type="text/javascript"></script>

 然後將下面的內容儲存成“ajax_rss.js”(也可以直接下載我的ajax_rss.js),然後上傳到伺服器相應的位置:

//你可以自由添加符合RSS 2.0規範的 RSS
processRSS('http://www.xintiantang.com/andy/index.xml');
processRSS('http://www.xintiantang.com/joywave/index.xml');
processRSS('http://www.xintiantang.com/skype/index.xml');
processRSS('http://www.donews.net/keso/rss.aspx');
function processRSS(url){
  var req = getXMLHttpRequest();
  req.onreadystatechange = function () {
    if (req.readyState == 4 && req.status == 200) {
      var doc=req.responseXML.documentElement; 
      parseRSS(doc);
    }
  }
  req.open("GET",url, true);
  req.send(null);
}
function parseRSS(doc) {
 //如果要用RSS 0.92, RSS 1.0, Atom 0.3,你需要改下面3行
  var blogName=doc.getElementsByTagName("title")[0].firstChild.data;
  var entryName=doc.getElementsByTagName("title")[1].firstChild.data;
  var entryLink=doc.getElementsByTagName("link")[1].firstChild.data;
document.getElementById('ajax_rss').innerHTML += '<a target="_blank" href="'+entryLink+'" title="'+blogName+'">'+entryName+'</a><br/>'; }
function getXMLHttpRequest() {
    var xmlhttp;
    try {
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
        try {
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e) {
            xmlhttp = false;
        }
    }
    if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
        xmlhttp = new XMLHttpRequest();
    }
    return xmlhttp;
}

好了,安裝結束,測試一下吧。顯示效果可以看我這個blog右下角的“朋友的最新Blog”。

需要說明的是:由於網速和對方伺服器的原因,AJAX不能保證一定能獲得RSS,所以有時可能會顯示不出來。另外,建議不要加太多的blog,由於裝載和解析放到用戶端,過多的blog可能會導致用戶端的系統運行緩慢,甚至瀏覽器崩潰。

更新:2005/06/09 11:33

由於安全原因,XMLHttpRequest不能cross domain,所以只能彙總當前domain上的內容,比如你在新天堂的Blog只能彙總新天堂的,在部落格園上的Blog只能彙總部落格園的,其實對於部分人,這已經足夠了。搜了一下,我找到瞭解決cross domain問題的方案:方法一,用Apache mod_rewrite把other domian的RSS重寫成本地的,這需要設定管理員,比較麻煩,不通用。方法二,用ASP、.Net、PHP、JSP、Perl寫一個Proxy指令碼,我寫好了JSP和PHP的,稍後放出。別的指令碼的就沒辦法了,如果有人寫好了,就發給我吧,共用出來:)。

更新:2005/06/09 17:40

其實這個東西適合訪問量不大的Blog使用,如果你的blog訪問量很大的話,順帶著朋友blog的RSS訪問量也很大,很浪費朋友Blog所在伺服器的頻寬^_^。當然,你可以用bloglines或feedburner中轉,浪費鬼子的頻寬去:D。

如暖暖魚所說的,最好提供這樣的服務,不過我做的東西太多了,我在考慮中^_^。不過要做好需要考慮很多問題:Cache、彙總頻率、彙總效率、RSS儲存等,如果在做這個或要做的朋友也請考慮一下這些問題吧。

PHP代碼(儲存成keso.php,我彙總了Keso的,請別見怪:)。

header( "Content-Type: text/xml" );
//TODO 應該用Cache
$rssData = file_get_contents("http://www.donews.net/keso/rss.aspx");
echo $rssData;
?>

然後上傳到伺服器,在ajax_rss.js裡加入這一行:processRSS('http://www.xintiantang.com/keso.php');,這樣就解決了XMLHttpRequest的cross domain問題。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.