Php RSS

RSS 聚合最近非常流行,因此至少对 RSS 及其工作方式有所了解是一名 PHP 开发人员的迫切需要。本文介绍了 RSS 基础知识、RSS 众多用途中的一些用途、如何使用 PHP 从数据库创建 RSS 提要,以及如何使用 XML_RSS 模块读取现有 RSS 提要并将其转换为 HTML。

什么?您没听说过 RSS?

RSS 聚合是最常见的 TLA(三字母缩写词)之一。RSS 作为缩写词具有多种含义,但是当前的标准含义是:真正简单的聚合。这是对这一极为常见、极为有用的标准的最新解释。

回想 Internet 早期,一个称为 Pointcast 的软件将数据 推送 到用户计算机上的屏幕保护应用程序上,来提供各种新闻更新。最终,浏览器开发商(例如 Netscape 和 Microsoft)创建了类似这种非常流行的服务的东西。Netscape 开发了接受程度最高的变体,此变体后来被发布到 Internet 开发环境中,并最终发展成了现在的 RSS。

RSS 将最近更新的信息分发给许多接收者,非常类似广播系统。如果您拥有大量的用户,那么 RSS 提要就像灯塔一样吸引您的用户回来查看更新。因为 RSS 提供了一种急需的维持用户注意力的方法,所以 RSS 越来越流行并为越来越多的内容提供者所使用就没什么好奇怪的了。

当您看到图 1 中所示的图标时,您就可以确定此站点提供 RSS 提要。事实上,此图标是表示一个站点针对内容更新提供 RSS 服务的标准图标。图标中的曲线代表无线电波,象征着 RSS 提要的广播本质。

图 1. RSS 标准图标

RSS 标准图标

RSS 应用程序

相当多的应用程序(其中许多是免费的)能够阅读 RSS 提要,其中许多允许用户聚合提要。聚合特性甚至允许用户进一步改进所收到内容的数量和性质。每种阅读器都拥有不同的特性,旨在帮助管理来自 Internet 的难以置信的信息量。

Mozilla 公司的 Thunderbird 和 Firefox、Microsoft 公司的 Internet Explorer 7 和即将推出的 Office 版本以及许多其他产品是最接近您的搜索引擎的一些例子。在这么多种获取和阅读提要的方法中,您应该可以找到适合您的方法。当然,除非您是一位眼光挑剔的软件开发人员,希望编写您自己的程序!本文马上就要对此进行介绍!

我如何使用 RSS?

您的站点包含您希望公布给大众的内容,这是您将内容发布到 Internet 的首要原因。如果很多用户知道您的站点和内容,他们会每天回来查看更新吗?恐怕不会。在您经常访问的站点中,您会每天访问它们来检查更新吗?恐怕不会。这就是 RSS 产生的原因。

对于您的用户来说,RSS 可能是一个巨大的获益,当他们认为您的站点上列出的观点或新闻有价值时尤其如此。用户无需频繁返回您的站点,即可准确了解您进行的更新或添加的内容,从而使用户能够节省时间和精力,同时也不会错过任何更新!

如果您整合 RSS 提要来支持您自己站点的内容聚合,那么生成内容不是问题。如果您从提要中拉出数据并将其包括在您的站点中,那么只需很少的时间投资就能为您的站点添加大量的内容。

我个人喜欢使用 RSS 来收集来自不同站点(例如 Craigslist (www.craigslist.org))的经过过滤的结果的提要。我使用的一个小技巧是将其用于购买二手电子产品。您可以设置一个站点搜索,然后 RSS 结果页面。如果您设置了一个搜索某个价格范围内的照相机的提要,那么当有人发布在您定的价格范围内的照相机销售信息时,您就会在您的 RSS 提要中看到它!如果您想成为第一个竞价者,这会为您提供巨大的优势!

RSS 2.0 标准格式

RSS 标准定义和包含提要的内容。这些提要可能来自任何定义为 Internet 文档的数据源,实际上是由链接清单及其描述构成的。

请查看清单 1 中的 RSS 格式,它使用了一个来自 NASA "Liftoff News" 提要的示例文档。

清单 1. 一个示例 RSS 2.0 文档
<?xml version="1.0"?>
<rss version="2.0"><channel><title>Liftoff News</title><link>http://liftoff.msfc.nasa.gov/</link><description>Liftoff to Space Exploration.</description><language>en-us</language><pubDate>Tue, 10 Jun 2003 04:00:00 GMT</pubDate><lastBuildDate>Tue, 10 Jun 2003 09:41:01 GMT</lastBuildDate><docs>http://blogs.law.harvard.edu/tech/rss</docs><generator>Weblog Editor 2.0</generator><managingEditor>editor@example.com</managingEditor><webMaster>webmaster@example.com</webMaster><item><title>Star City</title><link>http://liftoff.msfc.nasa.gov/news/2003/news-starcity.asp</link><description>How do Americans get ready to work with Russians aboard theInternational Space Station? They take a crash course in culture, languageand protocol at Russia's Star City.</description><pubDate>Tue, 03 Jun 2003 09:39:21 GMT</pubDate><guid>http://liftoff.msfc.nasa.gov/2003/06/03.html#item573</guid></item><item><title>Space Exploration</title><link>http://liftoff.msfc.nasa.gov/</link><description>Sky watchers in Europe, Asia, and parts of Alaska and Canadawill experience a partial eclipse of the Sun on Saturday, May 31st.</description><pubDate>Fri, 30 May 2003 11:06:42 GMT</pubDate><guid>http://liftoff.msfc.nasa.gov/2003/05/30.html#item572</guid></item><item><title>The Engine That Does More</title><link>http://liftoff.msfc.nasa.gov/news/2003/news-VASIMR.asp</link><description>Before man travels to Mars, NASA hopes to design new enginesthat will let us fly through the Solar System more quickly.  The proposedVASIMR engine would do that.</description><pubDate>Tue, 27 May 2003 08:37:32 GMT</pubDate><guid>http://liftoff.msfc.nasa.gov/2003/05/27.html#item571</guid></item><item><title>Astronauts' Dirty Laundry</title><link>http://liftoff.msfc.nasa.gov/news/2003/news-laundry.asp</link><description>Compared to earlier spacecraft, the International SpaceStation has many luxuries, but laundry facilities are not one of them.Instead, astronauts have other options.</description><pubDate>Tue, 20 May 2003 08:56:02 GMT</pubDate><guid>http://liftoff.msfc.nasa.gov/2003/05/20.html#item570</guid></item></channel>
</rss>

XML 格式的文档的第一个子对象是 <channel>的定义。通道就是提要自身及其相关信息。许多 RSS 提要具有一个通道对象,但是如果您希望使用任意过滤器分离提要,您就可以使用多个通道。通道对象需要 titlelink 和 description 对象。它们定义了提要的基本描述信息。可选对象是:languagecopyrightmanagingEditorwebMasterpubDatelastBuildDatecategory,generatordocscloudttlimageratingtextInputskipHours 和 skipDays

通道能够包含的项目数量不受限制。ITEM 元素的全部元素都是可选的,然而,至少需要一个标题或描述来验证元素。这些元素是:titlelinkdescriptionauthorcategorycommentsenclosureguidepubDatesource

在什么地方使用 PHP?

本文假设您已经具有一些使用 PHP 的经验,并能够使用函数来传递变量并返回结果。PHP 拥有许多能够迅速处理应用程序内外的 XML 的函数。

首先您会希望从本地存储的数据源(一个内容管理系统、博客或任何符合 Internet 文档格式的内容)获取信息,并将其作为提要发布给您的用户。您需要获取此数据、将其格式化为 RSS 对象,然后将其提供给需要它的请求。

如果您的站点的某些部分需要额外的内容,您无需满世界地为您的站点寻找额外的内容文档,而是可以利用已经准备好的大量 RSS 提要的优势。您可使用 XML_RSS 来为您的站点获取和处理这些提要。

XML_RSS() 是一个 PEAR 软件包,用于帮助您更轻松地完成更复杂的任务 —— 解释 XML RSS 文件。PEAR 是 PHP 函数的开源库,它可免费使用并且其开发工作仍在继续。您可能已经在安装 PHP 时安装了 PEAR,但是您可能仍需为本文安装它(请参阅 参考资料 来获得链接)。XML_RSS() 仅仅是一个函数,它在已知 RSS 提要的位置时,将此提要的 XML 加载到一个阵列,从而为其在您的 PHP 应用程序中的使用做好准备。此阵列的元素将具有根据被读取的 RSS 文件的元素和属性命名的键。

提取数据

既然您了解了什么是 RSS 数据格式,您就可以查看您希望发布的数据,并将其转换为 RSS 格式。幸好 PHP 拥有一些功能强大的 RSS 和 XML 处理特性,这些特性可加速您的开发。和许多通用的 Web 标准一样,PHP 拥有许多功能强大的函数,可在此应用程序中使用它们。

把消息传出去

您创建了一个供别人阅读的提要,但是如何让别人知道它的存在呢?您可以通过将以下标签添加到主页顶部的方式,通知 Mozilla Firefox 和 Microsoft Internet Explorer 以及其他阅读器关于您的提要的信息:

<link rel="alternate" type="application/rss+xml" href="URL_FOR_YOUR_FEED" title="FEED_TITLE" />

请确保使用您的 URL 和提要标题更新此标签。

在本文中,您将使用 "" 将数据从数据库中拉出,并将其格式化为 RSS 提要。您将对它进行设置,以便无论何时调用此 RSS 提要,它都能查找您的数据集中新增的内容,并为请求者返回新的 RSS。

提要可来自您的站点中的任何数据源,但是最终您需要确保其中包含足够的数据,以便接收 RSS 提要的人能够使用此数据。至少需要 URL 名称和描述。您的站点上发布的任何数据均可被转换为提要。

您将使用 PHP 来连接 Web 应用程序数据库、拉出更新的信息,并将其格式化为 XML RSS 文档。

提取数据的基本函数

假设您选择了一个数据库,您用正常方式创建一个连接,并生成一个页面以适合用户阅读的方式显示 XML 的布局。

将此页面发送给请求者

既然您已经在您自己的代码中很好地格式化了这些数据,您就需要确保正确地发布这些数据,以便当用户将您的 URL 输入阅读器时,能够获得他们需要的 XML RSS 提要。(请参阅清单 2)。

清单 2. 完整的 RSS.php
<?php$database =  "nameofthedatabase";
$dbconnect = mysql_pconnect(localhost, dbuser, dbpassword);
mysql_select_db($database, $dbconnect);
$query = "select link, headline, description from `headlines` limit 15";
$result = mysql_query($query, $dbconnect);while ($line = mysql_fetch_assoc($result)){$return[] = $line;}$now = date("D, d M Y H:i:s T");$output = "<?xml version=\"1.0\"?><rss version=\"2.0\"><channel><title>Our Demo RSS</title><link>http://www.tracypeterson.com/RSS/RSS.php</link><description>A Test RSS</description><language>en-us</language><pubDate>$now</pubDate><lastBuildDate>$now</lastBuildDate><docs>http://someurl.com</docs><managingEditor>you@youremail.com</managingEditor><webMaster>you@youremail.com</webMaster>";foreach ($return as $line)
{$output .= "<item><title>".htmlentities($line['headline'])."</title><link>".htmlentities($line['link'])."</link><description>".htmlentities(strip_tags($line['description']))."</description></item>";
}
$output .= "</channel></rss>";
echo $output;
?>

因此,让我们逐步实现此目的。首先,您设置一个到本地数据库的数据库连接对象。在此数据库中有一个具有包含标题、链接和描述字段的记录的表,您将请求把这些内容放入您的 XML 响应中。您使用 MYSQL_QUERY() 对您的表执行 SQL 查询,然后您使用 WHILE 重新格式化结果来预排将得到的对象,并将数据重新格式化为新的简单阵列。

当新的阵列准备好之后,您就可以开始使用 $output 变量构建 XML 文件,通过为每个返回的响应遍历一次 $line 阵列的方式附加新的元素。这不应该占用太多的时间,因为在您的 SQL 语句中,您将响应限制设为 15。为了将此代码片段用作起始构建块,您需要替换虚拟链接、数据库名称和登录信息来反映您自己的环境。

此脚本被执行之后,您会得到一个非常干净的 RSS 文件输出,类似于清单 3。

清单 3. RSS.php 输出
<?xml version="1.0"?><rss version="0.97"><channel><title>Our Demo RSS</title><link>http://www.tracypeterson.com/RSS/RSS.php</link><description>A Test RSS</description><language>en-us</language><pubDate>Mon, 13 Nov 2006 22:46:06 PST</pubDate><lastBuildDate>Mon, 13 Nov 2006 22:46:06 PST</lastBuildDate><docs>http://someurl.com</docs><managingEditor>you@youremail.com</managingEditor><webMaster>you@youremail.com</webMaster><item rdf:about="http://www.tracypeterson.com/"><title>This is Tracy's Web Page!</title><link>http://www.tracypeterson.com/</link><description>This is a demonstration of how to get PHP to work for 
your RSS feed.</description></item><item rdf:about="http://www.tracypeterson.com"><title>This is Tracy's site again!</title><link>http://www.tracypeterson.com</link><description>Again, this is a demonstration of the power of PHP 
coupled with RSS.</description></item></channel></rss>

现在任何人都可以通过输入到 RSS.php 的 URL,加载包含您的全部更新的新 RSS 文件了!

导入数据

您将使用 XML_RSS() 函数将 RSS 提要导入到 PHP 脚本中,以便使其像任何阵列一样准备就绪。就像对数据库的查询一样,您将拥有一个准备好在需要时即可使用的阵列。

在本案例中,您将连接到 RSS.php 并加载一个副本,然后在无序清单中显示它(请参阅清单 4)。

清单 4. showfeed.php
<?php
require_once "XML/RSS.php";$rss =& new XML_RSS("http://www.tracypeterson.com/RSS/RSS.php");
$rss->parse();echo "<h1>Headlines from <a
href=\"http://www.tracypeterson.com/RSS/RSS.php\">Tracy Peterson's Site</a></h1>\n"; echo "<ul>\n";foreach ($rss->getItems() as $item) {echo "<li><a href=\"" . $item['link'] . "\">" . $item['title'] . 
"</a></li>\n";
}
echo "</ul>\n";
?>

清单 4 中显示的示例直接来自 PEAR 手册,我使用它是因为它非常简练。让我们逐行查看它来看看它是否仅使用了 XML_RSS() 类、构造器和parse()提供的几个方法。解析操作仅将输出作为我之前提到的阵列呈现。

首先,您使用 require_once() 函数来从 PEAR 安装中加载 RSS.php 文件。如果正确设置了 PEAR 并安装了 XML_RSS ,那么它将正确地找到此引用文件,然后 XML_RSS 对象就准备好供您使用了。接下来,您创建一个名为 $rss 的新对象,此对象是将提要的 URL 传递到您的 XML_RSS构造器的结果。

您仅使用 parse() 方法来返回 RSS 提要中的值。第一个 echo 行开始设置用于使 RSS 提要能够被用户阅读的基本 HTML。在本案例中,您声明此无序清单是来自我的站点的标题的清单!

foreach() 语句通过将 getItems() 方法用作新的阵列 $items,从解析的提要中获取每个项目元素。每个阵列元素根据包含它们的实际 XML 标签命名。在本案例中,您仅使用了链接和标题,一会您将添加对它们的描述。每处理一次 foreach 循环,就会移动到下一个元素,直到整个 RSS 提要以此方式全部显示出来。

现在,将描述添加到每个显示的结果中。

将清单 5 中显示的粗体代码行添加到 foreach() 循环中。

清单 5. 添加描述
foreach ($rss->getItems() as $item) {echo "<li><a href=\"" . $item['link'] . "\">" . $item['title'] . 
"</a></li><br>";echo $item['description'] . "<br><br>\n"; }

您只需向无序清单中添加一个换行符和描述行。以下是 showfeed.php 输出的一个示例。

图 2. showfeed.php 输出

showfeed.php 输出

结束语

总的说来,Internet 才刚刚开始意识到它拥有的难以置信的潜力。通过 RSS 提供的提高了的可访问性,您现在能够简化使您的用户保持同步的过程。您能够及时将更新通知到用户,而无需用户花费时间来检查您是否添加了新信息。

您刚刚探索了 RSS 格式的标准,以及如何创建提要、接收提要并将其转换为可用的 HTML。现在您已经准备好在更大型的应用程序中使用这些技能了。

转载于:https://www.cnblogs.com/aiqingqing/p/4537467.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/398081.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分布式配置管理平台Disconf

2019独角兽企业重金招聘Python工程师标准>>> 摘要 为了更好的解决分布式环境下多台服务实例的配置统一管理问题&#xff0c;本文提出了一套完整的分布式配置管理解决方案&#xff08;简称为disconf[4]&#xff0c;下同&#xff09;。首先&#xff0c;实现了同构系统…

1.ELF之Elf Header

1.ELF的三个文件头 每个ELF文件有三个文件头&#xff0c;用来索引信息。 (1).EH ELF file Header 可在此读到PH&#xff0c;SH在文件中的offset。 (2).PH Program Header 与load program有关的索引&#xff0c;.o的PH为空。 (3).SH Section Header 组成此文件的所有secti…

java路径1.7_Java环境配置原理详解1.Jdk安装目录文件说明:一般jdk安装目录及路径 Javajdk1.7.0_79lib,里面主要包含以下文件夹。bin...

Java环境配置原理详解1.Jdk安装目录文件说明&#xff1a;一般jdk安装目录及路径 Javajdk1.7.0_79lib&#xff0c;里面主要包含以下文件夹。bin&#xff1a;主要存放的是java工具中常用命令如&#xff1a;java&#xff0c;javac等。db&#xff1a;安装java db的路径。include&am…

2018年5月5日论文阅读

国外精读&#xff01;title&#xff08;27&#xff09;&#xff1a;We don’t need no bounding-boxes: Training object class detectors using only human verification&#xff08;我们不需要任何边界框&#xff1a;只使用人工验证来训练对象类别检测器&#xff09;---20170…

sql2005主从数据库同步配置

网站规模到了一定程度之后&#xff0c;该分的也分了&#xff0c;该优化的也做了优化&#xff0c;但是还是不能满足业务上对性能的要求&#xff1b;这时候我们可以考虑使用主从库。主从库是两台服务器上的两个数据库&#xff0c;主库以最快的速度做增删改操作最新数据的查询操作…

InceptionV2----Batch Normalization层

一、BN层的操作 1.BN层的操作位置&#xff1a;在非线性映射之前&#xff0c;目的是为了减少梯度消失和梯度爆炸。 1.对输入的x做归一化 2.增加2个参数&#xff0c;提高模型表达能力 3.理想情况下E和Var应该是针对整个数据集的&#xff0c;但显然这是不现实的。因此&#xff0c;…

前端技术之_CSS详解第五天

前端技术之_CSS详解第五天 一、行高和字号 1.1 行高 CSS中&#xff0c;所有的行&#xff0c;都有行高。盒模型的padding&#xff0c;绝对不是直接作用在文字上的&#xff0c;而是作用在“行”上的。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&qu…

pxe装机dhcp获取不到_关于PXE服务器环境搭建流程中遇到的问题及解决方法

环境准备中遇到的问题首先需要将系统镜像挂载到 /mnt&#xff1a;#mount /dev/sdd2 /mnt/usb_disk 将U盘挂载#cp rhel-server-7.6-x86_64-dvd.iso /home 系统镜像拷到本地#mount -o loop rhel-server-7.6-x86_64-dvd.iso /mnt问题&#xff1a;ifconfig命令未找到解决&#xff1…

一小时包教会 —— webpack 入门指南

什么是 webpack&#xff1f; webpack是近期最火的一款模块加载器兼打包工具&#xff0c;它能把各种资源&#xff0c;例如JS&#xff08;含JSX&#xff09;、coffee、样式&#xff08;含less/sass&#xff09;、图片等都作为模块来使用和处理。 我们可以直接使用 require(XXX) 的…

java 简单图片浏览器_Java实现简单的图片浏览器

第一次写博客&#xff0c;不喜勿喷。最近一个小师弟问我怎么用Java做图片浏览器&#xff0c;感觉好久没玩Java了&#xff0c;就自己动手做了一下。学校的教程是用Swing来做界面的&#xff0c;所以这里也用这个来讲。首先要做个大概的界面出来&#xff0c;eclipse有一个很好用的…

60. Spring Boot写后感【从零开始学Spring Boot】

从2016年4月15日到2016年7月20日经历长达3个月的时间&#xff0c;【从零开始学习Spring Boot】系列就要告一段落了。国内的各种资源都比较乱或者是copy 来copy去的&#xff0c;错了也不加以修正下&#xff0c;导致通过百度找到的资源可能都是错误的&#xff0c;正是由于这么一种…

五角星

import turtle turtle.setup(600,400,0,0) turtle.bgcolor(red) turtle.color(yellow) turtle.fillcolor(yellow) turtle.begin_fill() for i in range(5):turtle.forward(200)turtle.right(144) turtle.end_fill()turtle.done()转载于:https://www.cnblogs.com/Paris-YY/p/900…

java customerservlet_顾客管理系统java+servlet

首先我先搭好网页的框架先写一个登陆的html&#xff0c;名字是login.html1)在js中跳转页面的方法&#xff0c;我这里用的是get提交&#xff0c;只传递了一个name。function mylogin() {var usernamedocument.getElementById("name").value;window.location.href"…

mysql给root开启远程访问权限,修改root密码

1.MySql-Server 出于安全方面考虑只允许本机(localhost, 127.0.0.1)来连接访问. 这对于 Web-Server 与 MySql-Server 都在同一台服务器上的网站架构来说是没有问题的. 但随着网站流量的增加, 后期服务器架构可能会将 Web-Server 与 MySql-Server 分别放在独立的服务器上, 以便得…

Qt_Window@Qt Command Prompt从命令行创建工程

#include <QApplication> #include <QLabel>int main(int argc, char *argv[]) {QApplication app(argc, argv);QLabel *label new QLabel("Hello Qt!");label->show();return app.exec(); }第1 行和第2 行包含了两个类的定义&#xff1a;QApplicat…

linux中的守护进程

一、守护进程守护进程&#xff0c;也叫精灵进程&#xff08;daemon&#xff09;它和普通后台进程的区别在于以下三点1、守护进程自成会话&#xff0c;而普通后台进程则不一定2、守护进程不受终端的控制3、守护进程就是后台进程&#xff0c;而后台进程不同于守护进程用ps axj命令…

mysql主从复制 lvs+ keepalived

2019独角兽企业重金招聘Python工程师标准>>> 一、环境 Master&#xff08;主机A&#xff09;&#xff1a;192.168.1.1 Slave&#xff08;主机B&#xff09; &#xff1a;192.168.1.2 W-VIP&#xff08;写入&#xff09; &#xff1a;192.168.1.3 R-VIP&#xff…

php 逗号编码,php有几种编码

当前 mbstring 模块支持以下的字符编码。这些字符编码中的任意一个都能指定到 mbstring 函数中的 encoding 参数。该 PHP 扩展支持的字符编码有以下几种&#xff1a;UCS-4*UCS-4BE (推荐学习&#xff1a;PHP视频教程)UCS-4LE*UCS-2UCS-2BEUCS-2LEUTF-32*UTF-32BE*UTF-32LE*UTF-…

jmeter命令行运行-分布式测试

秒秒开心jmeter命令行运行-分布式测试 上一篇文章我们说到了jmeter命令行运行但是是单节点下的&#xff0c; jmeter底层用java开发&#xff0c;耗内存、cpu&#xff0c;如果项目要求大并发去压测服务端的话&#xff0c;jmeter单节点难以完成大并发的请求&#xff0c;这时就需要…

ambari 自定义组件安装

借鉴&#xff1a;http://www.ibm.com/developerworks/cn/opensource/os-cn-bigdata-ambari3/index.htmlAmbari 在启动的时候&#xff0c;会扫描 resource 目录下 Stack 下面的 service 配置。也就是每个 Service 的 metainfo.xml&#xff0c;同时会将这些配置信息放在自己的数据…