PHP   /   423

RSS远程调用的时候如何取得feed源站点的文章全文,又如何控制feed的输出数量。关于这两个问题我做一下解答。

第一,全文输出得看feed源了,若对方提供全文输出,则用一段php代码是可以实现远程的RSS全文显示的。

代码如下:

<?php

$RSSURL = "http://aiwei.us/feed";

$buff = "";
$fp = fopen($RSSURL,"r");
while ( !feof($fp) ) {
$buff .= fgets($fp,4096);
}
fclose($fp);

$parser = xml_parser_create();
xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,1);
xml_parse_into_struct($parser,$buff,$values,$idx);
xml_parser_free($parser);
$channel_title = $values[2]["value"];
echo <<<__HTML__
<html>
<head>
<meta http-equiv='content-type' content='text/html; charset=UTF-8'>
<title>$channel_title</title>
<link rel='stylesheet' type='text/css' id='css' href='style.css样式表文件'>
</head>
<body>

<table border='0'>
<tr>
<td>
<img src='logo.jpg图片地址'>
</td>
<td>
$channel_title
$channel_lastBuildDate<br>
</td>
</tr>
__HTML__;

$in_item = 0;
foreach ($values as $value) {
$tag = $value["tag"];
$type = $value["type"];
$value = $value["value"];

$tag = strtolower($tag);
if ($tag == "item" && $type == "open") {
$in_item = 1;
} else if ($tag == "item" && $type == "close") {
echo <<<EOM
<tr>
<td colspan='2' class='header'width='400'>
<a href="$link">$title</a>
</td>
</tr>
<tr>
<td colspan='2''400'align='right'>
$pubDate
</td>
</tr>
<tr>
<td colspan='2''400'>
$description
</td>
</tr>
<tr>
<td>
&nbsp;
</td>
</tr>
EOM;
$in_item = 0;
}
if ($in_item) {
switch ($tag) {
case "title":
$title = $value;
break;
case "link":
$link = $value;
break;
case "pubDate":
$pubDate = $value;
break;
case "description":
$description = $value;
break;
}
}
}

echo <<< __HTMLEND__
</table>
</body>
</html>
__HTMLEND__;

?>

这段代码靠一个css文件控制其输出格式,具体请仔细参阅代码。

第二,控制feed的输出条数,我提供另一种RSS读取的php代码,本例将RSS读取类先给封装一次,然后用传统的模板格式将其显示出来。

封装的RSS类,文件名设定为 rss.class.php,代码如下:

<?php
class ReadRSS{
var $url;
var $content;
var $values;
function ReadRSS($url){
$this->url=$url;
}
function ReadFile(){
$fp = fopen($this->url,"r");
while ( !feof($fp) ) {
$this->content .= fgets($fp,4096);
}
fclose($fp);
}
function ReadXML(){
$parser = xml_parser_create();//建立xml解析器
xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,1);//忽略由空白字符组成的值
xml_parser_set_option($parser,XML_OPTION_TARGET_ENCODING,'UTF-8');
//设置编码,目前只支持ISO-8859-1、US-ASCII 和 UTF-8,也可以不设置,与目标编码一致
xml_parse_into_struct($parser,$this->content,$this->values);
xml_parser_free($parser);
}
function RSS($n=10){
$this->ReadFile();
$this->ReadXML();
$in_item = 0;
$i=0;
$read=array();
foreach ($this->values as $value) {
$tag = $value["tag"];
$type = $value["type"];
$value = $value["value"];
$tag = strtolower($tag);
if ($tag == "item" && $type == "open") {
$in_item = 1;
} else if ($tag == "item" && $type == "close"){
$read[$i]['link']=$link;
$read[$i]['title']=$title;
if ($pubDate) {
$read[$i]['pubDate']=$pubDate;
}
$read[$i]['description']=$description;
$in_item = 0;
$i++;
if ($i>=$n) {
break;
}
}
if ($in_item) {
switch ($tag) {
case "title":
$title = $value;
break;
case "link":
$link = $value;
break;
case "pubDate":
$pubDate = $value;
break;
case "description":
$description = $value;
break;
}
}
}
return $read;
}
}
?>

模板代码如下:

<html>
<head>
<meta http-equiv='content-type' content='text/html; charset=UTF-8'>
<title>圣郡网络-天津网站制作-天津网页设计-天津网站设计</title>
</head>
<body>
<?php
include_once('rssclass/rss.class.php');
$url="http://aiwei.us/feed";
$rss=new ReadRSS($url);
$values=$rss->RSS(10);
# 10 可以改成别的数字,比如5,这是读取feed的条数
foreach ($values as $value) {
echo "<div><a href={$value['link']}>{$value['title']}</a></div>";
}
?>
</body>
</html>

这个模板调用了刚才建立的位于 rssclass 这个文件夹下的 rss.class.php RSS类。

网络发现者(aiwei.us)是梁道科技旗下以企业建站,微信开发,视觉设计为主要服务项目的互联网品牌。

我们为企业提供各类互联网平台项目的咨询顾问服务。依靠丰富的互联网实践经验,我们为企业从项目可行性分析,执行策略及方案等方方面面提供合理化建议。