def item_enclosures(self, item): return [ feedgenerator.Enclosure('http://example.com/hello.png', '0', 'image/png'), feedgenerator.Enclosure('http://example.com/goodbye.png', '0', 'image/png'), ]
def item_enclosures(self, issue): # Embedding photo if issue.photo: return [ feedgenerator.Enclosure( issue.photo.url, str(issue.photo.size), 'image/{}'.format(issue.photo.name.split('.')[-1])) ]
def item_enclosures(self, item): if item.featured_image: return [ feedgenerator.Enclosure( self.request.build_absolute_uri(item.featured_image.url), str(item.featured_image.size), self.get_image_content_type(item.featured_image), ) ]
def item_enclosures(self, item): enc_url = self._get_dynamic_attr('item_enclosure_url', item) if enc_url: enc = feedgenerator.Enclosure( url=str(enc_url), length=str(self._get_dynamic_attr('item_enclosure_length', item)), mime_type=str(self._get_dynamic_attr('item_enclosure_mime_type', item)), ) return [enc] return []
def item_enclosures(self, item): enc_url = item.get("imgsrc") if enc_url: enc = feedgenerator.Enclosure( url=force_text(enc_url), length=force_text(1000), mime_type=force_text("image/*"), ) return [enc] return []
def find_enclosure(self, html): soup = BeautifulSoup.BeautifulSoup(html) img = soup.find("img") if img: headers = self.fetch_headers(img["src"]) if headers: enclosure = feedgenerator.Enclosure(img["src"], headers["Content-Length"], headers["Content-Type"]) return enclosure return None
def get_feed(self): """ Returns a feedgenerator.DefaultFeed object, fully populated, for this feed. """ feed = self.feed_type( title=self.__get_dynamic_attr('title'), link=add_domain(self.domain, self.__get_dynamic_attr('link', default=''), self.prefix), description=self.__get_dynamic_attr('description'), language=settings.LANGUAGE_CODE.decode(), feed_url=add_domain(self.domain, self.feed_url, self.prefix), author_name=self.__get_dynamic_attr('author_name'), author_link=self.__get_dynamic_attr('author_link'), author_email=self.__get_dynamic_attr('author_email'), ) for item in self.items(): link = add_domain(self.domain, self.__get_dynamic_attr('item_link', item), self.prefix) enc = None enc_url = self.__get_dynamic_attr('item_enclosure_url', item) if enc_url: enc = feedgenerator.Enclosure( url=enc_url.decode('utf-8'), length=str( self.__get_dynamic_attr('item_enclosure_length', item)).decode('utf-8'), mime_type=self.__get_dynamic_attr( 'item_enclosure_mime_type', item).decode('utf-8'), ) author_name = self.__get_dynamic_attr('item_author_name', item) if author_name is not None: author_email = self.__get_dynamic_attr('item_author_email', item) author_link = self.__get_dynamic_attr('item_author_link', item) else: author_email = author_link = None feed.add_item( title=self.__get_dynamic_attr('item_title', item), link=link, description=self.__get_dynamic_attr('item_description', item), unique_id=link, enclosure=enc, pubdate=self.__get_dynamic_attr('item_pubdate', item), author_name=author_name, author_email=author_email, author_link=author_link, ) return feed
def item_enclosures(self, item): """ See: https://stackoverflow.com/questions/60227116/django-rss-feed-add-image-to-description """ images = [] for image in item.event.images.all(): thumbnail = get_thumbnail(image.image, "800x800", quality=90) images.append( feedgenerator.Enclosure( self.get_image_url(thumbnail.url), str(image.image.size), "image/{}".format(thumbnail.name.split(".")[-1]), )) return images
def feed_podcast(request, portal): f = create_portal_feed(request, portal) for n in portal.podcast_set.filter(deleted=False).filter(hidden=False).order_by('-created_at')[:15]: uri = request.build_absolute_uri(domain_reverse(portal, 'portals.frontend.views.podcast_item', args=[portal.address, n.id])) f.add_item( title=n.title, description=n.content, link=uri, pubdate=n.created_at, unique_id=uri, enclosure=feedgenerator.Enclosure( url=request.build_absolute_uri(n.enclosure_url), length=str(n.enclosure_length), mime_type=n.enclosure_type, ), ) return HttpResponse(f.writeString('UTF-8'), mimetype='application/rss+xml')
def get_feed(self, url=None): """ Returns a feedgenerator.DefaultFeed object, fully populated, for this feed. Raises FeedDoesNotExist for invalid parameters. """ if url: try: obj = self.get_object(url.split('/')) except (AttributeError, ObjectDoesNotExist): raise FeedDoesNotExist else: obj = None current_site = Site.objects.get_current() link = self.__get_dynamic_attr('link', obj) link = add_domain(current_site.domain, link) feed = self.feed_type( title=self.__get_dynamic_attr('title', obj), link=link, description=self.__get_dynamic_attr('description', obj), language=settings.LANGUAGE_CODE.decode(), feed_url=add_domain(current_site, self.__get_dynamic_attr('feed_url', obj)), author_name=self.__get_dynamic_attr('author_name', obj), author_link=self.__get_dynamic_attr('author_link', obj), author_email=self.__get_dynamic_attr('author_email', obj), categories=self.__get_dynamic_attr('categories', obj), feed_copyright=self.__get_dynamic_attr('feed_copyright', obj), ) try: title_tmp = loader.get_template(self.title_template_name) except TemplateDoesNotExist: title_tmp = Template('{{ obj }}') try: description_tmp = loader.get_template( self.description_template_name) except TemplateDoesNotExist: description_tmp = Template('{{ obj }}') for item in self.__get_dynamic_attr('items', obj): link = add_domain(current_site.domain, self.__get_dynamic_attr('item_link', item)) enc = None enc_url = self.__get_dynamic_attr('item_enclosure_url', item) if enc_url: enc = feedgenerator.Enclosure( url=enc_url.decode('utf-8'), length=str( self.__get_dynamic_attr('item_enclosure_length', item)).decode('utf-8'), mime_type=self.__get_dynamic_attr( 'item_enclosure_mime_type', item).decode('utf-8'), ) author_name = self.__get_dynamic_attr('item_author_name', item) if author_name is not None: author_email = self.__get_dynamic_attr('item_author_email', item) author_link = self.__get_dynamic_attr('item_author_link', item) else: author_email = author_link = None feed.add_item( title=title_tmp.render( Context({ 'obj': item, 'site': current_site })).decode('utf-8'), link=link, description=description_tmp.render( Context({ 'obj': item, 'site': current_site })).decode('utf-8'), unique_id=link, enclosure=enc, pubdate=self.__get_dynamic_attr('item_pubdate', item), author_name=author_name, author_email=author_email, author_link=author_link, categories=self.__get_dynamic_attr('item_categories', item), item_copyright=self.__get_dynamic_attr('item_copyright', item), ) return feed
def get_feed(self, obj, request): """ Returns a feedgenerator.DefaultFeed object, fully populated, for this feed. Raises FeedDoesNotExist for invalid parameters. """ current_site = get_current_site(request) link = self.__get_dynamic_attr('link', obj) link = add_domain(current_site.domain, link, request.is_secure()) feed = self.feed_type( title=self.__get_dynamic_attr('title', obj), subtitle=self.__get_dynamic_attr('subtitle', obj), link=link, description=self.__get_dynamic_attr('description', obj), language=settings.LANGUAGE_CODE, feed_url=add_domain( current_site.domain, self.__get_dynamic_attr('feed_url', obj) or request.path, request.is_secure(), ), author_name=self.__get_dynamic_attr('author_name', obj), author_link=self.__get_dynamic_attr('author_link', obj), author_email=self.__get_dynamic_attr('author_email', obj), categories=self.__get_dynamic_attr('categories', obj), feed_copyright=self.__get_dynamic_attr('feed_copyright', obj), feed_guid=self.__get_dynamic_attr('feed_guid', obj), ttl=self.__get_dynamic_attr('ttl', obj), **self.feed_extra_kwargs(obj)) title_tmp = None if self.title_template is not None: try: title_tmp = loader.get_template(self.title_template) except TemplateDoesNotExist: pass description_tmp = None if self.description_template is not None: try: description_tmp = loader.get_template( self.description_template) except TemplateDoesNotExist: pass for item in self.__get_dynamic_attr('items', obj): if title_tmp is not None: title = title_tmp.render( RequestContext(request, { 'obj': item, 'site': current_site })) else: title = self.__get_dynamic_attr('item_title', item) if description_tmp is not None: description = description_tmp.render( RequestContext(request, { 'obj': item, 'site': current_site })) else: description = self.__get_dynamic_attr('item_description', item) link = add_domain( current_site.domain, self.__get_dynamic_attr('item_link', item), request.is_secure(), ) enc = None enc_url = self.__get_dynamic_attr('item_enclosure_url', item) if enc_url: enc = feedgenerator.Enclosure( url=smart_text(enc_url), length=smart_text( self.__get_dynamic_attr('item_enclosure_length', item)), mime_type=smart_text( self.__get_dynamic_attr('item_enclosure_mime_type', item))) author_name = self.__get_dynamic_attr('item_author_name', item) if author_name is not None: author_email = self.__get_dynamic_attr('item_author_email', item) author_link = self.__get_dynamic_attr('item_author_link', item) else: author_email = author_link = None pubdate = self.__get_dynamic_attr('item_pubdate', item) if pubdate and is_naive(pubdate): ltz = tzinfo.LocalTimezone(pubdate) pubdate = pubdate.replace(tzinfo=ltz) feed.add_item( title=title, link=link, description=description, unique_id=self.__get_dynamic_attr('item_guid', item, link), enclosure=enc, pubdate=pubdate, author_name=author_name, author_email=author_email, author_link=author_link, categories=self.__get_dynamic_attr('item_categories', item), item_copyright=self.__get_dynamic_attr('item_copyright', item), **self.item_extra_kwargs(item)) return feed
def item_enclosures(self, item): return [ feedgenerator.Enclosure("http://example.com/hello.png", "0", "image/png"), feedgenerator.Enclosure("http://example.com/goodbye.png", "0", "image/png"), ]
def get_feed(self, obj, request): """ Returns a feedgenerator.DefaultFeed object, fully populated, for this feed. Raises FeedDoesNotExist for invalid parameters. """ if Site._meta.installed: current_site = Site.objects.get_current() else: current_site = RequestSite(request) link = self.__get_dynamic_attr('link', obj) link = add_domain(current_site.domain, link) feed = self.feed_type( title = self.__get_dynamic_attr('title', obj), subtitle = self.__get_dynamic_attr('subtitle', obj), link = link, description = self.__get_dynamic_attr('description', obj), language = settings.LANGUAGE_CODE.decode(), feed_url = add_domain(current_site.domain, self.__get_dynamic_attr('feed_url', obj) or request.path), author_name = self.__get_dynamic_attr('author_name', obj), author_link = self.__get_dynamic_attr('author_link', obj), author_email = self.__get_dynamic_attr('author_email', obj), categories = self.__get_dynamic_attr('categories', obj), feed_copyright = self.__get_dynamic_attr('feed_copyright', obj), feed_guid = self.__get_dynamic_attr('feed_guid', obj), ttl = self.__get_dynamic_attr('ttl', obj), **self.feed_extra_kwargs(obj) ) title_tmp = None if self.title_template is not None: try: title_tmp = loader.get_template(self.title_template) except TemplateDoesNotExist: pass description_tmp = None if self.description_template is not None: try: description_tmp = loader.get_template(self.description_template) except TemplateDoesNotExist: pass for item in self.__get_dynamic_attr('items', obj): if title_tmp is not None: title = title_tmp.render(RequestContext(request, {'obj': item, 'site': current_site})) else: title = self.__get_dynamic_attr('item_title', item) if description_tmp is not None: description = description_tmp.render(RequestContext(request, {'obj': item, 'site': current_site})) else: description = self.__get_dynamic_attr('item_description', item) link = add_domain(current_site.domain, self.__get_dynamic_attr('item_link', item)) enc = None enc_url = self.__get_dynamic_attr('item_enclosure_url', item) if enc_url: enc = feedgenerator.Enclosure( url = smart_unicode(enc_url), length = smart_unicode(self.__get_dynamic_attr('item_enclosure_length', item)), mime_type = smart_unicode(self.__get_dynamic_attr('item_enclosure_mime_type', item)) ) author_name = self.__get_dynamic_attr('item_author_name', item) if author_name is not None: author_email = self.__get_dynamic_attr('item_author_email', item) author_link = self.__get_dynamic_attr('item_author_link', item) else: author_email = author_link = None pubdate = self.__get_dynamic_attr('item_pubdate', item) if pubdate and not pubdate.tzinfo: now = datetime.datetime.now() utcnow = datetime.datetime.utcnow() # Must always subtract smaller time from larger time here. if utcnow > now: sign = -1 tzDifference = (utcnow - now) else: sign = 1 tzDifference = (now - utcnow) # Round the timezone offset to the nearest half hour. tzOffsetMinutes = sign * ((tzDifference.seconds / 60 + 15) / 30) * 30 tzOffset = datetime.timedelta(minutes=tzOffsetMinutes) pubdate = pubdate.replace(tzinfo=tzinfo.FixedOffset(tzOffset)) feed.add_item( title = title, link = link, description = description, unique_id = self.__get_dynamic_attr('item_guid', item, link), enclosure = enc, pubdate = pubdate, author_name = author_name, author_email = author_email, author_link = author_link, categories = self.__get_dynamic_attr('item_categories', item), item_copyright = self.__get_dynamic_attr('item_copyright', item), **self.item_extra_kwargs(item) ) return feed
def populate_feed(self, feed, items, request): """Populates a :class:`django.utils.feedgenerator.DefaultFeed` instance as is returned by :meth:`get_feed` with the passed-in ``items``.""" if self.item_title_template: title_template = DjangoTemplate(self.item_title_template.code) else: title_template = None if self.item_description_template: description_template = DjangoTemplate( self.item_description_template.code) else: description_template = None node = request.node try: current_site = Site.objects.get_current() except Site.DoesNotExist: current_site = RequestSite(request) if self.feed_length is not None: items = items[:self.feed_length] for item in items: if title_template is not None: title = title_template.render( RequestContext(request, {'obj': item})) else: title = self.__get_dynamic_attr('item_title', item) if description_template is not None: description = description_template.render( RequestContext(request, {'obj': item})) else: description = self.__get_dynamic_attr('item_description', item) link = node.construct_url(self.reverse(obj=item), with_domain=True, request=request, secure=request.is_secure()) enc = None enc_url = self.__get_dynamic_attr('item_enclosure_url', item) if enc_url: enc = feedgenerator.Enclosure( url=smart_unicode( add_domain(current_site.domain, enc_url, request.is_secure())), length=smart_unicode( self.__get_dynamic_attr('item_enclosure_length', item)), mime_type=smart_unicode( self.__get_dynamic_attr('item_enclosure_mime_type', item))) author_name = self.__get_dynamic_attr('item_author_name', item) if author_name is not None: author_email = self.__get_dynamic_attr('item_author_email', item) author_link = self.__get_dynamic_attr('item_author_link', item) else: author_email = author_link = None pubdate = self.__get_dynamic_attr('item_pubdate', item) if pubdate and not pubdate.tzinfo: ltz = tzinfo.LocalTimezone(pubdate) pubdate = pubdate.replace(tzinfo=ltz) feed.add_item( title=title, link=link, description=description, unique_id=self.__get_dynamic_attr('item_guid', item, link), enclosure=enc, pubdate=pubdate, author_name=author_name, author_email=author_email, author_link=author_link, categories=self.__get_dynamic_attr('item_categories', item), item_copyright=self.__get_dynamic_attr('item_copyright', item), **self.item_extra_kwargs(item))