利用PHP和AJAX创建RSS聚合器的代码(2)


//创建唯一的命名 
$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"; 

?>  


  GET/POST与AJAX相结合
  为了POST请求,我们首先需要创建该请求对象。如果你没有创建请求对象的经验,那么可以读一下我的文章《How To Use AJAX》或简单地研究一下本文的示例源代码。一旦创建该请求对象,就可以调用sendFeed方法并传递由表单所创建的URL:

复制代码 代码如下:


function sendFeed(url){ 
 post.onreadystatechange = sendRequest; 
 post.open("POST", url, true); 
 post.send(url); 

  一旦收到来自于PHP对象的响应并被正确加载,则对与该响应相应的本地文件发出另一个请求。在这种情况中,post.responseText提供给我们该新文件的路径: 
function sendRequest(){ 
 if(checkReadyState(post)){ 
  request = createRequestObject(); 
  request.onreadystatechange = onResponse; 
  request.open("GET", post.responseText, true); 
  request.send(null); 
 } 
}  


  分析响应
  由于RSS馈送之间的区别,分析响应具有一定的挑战性。一些含有包含标题和描述结点的图像,而其它则没有。因此,当我们分析回馈时,我们需要做一点检查来译解它是否包括一图像。如果它包括一图像,我们就可以,与该馈送的标题和链接一起,在image div标签中显示该图像:

复制代码 代码如下:


var _logo = ""; 
var _title = response.getElementsByTagName('title')[0].firstChild.data; 
var _link = response.getElementsByTagName('link')[0].firstChild.data;; 
_logo += "<a href='" + _link + "' target='_blank'>" + _title + "</a><br/>"; 
if(checkForTag(response.getElementsByTagName('image')[0])) 

 var _url = response.getElementsByTagName('url')[0].firstChild.data; 
 _logo += "<img src='" + _url + "' border='0'><br/>" 

document.getElementById('logo').innerHTML = _logo; 


  我们不仅必须检查每个图像以显示它,当遍历馈送中所有的项时我们还需要对之进行检查。因为如果存在一个图像,那么所有另外的标题和链接结点索引都将无法正常工作。因此,当发现图像标签时,我们应该通过在每一次遍历中增加索引值(+1)来调整标题和链接结点的索引:

复制代码 代码如下:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/a939c1c66acd53a94d597b059db84789.html