Example #1
0
    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
Example #3
0
    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')
Example #4
0
    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)
Example #5
0
    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)
Example #6
0
    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')