Exemplo n.º 1
0
 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'),
     ]
Exemplo n.º 2
0
 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]))
         ]
Exemplo n.º 3
0
 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),
             )
         ]
Exemplo n.º 4
0
 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 []
Exemplo n.º 5
0
 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 []
Exemplo n.º 6
0
 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
Exemplo n.º 7
0
    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
Exemplo n.º 8
0
 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
Exemplo n.º 9
0
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')
Exemplo n.º 10
0
    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
Exemplo n.º 11
0
    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
Exemplo n.º 12
0
 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"),
     ]
Exemplo n.º 13
0
    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
Exemplo n.º 14
0
    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))