用PHP和AJAX建立RSS彙總器(1)_PHP教程

來源:互聯網
上載者:User
儘管本文所使用的是PHP語言,但是請記住任何伺服器端語言都會正常工作。為了理解本文,我假定你基本理解JavaScript和PHP或一類似伺服器端語言。

本文樣本使用AJAX來把一請求從一個RSS饋送發送到一定製的PHP對象。該PHP對象複製一份在本機伺服器上的該饋送並返回這一路徑。該請求對象收到這一路徑,分析它,並且把資料以HTML形式顯示給使用者。這聽起來涉及很多步驟,其實它僅由4個小檔案組成。之所以使用了4個小檔案,是為了平衡它們各自特定的力量而使整個系統的處理極富效率性。

我想,有些讀者可能會問,為什麼你要建立在本機伺服器上的饋送的一個副本而不是簡單分析最原始的饋送。原因是,這樣以來可以允許繞過XML HTTP Request對象所強加的跨域限制。後面,我還會解釋怎樣建立這個定製的PHP對象;但是首先,讓我們從表單建立開始。

建立發出請求的表單

你要做的第一事情是,在你的HTML的head標籤之間包括你可能想使用的JavaScript和任何CSS檔案。我包括了一個式樣表來實現該彙總器的最後布局並用一個JavaScript檔案來發出請求和進行饋送分析:

<link href="css/layout.css" rel="stylesheet" type="text/css" />

<script src="js/request.js"></script>

下一步,建立一個表單,它針對你所選擇的一個RSS饋送發出請求。我建立的表單只包括一個輸入欄位和一個提交該請求的按鈕。該請求的查詢是一個字串,它由饋送輸入值和一個將在伺服器端被校正的口令字組成;作為一個樣本,我使用了下面形式:

"password=mypassword

該代碼在每次頁面載入之時發出一次請求;因此,如果頁面被重新整理,現有的在該輸入欄位中的饋送串將在頁面載入時被請求。下面是一個表單資料的樣本,連同一些div標籤用來顯示已分析的饋送的特定結點:

<body onload="javascript:makeRequest('request.php?request=' + document.feedForm.feed.value + '"password=mypassword');">

<form name="feedForm" method="post" action="javascript:makeRequest('request.php?request=' + document.feedForm.feed.value + '"password=mypassword');">

Enter a feed: <input type="text" name="feed" id="feed" size="20">

<input type="submit" name="submit" value="Add Feed">

</form>

<div id="logo"></div>

<hr/>

<div id="copy"></div>

<div id="details"></div>

</body>

我所建立的這三個div標籤是logo,copy和details,其中每一個都在配置樣式表中有一個與之相關聯的樣式。當我們分析饋送時將會用到它們,但是我們首先需要能夠存取我們所請求的饋送。這可以使用我前面所提到的PHP對象來完成。

建立定製的PHP對象

我用PHP建立了一個小型RSS類,它在本機伺服器上建立一個請求饋送的副本,這樣它可以為我們稍後要建立的XML HTTP Request對象所存取。典型地,你不能跨域請求一個檔案,這意味著你要請求的檔案需要位於本機伺服器上。這個類是一種解決跨域問題的辦法,因為它建立該饋送的一個副本,這個副本在本機伺服器上被請求並且把本地路徑返回到該饋送,然後它由該Request對象來存取。

這個類中唯一的方法是一個要求方法,它僅有一個指向所請求的RSS 饋送的URL的參數。然後,它通過rss的名字來檢查是否一目錄位於本機伺服器上。如果不存在,就建立一個並把其許可權模式設定為0666,這意味著該目錄可讀寫。當被設定為可讀的時,該目錄就可以在以後被存取;而當被設定為可寫的時,就可以把該饋送的一個副本寫向本機伺服器上的目錄:

//如果不存在目錄就建立一個

$dir = "rss";

if(!is_dir($dir))

{ mkdir($dir, 0666);

}

注意:在一台Windows機器上,對於PHP 4.2.0及以上版本中模式設定是不被要求的。但是,如果它存在的話,它將被忽略;因此,我保留了它,以備該工程被遷移到一台UNIX或Linux伺服器上。

在把饋送複製到該伺服器前,我們需要一個唯一的檔案名稱。我對這個完整的URL使用了md5加密方法以確保所有饋送的名字是唯一的。通過這個新的檔案名稱,它可以串連一個描述指向該檔案的目錄的字串;這將在建立該饋送的副本時使用:

//建立唯一的命名

$file=md5($rss_url);

$path="$dir/$file.xml";

通過使用被定義在上面的路徑和到原始的被請求的饋送的URL的參考,現在我們能建立該檔案的一個副本。最後,把該路徑返回到該新檔案,作為對該請求的響應:

//複製饋送到本機伺服器

copy($rss_url,"$path");

return $path;

Following is the small, yet powerful RSS class in its entirety:

<?php

class RSS

{ function get($rss_url)

 {

if($rss_url != "")

{

//如果不存在目錄就建立一個

 $dir = "rss";

 if(!is_dir($dir))

 {

mkdir($dir, 0666);

 }

// 建立一個唯一的名字

 $file = md5($rss_url);

 $path = "$dir/$file.xml";

//複製饋送到本機伺服器

 copy($rss_url, "$path");

 return $path;

}

 }

}

?>

為了存取該PHP類中的方法,需要有一個請求檔案來擔當到該類的一個介面,這也正是我們正在請求的檔案。這個檔案首先驗證從該請求查詢的一口令變數,或者返回一條指定該要求者不是一名經授權的使用者的訊息,或者用指向RSS饋送(該饋送在由要求方法處理後被複製到本機伺服器)的路徑作出響應。為了響應該RSS饋送,需要包含這個RSS對象並把它執行個體化,並且需要通過使用被請求的饋送的URL作為一參數來啟用要求方法:

<?

if($password == "mypassword")

{

 require_once('classes/RSS.class.php');

 $rss = new RSS();

 echo $rss->get($request);

}

else

{

 echo "You are an unauthorized user";

}

?>

1

http://www.bkjia.com/PHPjc/446844.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/446844.htmlTechArticle儘管本文所使用的是PHP語言,但是請記住任何伺服器端語言都會正常工作。為了理解本文,我假定你基本理解JavaScript和PHP或一類似伺服器端...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.