php解析rss第一条记录,用PHP解析RSS / Atom提要的最佳方法

小编典典

我一直使用PHP内置的SimpleXML函数来解析XML文档。它是目前为数不多的具有直观结构的通用解析器之一,这使得为RSS提要等特定内容构建有意义的类非常容易。此外,它将检测XML警告和错误,找到任何内容后,您可以简单地通过HTML Tidy(如ceejayoz所述)之类的源来运行源以对其进行清理并再次尝试。

考虑一下使用SimpleXML的非常粗糙,简单的类:

class BlogPost

{

var $date;

var $ts;

var $link;

var $title;

var $text;

}

class BlogFeed

{

var $posts = array();

function __construct($file_or_url)

{

$file_or_url = $this->resolveFile($file_or_url);

if (!($x = simplexml_load_file($file_or_url)))

return;

foreach ($x->channel->item as $item)

{

$post = new BlogPost();

$post->date = (string) $item->pubDate;

$post->ts = strtotime($item->pubDate);

$post->link = (string) $item->link;

$post->title = (string) $item->title;

$post->text = (string) $item->description;

// Create summary as a shortened body and remove images,

// extraneous line breaks, etc.

$post->summary = $this->summarizeText($post->text);

$this->posts[] = $post;

}

}

private function resolveFile($file_or_url) {

if (!preg_match('|^https?:|', $file_or_url))

$feed_uri = $_SERVER['DOCUMENT_ROOT'] .'/shared/xml/'. $file_or_url;

else

$feed_uri = $file_or_url;

return $feed_uri;

}

private function summarizeText($summary) {

$summary = strip_tags($summary);

// Truncate summary line to 100 characters

$max_len = 100;

if (strlen($summary) > $max_len)

$summary = substr($summary, 0, $max_len) . '...';

return $summary;

}

}

2020-05-26