def rss(self, limit=50, source=None, *args, **kwargs): """ RSS feed of jobs :param source: source name :param limit: number of displayed jobs :return: RSS feed content """ site_url = config.get('site.domain_base_url') feed = feedgenerator.Rss201rev2Feed( title=u"pyjobs : le job qu'il vous faut en python", link=site_url, description=u"Agrégation de jobs python", language=u"fr", feed_url=u"http://www.pyjobs.fr/rss?limit=%s" % limit) jobs = DBSession.query(model.JobAlchemy) \ .order_by(model.JobAlchemy.publication_datetime.desc()) \ .limit(limit) if source is not None: jobs = jobs.filter(model.JobAlchemy.source == source) for job in jobs: job_slug = slugify(job.title) feed.add_item(title=job.title, link=get_job_url(job.id, job_title=job.title, absolute=True), description=job.description, pubdate=job.publication_datetime, unique_id="%s/job/%d/%s" % (site_url, job.id, job_slug)) return feed.writeString('utf-8')
def feed(cls, q, feed_type, title, link, description, since=None, until=None, offset=None, limit=None): "Produces webhelper.feedgenerator Feed" d = dict(title=title, link=h.absurl(link), description=description, language=u'en') if feed_type == 'atom': feed = FG.Atom1Feed(**d) elif feed_type == 'rss': feed = FG.Rss201rev2Feed(**d) query = defaultdict(dict) query.update(q) if since is not None: query['pubdate']['$gte'] = since if until is not None: query['pubdate']['$lte'] = until cur = cls.query.find(query) cur = cur.sort('pubdate', pymongo.DESCENDING) if limit is None: limit = 10 query = cur.limit(limit) if offset is not None: query = cur.offset(offset) for r in cur: feed.add_item(title=r.title, link=h.absurl(r.link.encode('utf-8')), pubdate=r.pubdate, description=r.description, unique_id=h.absurl(r.unique_id), author_name=r.author_name, author_link=h.absurl(r.author_link)) return feed
def articles(self): feed = feedgenerator.Rss201rev2Feed( title="Renatopp's - Feed dos Artigos", link=self.request.host_url, description= "Artigos do super ultra hyper mega site http://renatopp.com", author_name=self.author) posts = Session.query(Post).order_by(desc( Post.id)).filter(Post.type == 'article').filter( Post.status == 'Published').limit(10).all() for post in posts: summary = post.content[:200].replace('\n', '<br>') categorys = ', '.join([c.name for c in post.categorys]) or 'Sem Categoria' description = u""" %s (...)<br><br> Categorias: %s<br> Visite <a href="http://renatopp.com">renatopp.com</a> """ % (summary, categorys) feed.add_item(title=post.title, link=url('blog_entry', self.request, id=post.id, alias=post.alias), description=description, author_name=self.author) return Response(feed.writeString('utf-8'))
def feed(self, **kw): data = self._get_activities_data(**kw) response.headers['Content-Type'] = '' response.content_type = 'application/xml' d = { 'title': 'Activity for %s' % data['followee'].activity_name, 'link': h.absurl(self.app.url), 'description': 'Recent activity for %s' % (data['followee'].activity_name), 'language': u'en', } if request.environ['PATH_INFO'].endswith('.atom'): feed = FG.Atom1Feed(**d) else: feed = FG.Rss201rev2Feed(**d) for t in data['timeline']: url = h.absurl(t.obj.activity_url.encode('utf-8')) feed.add_item(title=u'%s %s %s%s' % ( t.actor.activity_name, t.verb, t.obj.activity_name, ' on %s' % t.target.activity_name if t.target.activity_name else '', ), link=url, pubdate=t.published, description=t.obj.activity_extras.get('summary'), unique_id=url, author_name=t.actor.activity_name, author_link=h.absurl(t.actor.activity_url)) return feed.writeString('utf-8')
def snippets(self): feed = feedgenerator.Rss201rev2Feed( title="Renatopp's - Feed dos Snippets", link=self.request.host_url, description= "Snippets do super ultra hyper mega site http://renatopp.com", author_name=self.author) snippets = Session.query(Snippet).order_by(desc( Snippet.id)).limit(10).all() for snippet in snippets: summary = snippet.summary or u'Sem descrição' language = snippet.language category = ', '.join([c.name for c in snippet.categorys ]) or 'Sem Categoria' description = u""" %s<br> <br> Linguagem: %s <br> Categorias: %s <br> Visite o site para mais informações - <a href="http://renatopp.com">renatopp.com</a>. """ % (summary, language, category) feed.add_item(title=snippet.title, link=url('snippet_entry', self.request, id=snippet.id, alias=snippet.alias), description=description, author_name="Renato Pereira") return Response(feed.writeString('utf-8'))
def feed(self, filter=None, id=None): feed = feedgenerator.Rss201rev2Feed( title=_('%s packages' % config['debexpo.sitename']), link=config['debexpo.server'] + url('packages'), description=_('A feed of packages on %s' % config['debexpo.sitename']), language=get_lang()[0]) if filter == 'section': packages = self._get_packages( package_version_filter=(PackageVersion.section == id)) elif filter == 'uploader': user = self._get_user(id) if user is not None: packages = self._get_packages( package_filter=(Package.user_id == user.id)) else: packages = [] elif filter == 'maintainer': packages = self._get_packages( package_version_filter=(PackageVersion.maintainer == id)) else: packages = self._get_packages() for item in packages: desc = _('Package %s uploaded by %s.' % (item.name, item.user.name)) desc += '<br/><br/>' if item.needs_sponsor: desc += _('Uploader is currently looking for a sponsor.') else: desc += _('Uploader is currently not looking for a sponsor.') desc += '<br/><br/>' + item.description.replace('\n', '<br/>') feed.add_item(title='%s %s' % (item.name, item.package_versions[-1].version), link=config['debexpo.server'] + url('package', packagename=item.name), description=desc, unique_id=str(item.package_versions[-1].id)) response.content_type = 'application/rss+xml' response.content_type_params = {'charset': 'utf8'} return feed.writeString('utf-8')
def test_simple_feed(): pubdate = datetime.datetime(2009, 12, 18, 23, 45, 12) feed = fg.Rss201rev2Feed( title=u"Poynter E-Media Tidbits", link=u"http://www.poynter.org/column.asp?id=31", description=u"A group weblog by the sharpest minds in online media/journalism/publishing.", language=u"en", ) feed.add_item( title="Hello", link=u"http://www.holovaty.com/test/", description="Testing.", pubdate=pubdate) result = feed.writeString("utf-8") control = """<?xml version="1.0" encoding="utf-8"?>\n<rss version="2.0"><channel><title>Poynter E-Media Tidbits</title><link>http://www.poynter.org/column.asp?id=31</link><description>A group weblog by the sharpest minds in online media/journalism/publishing.</description><language>en</language><lastBuildDate>Fri, 18 Dec 2009 23:45:12 -0000</lastBuildDate><item><title>Hello</title><link>http://www.holovaty.com/test/</link><description>Testing.</description><pubDate>Fri, 18 Dec 2009 23:45:12 -0000</pubDate></item></channel></rss>""" eq_(result, control)
def user_rss(request): """ Render per-user rss. """ user_id = request.matchdict.get('id') user = _get_user(request, user_id) if not user: raise HTTPNotFound("No such user %r" % user_id) if user.opt_out == True and user.email != authenticated_userid(request): raise HTTPNotFound("User %r has opted out." % user_id) comparator = lambda x, y: cmp(x.issued_on, y.issued_on) sorted_assertions = sorted(user.assertions, cmp=comparator, reverse=True) feed = feedgenerator.Rss201rev2Feed( title=u"Badges Feed for %s" % user.nickname, link=request.route_url('user', id=user.nickname or user.id), description=u"The latest Fedora Badges obtained by %s" % user.nickname, language=u"en", ) description_template = "<img src='%s' alt='%s'/>%s -- %s" for assertion in sorted_assertions: feed.add_item( title=assertion.badge.name, link=request.route_url('badge', id=assertion.badge.id), pubdate=assertion.issued_on, description=description_template % ( assertion.badge.image, assertion.badge.name, assertion.badge.name, assertion.badge.description, ) ) return Response( body=feed.writeString('utf-8'), content_type='application/rss+xml', charset='utf-8', )
def badge_rss(request): """ Render per-badge rss. """ badge_id = request.matchdict.get('id') badge = request.db.get_badge(badge_id) if not badge: raise HTTPNotFound("No such badge %r" % badge_id) comparator = lambda x, y: cmp(x.issued_on, y.issued_on) sorted_assertions = sorted(badge.assertions, cmp=comparator, reverse=True) feed = feedgenerator.Rss201rev2Feed( title=u"Badges Feed for %s" % badge.name, link=request.route_url('badge', id=badge.id), description=u"Latest recipients of the badge %s" % badge.name, language=u"en", ) description_template = "<img src='%s' alt='%s' />%s" for assertion in sorted_assertions: url = request.route_url( 'user', id=assertion.person.nickname or assertion.person.id) feed.add_item( title=assertion.person.nickname, link=url, pubdate=assertion.issued_on, description=description_template % ( assertion.person.avatar_url(128), assertion.person.nickname, assertion.person.nickname, ) ) return Response( body=feed.writeString('utf-8'), content_type='application/rss+xml', charset='utf-8', )