Zend Framework 常用模块(2)

4月 17, 2008 – 10:59 下午

1.Zend_Feed 这个玩意儿是个好东西!现在RSS流行,用他解析feed事半功倍
以下摘自API文档:
Zend_Feed提供了处理的 RSS 和 Atom Feed的功能。它提供了一套自然的方法用于 访问Feed元素、属性、和条目属性。 除此之外Zend_Feed还扩展提供了同样简单的方法 用于修改feed和条目的结构,并将结果转化成XML格式。不久的将来这些扩展可能会被 Atom Publishig Protocol(AtomPP)所支持。 Zend_Feed由一个Zend_Feed基类、一个Zend_Feed_Abstract抽象类以及一个用于表示Feed和条目的Zend_Feed_Entry_Abstract基类组成。这些类封装了 RSS 和 Atom 的feed和条目特性的,提供了一套自然的方法使他们用起来变得异常简单。
再来看一个例子:

  1. <?php
  2. require_once 'Zend/Feed.php'; // 取得最新的 Slashdot 头条新闻
  3. try {
  4. $slashdotRss = Zend_Feed::import('http://rss.slashdot.org/Slashdot/slashdot');
  5. } catch (Zend_Feed_Exception $e)
  6.  { // feed 导入失败
  7. echo "Exception caught importing feed: {$e->getMessage()}\n";
  8.  exit;
  9. }// 初始化保存 channel 数据的数组
  10. $channel = array( 'title' => $slashdotRss->title(), '
  11. link' => $slashdotRss->link(),
  12.  'description' => $slashdotRss->description(),
  13. 'items' => array() );
  14. // 循环获得channel的item并存储到相关数组中
  15. foreach ($slashdotRss as $item) {
  16. $channel['items'][] = array( 'title' => $item->title(),
  17.  'link' => $item->link(),
  18.  'description' => $item->description());
  19. }?>

Zend_Feed导入Feed的方法总结

  1. <?php
  2. $feed = Zend_Feed::import('http://feeds.example.com/feedName');?> // 从文本文件导入一个feed $feedFromFile = Zend_Feed::importFile('feed.xml'); // 从PHP字符串变量导入一个feed
  3. $feedFromPHP = Zend_Feed::importString($feedString);

以上的代码根据导入的feed的格式不同返回的值也不一样,如果是atom则返回Zend_Feed_Atom对象如果是RSS则返回一个Zend_Feed_Rss对象,如果feed不合法,则抛出一个Zend_Feed_Exception异常。 以上是通过直接用RSS进行解析,也可以直接处理html中的feed。可以直接用页面的url做参数返回一个feed.其原理是通过查找html标签中的link标签来实现的。

  1. <?php
  2. $feedArray = Zend_Feed::findFeeds('http://www.example.com/news.html');
  3. ?>

下面介绍一下Rss Feed对像怎么使用.
1.访问channel属性

  1. <?php
  2. $feedArray = Zend_Feed::findFeeds('http://www.example.com/news.html'); //取得一个feed echo
  3. $channel->title(); //输出channel的属性
  4. foreach ($channel as $item){//取得item的属性. 
  5. echo $item->title() . "\n"; }
  6.  ?>

2.atom feed的用法与rss feed差不多,不同的只有在于atom协议结构本身

  1. <?php
  2. $feed = new Zend_Feed_Atom('http://atom.example.com/feed/');
  3.  echo 'The feed contains ' . $feed->count() . ' entries.' . "\n\n";
  4. foreach ($feed as $entry) {
  5.  echo '标题: ' . $entry->title() . "\n";
  6.  echo '摘要: ' . $entry->summary() . "\n\n";
  7. }
  8. ?>

Feed的条目的修改

  1. <?php
  2. $feed = new Zend_Feed_Atom('http://atom.example.com/feed/1');
  3. $entry = $feed->current();
  4. $entry->title = 'This is a new title';
  5. $entry->author->email = 'my_email@example.com';
  6. echo $entry->saveXML();
  7. ?>

这段代码将输出一个新条目完整(包括 声明)的包含所有必要命名空间的XML格式。 用自定义的命名空间创建一个Atom条目元素

  1. <?php
  2. $entry = new Zend_Feed_Entry_Atom();// Atom的id总是由服务器分配
  3. $entry->title = 'my custom entry';
  4. $entry->author->name = 'Example Author';
  5. $entry->author->email = 'me@example.com';
  6. Zend_Feed::registerNamespace('myns', 'http://www.example.com/myns/1.0');
  7. $entry->{'myns:myelement_one'} = 'my first custom value';
  8. $entry->{'myns:container_elt'}->part1 = 'first nested custom part';
  9. $entry->{'myns:container_elt'}->part2 = 'second nested custom part';
  10. echo $entry->saveXML();
  11. ?>

根据以上方法基本可以满足处理feed的需求.

Post a Comment