def get(self, request): """Generates the RSS feed.""" page = request.pages.current # Write the feed headers. feed = DefaultFeed( title=page.title, link=page.get_absolute_url(), description=page.meta_description, ) # Write the feed items. for article in self.get_queryset()[:30]: feed.add_item( title=article.title, link=article.get_absolute_url(), description=process_html(article.summary or article.content), pubdate=article.date, ) # Write the response. content = feed.writeString("utf-8") response = HttpResponse(content) response["Content-Type"] = feed.mime_type response["Content-Length"] = len(content) return response
def get(self, request): """Generates the RSS feed.""" page = request.pages.current # Write the feed headers. feed = DefaultFeed( title=page.title, link=page.get_absolute_url(), description=page.meta_description, ) # Write the feed items. for article in self.get_queryset()[:30]: feed.add_item( title=article.title, link=article.get_absolute_url(), description=process_html( article.summary or article.content), pubdate=article.date, ) # Write the response. content = feed.writeString("utf-8") response = HttpResponse(content) response["Content-Type"] = feed.mime_type response["Content-Length"] = len(content) return response
def get(self, name): name = name.lower() rules = RuleList.getList(name) if rules is None: self.error(404) return # Conditional redirect to FeedBurner # @see: http://www.google.com/support/feedburner/bin/answer.py?hl=en&answer=78464 if (self.request.get('raw', None) is None and # http://host/path/name.rss?raw 'FeedBurner' not in self.request.user_agent): # FeedBurner fetcher self.redirect('http://feeds.feedburner.com/%s' % name, permanent=False) return self.lastModified(rules.date) start = int(self.request.get('start', 0)) fetchNum = start + int(self.request.get('num', 20)) if fetchNum > 1000: self.error(412) return logs = memcache.get('changelog/%s' % name) if logs is None or len(logs) < fetchNum: diff = ChangeLog.gql("WHERE ruleList = :1 ORDER BY date DESC", rules).fetch(fetchNum) logs = map(generateLogFromDiff, diff) memcache.add('changelog/%s' % name, logs) self.response.headers['Content-Type'] = Feed.mime_type f = Feed(title="%s 更新记录" % name, link=self.request.relative_url(name), description="beta", language="zh") for item in logs: f.add_item(title="%d月%d日 %s 更新: 增加 %d 条, 删除 %d 条" % (item['timestamp'].month, item['timestamp'].day, name, len(item['block']), len(item['unblock'])), link='', description=template.render('changelogRssItem.html', **item), author_name="gfwlist", pubdate=item['timestamp']) f.write(self.response.out, 'utf-8')
def add_root_elements(self, handler): # set feed_url to current page page = None if self.page.number == 1 else self.page.number self.feed['feed_url'] = urlparams(self.feed['feed_url'], page=page) DefaultFeed.add_root_elements(self, handler) # http://tools.ietf.org/html/rfc5005#section-3 self.add_page_relation(handler, 'first', 1) if self.page.has_previous(): self.add_page_relation(handler, 'previous', self.page.previous_page_number()) if self.page.has_next(): self.add_page_relation(handler, 'next', self.page.next_page_number()) self.add_page_relation(handler, 'last', self.page.paginator.num_pages)
def get(self, name): name = name.lower() rules = RuleList.getList(name) if rules is None: self.error(404) return # Conditional redirect to FeedBurner # @see: http://www.google.com/support/feedburner/bin/answer.py?hl=en&answer=78464 if(self.request.get('raw', None) is None and # http://host/path/name.rss?raw 'FeedBurner' not in self.request.user_agent): # FeedBurner fetcher self.redirect('http://feeds.feedburner.com/%s' % name, permanent=False) return self.lastModified(rules.date) start = int(self.request.get('start', 0)) fetchNum = start + int(self.request.get('num', 20)) if fetchNum > 1000: self.error(412) return logs = memcache.get('changelog/%s' % name) if logs is None or len(logs) < fetchNum: diff = ChangeLog.gql("WHERE ruleList = :1 ORDER BY date DESC", rules).fetch(fetchNum) logs = map(generateLogFromDiff, diff) memcache.add('changelog/%s' % name, logs) self.response.headers['Content-Type'] = Feed.mime_type f = Feed(title="%s 更新记录" % name, link=self.request.relative_url(name), description="beta", language="zh") for item in logs: f.add_item(title="%d月%d日 %s 更新: 增加 %d 条, 删除 %d 条" % (item['timestamp'].month, item['timestamp'].day, name, len(item['block']), len(item['unblock'])), link='', description=template.render('changelogRssItem.html', **item), author_name="gfwlist", pubdate=item['timestamp']) f.write(self.response.out, 'utf-8')