○ 扩展,其实自己继承一个类做起来更好,不过我django1.8是完整代码丢在一起,就直接改本身的Feed了,我觉着本身就是根据标准扩展,也没啥的
√Django 1.8的feedgenerator本来就实现的
2015/8/30更新:因为sae支持了django1.8.3,所以还是用了继承类,好像1.8.3和1.8.0的rss有点区别,item里面添加了comment所以修改之
RSS 2.0
【参考】 【w3school】 【django 1.8的相关文档】
channel
django中Rss201rev2Feed继承于RssFeed,RssFeed继承于SyndicationFeed。root的配置实现在RssFeed。其实还多实现了feed_url,标签为atom:link,不过没有实现的东西实在太多了。
pubDate的实现:
handler.addQuickElement(
""pubDate"", rfc2822_date(datetime.datetime.now()))
扩展实现:
def add_root_elements(self, handler):
super(Rss201rev2Feed, self).add_root_elements(handler)
handler.addQuickElement(
'docs', 'http://blogs.law.harvard.edu/tech/rss')
handler.addQuickElement(
""generator"", 'django.util.feedgenerator.Rss201rev2Feed')
标签名称 | 描述 | 举例 | 必须 | |
---|---|---|---|---|
title | 频道名称 | 嵇尔的吐槽 | √ | √ |
link | 网站的URL | http://www.jithee.name | √ | √ |
description | 频道描述 | 没事画轮子的嵇尔不定期的(W)碎(E)碎(B)念(B)和(L)吐(O)槽(G) | √ | √ |
language | 语言代码 | zh-cn 【参考】 | √ | |
copyright | 版权信息 | Copyright 2015, Ji You | √ | |
managingEditor | 编辑邮件 | n****u@gmai.com (嵇尔) | ||
webMaster | 网管邮件 | n****u@gmai.com (嵇尔) | ||
pubDate | 发布时间 | Sat, 07 Sep 2002 00:00:01 GMT 【符合RFC 822】 | ○ | |
lastBuildDate | 更新时间 | Sat, 07 Sep 2002 09:42:31 GMT | √ | |
category | 分类 | <category>IT/Internet/Web development</category> | √ | |
generator | 生成程序 | django.util.feedgenerator | ○ | |
docs | 文档标准 | http://blogs.law.harvard.edu/tech/rss | ○ | |
cloud | 注册进程 | <cloud domain=”“www.w3school.com.cn”“ port=”“80”“ path=”“/RPC”“ registerProcedure=”“NotifyMe”“ protocol=”“xml-rpc”” /> |
||
ttl | 缓存分钟 | 80 | √ | |
image | 频道图片 | <url>http://www.w3school.com.cn/images/logo.gif</url> <title>W3School.com.cn</title> <link>http://www.w3school.com.cn</link> |
||
rating | PICS 级别 | |||
textInput | 输入框 | <description>Search Google</description> <title>Search</title> <link>http://www.google.no/search?</link> <name>q</name> |
||
skipHours | 忽略小时 | <hour>0</hour> <hour>1</hour> |
||
skipDays | 忽略周天 | <day>Saturday</day> |
item
title和description必须存在一个,都是可选项
django实现中title和link为必须。comments和source都没有实现,不过实现起来貌似太简单了。author灵活实现。
def add_item(self, title, link, description, author_email=None,
#...
source=None, source_url=None, **kwargs):
item = {
#...
'ttl': ttl,
'source': source,
'source_url': source_url,
}
#...
# Comments.
if item['comments'] is not None:
handler.addQuickElement(""comments"", item['comments'])
# Source.
if item['source_url'] and item['source']:
source_attrs = {}
source_attrs['url'] = item['source_url']
handler.addQuickElement(""source"", item['source'], source_attrs)
标签名称 | 描述 | 举例 | |
---|---|---|---|
title | 单项标题 | Feed标准整理:RSS/Atom | √ |
link | 单项URL | http://www.jithee.name/blog/post/23/ | √ |
description | 单项描述 | blablablablabla(略) | √ |
author | 作者电子邮件地址 | n*******u@gmail.com (嵇尔) | √ |
category | 单项分类 | IT/Web development | √ |
comments | 评论地址 | http://www.jithee.name/blog/post/23/#0 | √ |
enclosure | 媒体项目 | <enclosure url=”“http://www.w3school.com.cn/media/movie.wmv”“ length=”“856329”“ type=”“video/wmv”” /> |
√ |
guid | 唯一标识 | http://www.jithee.name/blog/post/23/ 有属性isPermaLink | √ |
pubDate | 发布时间 | Sun, 19 May 2002 15:21:36 GMT | √ |
source | 第三方来源 | <source url=”“http://www.w3school.com.cn”“>w3school.com.cn</source> | ○ |
代码整理
from django.utils import feedgenerator
from project.utils import get_local_time
class ExRss201rev2Feed(feedgenerator.Rss201rev2Feed):
def add_item_elements(self, handler, item):
super(ExtreRss201rev2Feed, self).add_item_elements(handler, item)
# Source.
if 'source_url' in item and 'source' in item and item['source_url'] and item['source']:
source_attrs = {}
source_attrs['url'] = item['source_url']
handler.addQuickElement(""source"", item['source'], source_attrs)
def add_root_elements(self, handler):
super(ExtreRss201rev2Feed, self).add_root_elements(handler)
handler.addQuickElement(""pubDate"", feedgenerator.rfc2822_date(get_local_time()))
handler.addQuickElement('docs', 'http://blogs.law.harvard.edu/tech/rss')
handler.addQuickElement(""generator"", 'django.util.feedgenerator.Rss201rev2Feed')
# project.utils
from django.shortcuts import render_to_response, RequestContext
import pytz
from settings import TIME_ZONE
from django.utils import timezone
def get_local_time(utc_datetime=timezone.now()):
return utc_datetime.astimezone(pytz.timezone(TIME_ZONE))