欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

基于PHP和AJAX创建RSS聚合器

程序员文章站 2024-02-06 15:58:28
...
  想象使用一个简单HTML文件来把一个请求发送到一个服务器端脚本,收到一个基于该请求的定制xml(标准化越来越近了)文件,然后把它显示给用户而几乎不需要刷新浏览器!本文作者将同你一起探讨怎样在普通Web应用程序中联合php(做为现在的主流开发语言)和ajax(动态网站静态化)技术来创建实时的数据传输而不需要进行浏览器刷新。

  尽管本文所使用的是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,这意味着该目录可读写。当被设置为可读的时,该目录就可以在以后被存取;而当被设置为可写的时,就可以把该馈送的一个副本写向本地服务器上的目录: