我已经成功地创建了一个简单的RSS提要,但是条目总是以未读和更新的形式返回,每次我要求mail更新提要时,从客户端删除的条目都会重新出现。
我做错了什么?
我使用这个简单的函数创建rss提要:
public static function getFeed($db)
{
$title = 'Latest feeds';
$feedUri = '/rss/';
//link from which feed is available
$link = 'http://' . $_SERVER['HTTP_HOST'] . $feedUri;
//create array according to structure defined in Zend_Feed documentation
$feedArr = array('title' => $title,
'link' => $link,
'description' => $title,
'language' => 'en-us',
'charset' => 'utf-8',
//'published' => 1237281011,
'generator' => 'Zend Framework Zend_Feed',
'entries' => array()
);
$itemObjs = array();
$select = $db->select('id')->from('things')
->order('createddate desc')
->limit(10);
$results = $db->fetchAll($select->__toString());
$count = count($results);
for($i=0;$i<$count;$i++) {
$itemObjs[] = SiteUtil::getItemObjectInstance($db, $results[$i]['id']);
}
$count = count($itemObjs);
for($i=0;$i<$count;$i++) {
$obj = & $itemObjs[$i];
$feedArr['entries'][] = array('title' => $obj->getSummary(),
'link' => 'http://' . $_SERVER['HTTP_HOST'] . $obj->getDetailUri(),
'description' => $obj->description,
'publishdate' => $obj->publishedDate,
'guid' => 'http://' . $_SERVER['HTTP_HOST'] . $obj->getDetailUri()
);
}
$feed = Zend_Feed::importArray($feedArr, 'rss');
return $feed;
}
public function rssAction()
{
$feed = FeedUtil::getFeed($this->db);
$feed->send();
}
因此,要访问提要,我将客户端指向:
http://mysite.com/rss
1) 如果我将一个或多个项目标记为“已读”,然后告诉mail更新提要,它会再次提取所有项目,就好像我一开始从未下载过一样。
2) 如果我删除了一个或多个条目,它们会再次返回,未读,就像我第一次订阅提要一样。
3) 饲料是
标记为已更新。应该是这样吗?
是与我正在设置的参数有关,是省略了什么,还是解决方案可能是更微妙的,比如设置HTTP内容头(例如“304未修改”)?
我对rss的理解是,一旦一个项目被标记为已读或已从客户端删除,它就永远不会回来,这是我所追求的行为。
需要注意的是,“link”和“guid”参数总是唯一的,我尝试过使用“published”和“publishdate”(两个可选)属性只得到相同的结果。上面的代码是我所拥有的代码的简化版本,只显示了相关的位,最后,是的,我已经阅读了
rss specification
.
提前感谢您在这里提供的任何帮助,我很乐意澄清任何一点。