臺大有一個Taiwan Historian Network,是一個利用RSS訂閱各部落格訊息的平臺,但是年久失修,有重複匯入、排版上的問題,訂閱網站也不夠豐富,所以我就決定自己寫一個。

只要將程式碼貼在一個網頁程式碼的<body>內,然後在$rss_url=array()陣列內放上你要聯播的RSS網址,最後把網頁存成PHP並丟到伺服器上,就可以實現多站聯播了。但 simplexml_load_file()需要時間載入,因此加入越多RSS站,開網頁的速度會越慢,所以這只是初步完成的堪用版本。我再想一下更有效率的寫法吧,因為如果要預存這些RSS內容,似乎需要JS或後端資料庫

載入要一些時間,直接前往網站:http://studentweb.ncnu.edu.tw/100105503/funny/rss.php

 

<table width="80%" style="border:6px #d0d0d0 solid;padding:6px;" rules="all" cellpadding='5';>
<?php
$rss_url=array("http://shi-yuan.blog.ntu.edu.tw/feed/");//放RSS網址的陣列
$max_url=count($rss_url);//取網站陣列最大值
$j=0;//日期記數器
for ($i=0;$i<$max_url;$i++)
{
	$rss_url[$i]= simplexml_load_file($rss_url[$i]);//讀取xml的參數
	$rss_title[$i]=$rss_url[$i]->channel->title;//放入標題的陣列
	foreach ($rss_url[$i]->channel->item as $item) 
	{
		$rss_date[$j]=strtotime($item->pubDate);//匯入日期
		$rss_date2[$j]= "<tr style=\"border:6px #d0d0d0 solid;padding:6px;\"><td><h2><a href='" . $item->link . "' target=_blank>" . $item->title . "</a></h2>"."<p>網站:".$rss_title[$i]." | 發布時間:".$item->pubDate."</p>".$item->description ."</td></tr>";//匯入RSS資料
		$rss_date3[$j]=$j; 
		$j++;//日期記數+1
	}
}
$max_date=count($rss_date);//取時間陣列最大值
for($i=0;$i<$max_date;$i++)//氣泡排序
{
	for($j=$max_date-1;$j>$i;$j--)
	{	
		if($rss_date[$j]>$rss_date[$j-1])
		{
			$temp=$rss_date[$j-1];//氣泡移動
			$temp2=$rss_date3[$j-1];//索引同步移動
			$rss_date[$j-1]=$rss_date[$j];//氣泡移動
			$rss_date3[$j-1]=$rss_date3[$j];//索引同步移動
			$rss_date[$j]=$temp;//氣泡移動
			$rss_date3[$j]=$temp2;//索引同步移動
		}
	}
	echo $rss_date2[$rss_date3[$i]];//輸出RSS內容
	if ($i>48) break;//要輸出的數量
}
?>
</table>

 

2014年3月24日補記:上面的程式碼是提供給沒有資料庫的使用者,因為我有mySQL資料庫,所以另外寫了一個版本,包含一個簡易的判斷式,每天會先把資料都匯入資料庫,同天就可以從資料庫直接輸出,隔天才要重新匯入。如此一來,只有每天第一個瀏覽的人仍然會很慢,後來瀏覽的人就會變快。我對此的解決方法是,放一個隱形框架在我的部落格網頁上,讓人不知不覺中成為第一個瀏覽者。雖然解決了速度的問題,卻仍有個問題無解,即每天第一個瀏覽者,如果重新整理之類的,資料庫會有重複匯入的情況。

arrow
arrow

    okplaymayday 發表在 痞客邦 留言(0) 人氣()