去年寫了一個新史學連線RSS站(用PHP實現多站RSS聯播),當時就發現一個問題,當收集的網站越來越多,每一次載入網頁都需要花很長的時間。於是我向計算中心申請了一個mysql資料庫,讓伺服器每天12點0分就自己載入,然後把所有收集到的學界動態都寫進資料庫裡面,這樣完全解決載入的問題了。目前這裡收入了兩岸學界60個左右的部落格,以人文學門為主,包括歷史學、人類學、歷史地理、社會學,每天更新一次,看了以後對於學界脈動也能多少一點了解。

直接前往網站:http://project.ncnu.edu.tw/hgsa/?page_id=121

    一些載入伺服器的基本功能我就不寫了,這次修改的程式碼,主要在以下幾個地方,第3行增加一個判斷式,目的是自動更新,如果是同一天就不必更新,直接載入資料庫,因此接下來第15行有一個刪除舊資料的動作。第32行輸出資料時改成只有標題,不輸出內容的原因主要是在於收集的資訊太多了,再列出內容感覺太龐雜,另一個原因是我以前寫了一套可以抓資料的app,賺了一點錢,有一個網站對此不太爽,所以我這裡也避免重製任何網站的內容,只有列出標題和時間。第54行是把資料寫進資料庫,hgsa是資料庫名字、wp_rss_data是資料表。在這些程式碼以外,還有幾個我自己知道的bug,因為基本上不影響讀取,我暫時不想修。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<table width="100%" style="border:6px #d0d0d0 solid;padding:6px; background-color: #FFF;" rules="all" cellpadding='5'>
<?php
if($old_date==$date)//同一天就直接輸出
{
	for($i=0;$i<$max_date;$i++)
	{
		$sql_select  = "SELECT * FROM `wp_rss_data` WHERE `id`=".$i;
		$sql_query = mysql_query($sql_select);
		$sql_row = mysql_fetch_assoc($sql_query);
		echo $sql_row["post"];
	}
}
else//不同天就要重新匯入資料
{
	$sql = "DELETE FROM `hgsa`.`wp_rss_data` WHERE `date` = '".$old_date."'";//刪除舊資料
	mysql_query($sql);
	$rss_url=array(
	"http://blog.ncue.edu.tw/home/lib/rssfeed.php?blog=ashin&resType=new_doc",//(國立彰化師範大學歷史學研究所歷史GIS部落格)
	"http://blog.goo.ne.jp/satojin71/rss2.xml",//佐藤仁史 太湖流域フィールドノート
	"http://www.dfdaily.com/rss/1170.xml",//上海书评
	);//放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]." | 發布時間:".date('Y-m-d',strtotime($item->pubDate))."</p></td></tr>";//匯入RSS資料
			$rss_date3[$j]=$j; 
			$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內容
		$sql = "INSERT INTO `hgsa`.`wp_rss_data` (`id`, `date`, `post`) VALUES ('".$i."', '".$date."', '".addslashes($rss_date2[$rss_date3[$i]])."')";//建立新資料
		mysql_query($sql);
		if ($i>$max_date) break;//要輸出的數量
	}
}
?>
</table>

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