去年寫了一個新史學連線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> |
全站熱搜