`
baby69yy2000
  • 浏览: 187662 次
  • 性别: Icon_minigender_1
  • 来自: 自己输入城市...
社区版块
存档分类
最新评论

[转]MagpieRSS解析程序及乱码解决

    博客分类:
  • PHP
阅读更多
http://www.niutian365.com/blog/article.asp?id=153

最近在网上转,发现了一个用PHP写的解析RSS的好工具——MagpieRSS,它支持绝大部分的RSS调用,而且支持UTF-8编码,不过最近有些人说是用的时候出现乱码,下面我就给大家简单的说一下。可以说,MagepieRSS的使用是很简单的,在程序的README和INSTALL里面都有详细的使用说明。具体代码如下:

require_once(rss_fetch.inc);
$url = $_GET['url'];
$rss = fetch_rss( $url );

echo "Channel Title: " . $rss->channel['title'] . "<p>";
echo "<ul>";
foreach ($rss->items as $item) {
  $href = $item['link'];
  $title = $item['title'];
  echo "<li><a href=$href>$title</a></li>";
}
echo "</ul>";

可能有些人在打开中文的调用时是空白的,什么都不显示,这主要是编码的问题,你可以在上面的程序的最上面加入下面的一句:

define('MAGPIE_OUTPUT_ENCODING', 'UTF-8');//UTF-8格式

但是这样加了之后,很多人会看到乱码,这很可能是你的浏览器的默认编码不对,你可以手动选择UTF-8编码就可以了,你也可以在显示这些内容的页面定义显示的编码:


<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

这样的话,只要你的IE浏览器编码设置为自动选择的时候就可以正常显示了。
而很多时候我们想用GB2312,那我们可以用PHP里面的一个转化函数(mb_convert_encoding或iconv)来实现UTF-8到GB2312的转化。下面是mb_convert_encoding的实例:

mb_convert_encoding( $rss->channel['title'], 'GB2312', 'UTF-8' );

不过在用mb_convert_encoding()函数的时候,别忘了在php.ini里面把extension=php_mbstring.dll前面的分号去掉,把mbstring扩展加近来。

MagpieRSS是一个很好的开源的程序,对于我们这些经常制作网站的人来说,是相当好用的一个工具,希望大家喜欢。
来源:http://blog.fesite.com/read.php?24

MagpieRSS vs LastRSS : comparison of PHP RSS parsers
http://frenchfragfactory.net/ozh/archives/2004/11/10/magpierss-vs-lastrss-comparison-of-php-rss-parsers/


引用
MAGPIERSS 的 Cookbook
MAGPIERSS 的中文文档比较少。在使用过程中把简单的Cookbook翻译了一下,其实很多人这个不翻译都可以看懂。但是很多人似乎不那么喜欢看文档,而喜欢去看例子;学看文档吧,可以解决很多问题。 如果你在 MAGPIERSS 的使用中,遇到错误,应该第一个检查的是你的RSS源 是否正确。

原文来自于 八小时外: http://oo8h.com/news_589.html
@encode utf8

MAGPIERSS RECIPES:  Cooking with Corbies

       "Four and twenty blackbirds baked in a pie."

1. LIMIT THE NUMBER OF HEADLINES(AKA ITEMS) RETURNED.
限制返回条目数

PROBLEM:
问题

You want to display the 10 (or 3) most recent headlines, but the RSS feed
contains 15.
如果你打算显示10条或3条 内容,但是 RSS 的 Feed 数据返回是15条

SOLUTION:
解决方案

$num_items = 10;
$rss = fetch_rss($url);

$items = array_slice($rss->items, 0, $num_items);

DISCUSSION:
讨论/更进一步的解决方法

Rather then trying to limit the number of items Magpie parses, a much simpler,
and more flexible approach is to take a "slice" of the array of items.  And
array_slice() is smart enough to do the right thing if the feed has less items
then $num_items.
有一个方法比使用 限定 $num_items  更好,就是我们可以使用数组切片函数(php内置函数)
array_slice()  可以更方便的实现这个功能,详细内容可以察看php手册:

See: http://www.php.net/array_slice


2. DISPLAY A CUSTOM ERROR MESSAGE IF SOMETHING GOES WRONG
显示定制的错误信息

PROBLEM:
问题

You don't want Magpie's error messages showing up if something goes wrong.
不希望 Magpie 在发生错误的时候显示出来,希望通过自己的方式来处理

SOLUTION:
解决方案

# Magpie throws USER_WARNINGS only
# so you can cloak these, by only showing ERRORs
# 关闭错误显示
error_reporting(E_ERROR);

# check the return value of fetch_rss()
# 获取返回值
$rss = fetch_rss($url);

if ( $rss ) {
...display rss feed...
正常处理
}
else {
//错误信息
echo "An error occured!  " .
    "Consider donating more $$$ for restoration of services." .
"
Error Message: " . magpie_error();
}

DISCUSSION:
讨论/更进一步的解决方法

MagpieRSS triggers a warning in a number of circumstances.  The 2 most common
circumstances are:  if the specified RSS file isn't properly formed (usually
because it includes illegal HTML), or if Magpie can't download the remote RSS
file, and there is no cached version. 
通常有两种情况下会触发错误,一个是获取的内容格式不对,另外一个是
不能连接远程主机且没有本地缓存版本。

If you don't want your users to see these warnings change your error_reporting
settings to only display ERRORs.  Another option is to turn off display_error,
so that WARNINGs, and NOTICEs still go to the error_log but not to the webpages.
若不希望或不需要显示错误信息,那么可以直接关闭错误信息。

You can do this with:
关闭错误信息显示的方法:

ini_set('display_errors', 0);

See: http://www.php.net/error_reporting,
   http://www.php.net/ini_set,
http://www.php.net/manual/en/ref.errorfunc.php

3. GENERATE A NEW RSS FEED
生成一个新的RSS Feed

PROBLEM:
问题

Create an RSS feed for other people to use.
创建RSS Feed 供其他人使用

SOLUTION:
解决方案

Use Useful Inc's RSSWriter (http://usefulinc.com/rss/rsswriter/)
推荐使用 RSSWriter

DISCUSSION:
讨论/更进一步的解决方法

An example of turning a Magpie parsed RSS object back into an RSS file is forth
coming.  In the meantime RSSWriter has great documentation.
即将推出一个通过 Magpie parsed RSS 对象 重新写回 RSS 文件的例子。
RSSWriter 拥有一份很棒的文档资料。

4. DISPLAY HEADLINES MORE RECENT THEN X DATE
显示某个日期之前的历史

PROBLEM:
问题

You only want to display headlines that were published on, or after a certain
date.
希望显示某个确定日期前的历史条目


SOLUTION:
解决方案

require 'rss_utils.inc';

# get all headlines published today
$today = getdate();

# today, 12AM
$date = mktime(0,0,0,$today['mon'], $today['mday'], $today['year']);

$rss = fetch_rss($url);

foreach ( $rss->items as $item ) {
$published = parse_w3cdtf($item['dc']['date']);
if ( $published >= $date ) {
echo "Title: " . $item['title'];
echo "Published: " . date("h:i:s A", $published);
echo "
";
}
}

DISCUSSION:
讨论/更进一步的解决方法

This recipe only works for RSS 1.0 feeds that include the field.
(which is very good RSS style)
这个方法只能运行于RSS1.0的Feeds上,因为它包含了 data 字段。
(是一个非常棒的RSS版本)

parse_w3cdtf is defined in rss_utils.inc, and parses RSS style dates into Unix
epoch seconds. 
parse_w3cdtf 函数是在 rss_utils.inc 中定义的,时间是格式是 Unix 的时间戳。
分享到:
评论

相关推荐

    MagpieRSS-开源

    MagpieRSS 是一个简单的、功能强大的 PHP 接口,用于解析 RSS 1.0(及更早版本)。 Magpie 建立在 PHP 的 XML (expat) 解析器之上,并具有用于存储解析的 RSS 对象的集成缓存,其设计简单且“类似 PHP”使用。

    如何在PHP中使用RSS技术.pdf

    5. **错误处理**: 如果无法获取或解析RSS馈送,MagpieRSS会返回一个WP_Error对象,需要适当地处理这些错误。 MagpieRSS的优势在于它的简单性和灵活性,开发者可以轻松地集成到自己的PHP应用程序中,从而实现RSS馈送...

    PHP解析RSS的方法

    - 引入RSS解析库:可以使用第三方的RSS解析库,如SimplePie或MagpieRSS,这些库能够简化RSS的解析过程,提供丰富的接口和函数。 - 获取RSS源:使用PHP的HTTP客户端函数(如file_get_contents或cURL)获取RSS源。...

    IXNA聚合程序 v0.5.rar

    1.支持RSS多核心切换,默认支持simplepie,magpierss 2.支持 RDF,RSS,ATOM feeds 支持智能识别 3.基于浏览器Web端的前台浏览和后台管理,可在前台编辑,删除,锁定相关新闻 4.支持站点和时间分类,Tags浏览,单独页面...

    20个PHP常用类库

    5. **MagpieRSS** - 开源且功能强大的RSS解析器,尽管描述中提到其功能强大但未验证,实际使用中,MagpieRSS能够处理各种RSS和Atom feed格式,提供灵活的数据访问接口。 6. **SimplePie** - 以其快速性和易用性著称...

    WEBPART实例

    MagpieRSS是一个轻量级的RSS/Atom feed解析器,可以帮助快速集成RSS功能到项目中。 8. **images**:存放网页所需的图像资源,如图标、背景图片等。 9. **js**:JavaScript文件夹,包含了实现网页交互和动态效果的...

    xna.rar_RSS_XNA_atom_opml_聚合

    1.支持RSS多核心切换,默认支持lastrss,simplepie,magpierss 2.支持 RDF,RSS,ATOM feeds 支持智能识别 3.基于浏览器Web端的前台浏览和后台管理,可在前台编辑,删除,锁定相关新闻 4.支持站点和时间分类,Tags浏览,...

    20个PHP常用类库小结

    MagpieRSS – 开源的PHP版RSS解析器,据说功能强大,未验证。 SimplePie – 这是一个非常快速,而且易用的RSS和Atom 解析库。 缩略图生成 phpThumb – 功能很强大,如何强大还是自己去体会吧。 支付 ...

    rss extender-开源

    4. **magpierss-0.72**:这是一个名为MagpieRSS的库,它是PHP的一个流行RSS解析器。它能解析RSS和Atom格式的feed,并将其转换为PHP数组,便于进一步处理和展示。版本号0.72表示这个项目使用的是该库的一个特定稳定...

    20个非常有用的PHP类库 加速php开发

    Open Flash Chart则是一个基于Flash的解决方案,适合需要动态交互图表的场合。 2. RSS解析:MagpieRSS和SimplePie是两个流行的PHP RSS解析器。MagpieRSS开源且功能强大,而SimplePie以其速度和易用性著称,能方便地...

    20个非常有用的PHP类库

    1. **MagpieRSS**:一个用PHP编写的RSS阅读器库,支持RSS 0.9x、RSS 1.0、RSS 2.0及Atom 0.3格式。 2. **SimplePie**:一个简单易用的RSS/Atom解析器,提供了简洁的API来处理RSS和Atom feeds。 #### 图像处理类库 ...

    xna.rar_atom

    国内最好的开源PHP新闻聚合 1.支持RSS多核心切换,默认支持simplepie,magpierss 2.支持 RDF,RSS,ATOM feeds 支持智能识别 3.基于浏览器Web端的前台浏览和后台管理,可在前台编辑,删除,锁定相关新闻

    php 常用类整理

    - **MagpieRSS**:开源的PHP RSS解析器,据称功能强大,可解析RSS feed并提取相关信息。 - **SimplePie**:这是一个快速且易用的RSS和Atom解析库,能高效地处理各种RSS格式的数据。 3. **缩略图生成**: - **...

    易客CRM单机免费版本.zip

    Apache software, MySQL server, PHP, SugarCRM, ADOdb, Smarty, PHPMailer, phpSysinfo, MagpieRSS and others, each licensed under a separate Open Source License. vtiger....

    js拖拽模块

    8. `css`、`magpierss`、`images`和`js`目录可能分别包含了样式文件、RSS解析库、图片资源和额外的JavaScript文件,它们共同协作以实现整个应用的功能。 通过这些技术的综合运用,开发者可以构建出一个高度互动且...

    Halo Zeta stats-开源

    1. **magpierss-0.72**:这可能是一个RSS解析库,用于从bungie.net获取或更新XML日志数据。 2. **CHANGELOG**:记录了项目的更改历史,包括版本升级、修复的错误和添加的新功能,是了解项目演进的重要文档。 3. **...

    Http 1.1 Etag 与 Last-Modified提高php效率

    在 Blog 盛行的今天,一些 Web 应用需要解析大量的 RSS Feed .如何提高效率是个非常重要的问题.在 MagpieRSS 的 Features 中列举了这样的一条: ...

Global site tag (gtag.js) - Google Analytics