Example #1
0
	def rss_entry(self, extensions=True):
		'''Create a RSS item and return it.'''
		entry = etree.Element('item')
		if not ( self.__rss_title or self.__rss_description or self.__rss_content):
			raise ValueError('Required fields not set')
		if self.__rss_title:
			title = etree.SubElement(entry, 'title')
			title.text = self.__rss_title
		if self.__rss_link:
			link = etree.SubElement(entry, 'link')
			link.text = self.__rss_link
		if self.__rss_description and self.__rss_content:
			description = etree.SubElement(entry, 'description')
			description.text = self.__rss_description
			content = etree.SubElement(entry, '{%s}encoded' %
									'http://purl.org/rss/1.0/modules/content/')
			content.text = etree.CDATA(self.__rss_content['content']) \
				if self.__rss_content.get('type', '') == 'CDATA' else self.__rss_content['content']
		elif self.__rss_description:
			description = etree.SubElement(entry, 'description')
			description.text = self.__rss_description
		elif self.__rss_content:
			description = etree.SubElement(entry, 'description')
			description.text = self.__rss_content['content']
		for a in self.__rss_author or []:
			author = etree.SubElement(entry, 'author')
			author.text = a
		if self.__rss_guid:
			guid = etree.SubElement(entry, 'guid')
			guid.text = self.__rss_guid
			guid.attrib['isPermaLink'] = 'false'
		for cat in self.__rss_category or []:
			category = etree.SubElement(entry, 'category')
			category.text = cat['value']
			if cat.get('domain'):
				category.attrib['domain'] = cat['domain']
		if self.__rss_comments:
			comments = etree.SubElement(entry, 'comments')
			comments.text = self.__rss_comments
		if self.__rss_enclosure:
			enclosure = etree.SubElement(entry, 'enclosure')
			enclosure.attrib['url'] = self.__rss_enclosure['url']
			enclosure.attrib['length'] = self.__rss_enclosure['length']
			enclosure.attrib['type'] = self.__rss_enclosure['type']
		if self.__rss_pubDate:
			pubDate = etree.SubElement(entry, 'pubDate')
			pubDate.text = formatRFC2822(self.__rss_pubDate)

		if extensions:
			for ext in self.__extensions.values() or []:
				if ext.get('rss'):
					ext['inst'].extend_rss(entry)
		
		if self.__rss_image_url:
			image_subelement=etree.SubElement(entry, "{%s}content" % ("media"))
			image_subelement.attrib["url"]=self.__rss_image_url
			image_subelement.attrib["medium"]="image"
		
		return entry
Example #2
0
    def rss_entry(self, extensions=True):
        '''Create a RSS item and return it.'''
        entry = etree.Element('item')
        if not (self.__rss_title or
                self.__rss_description or
                self.__rss_content):
            raise ValueError('Required fields not set')
        if self.__rss_title:
            title = etree.SubElement(entry, 'title')
            title.text = self.__rss_title
        if self.__rss_link:
            link = etree.SubElement(entry, 'link')
            link.text = self.__rss_link
        if self.__rss_description and self.__rss_content:
            description = etree.SubElement(entry, 'description')
            description.text = self.__rss_description
            XMLNS_CONTENT = 'http://purl.org/rss/1.0/modules/content/'
            content = etree.SubElement(entry, '{%s}encoded' % XMLNS_CONTENT)
            content.text = etree.CDATA(self.__rss_content['content']) \
                if self.__rss_content.get('type', '') == 'CDATA' \
                else self.__rss_content['content']
        elif self.__rss_description:
            description = etree.SubElement(entry, 'description')
            description.text = self.__rss_description
        elif self.__rss_content:
            description = etree.SubElement(entry, 'description')
            description.text = self.__rss_content['content']
        for a in self.__rss_author or []:
            author = etree.SubElement(entry, 'author')
            author.text = a
        if self.__rss_guid.get('guid'):
            guid = etree.SubElement(entry, 'guid')
            guid.text = self.__rss_guid['guid']
            permaLink = str(self.__rss_guid.get('permalink', False)).lower()
            guid.attrib['isPermaLink'] = permaLink
        for cat in self.__rss_category or []:
            category = etree.SubElement(entry, 'category')
            category.text = cat['value']
            if cat.get('domain'):
                category.attrib['domain'] = cat['domain']
        if self.__rss_comments:
            comments = etree.SubElement(entry, 'comments')
            comments.text = self.__rss_comments
        if self.__rss_enclosure:
            enclosure = etree.SubElement(entry, 'enclosure')
            enclosure.attrib['url'] = self.__rss_enclosure['url']
            enclosure.attrib['length'] = self.__rss_enclosure['length']
            enclosure.attrib['type'] = self.__rss_enclosure['type']
        if self.__rss_pubDate:
            pubDate = etree.SubElement(entry, 'pubDate')
            pubDate.text = formatRFC2822(self.__rss_pubDate)

        if extensions:
            for ext in self.__extensions.values() or []:
                if ext.get('rss'):
                    ext['inst'].extend_rss(entry)

        return entry
Example #3
0
    def _create_rss(self, extensions=True):
        '''Create an RSS feed xml structure containing all previously set
        fields.

        :returns: Tuple containing the feed root element and the element tree.
        '''
        nsmap = dict()
        if extensions:
            for ext in self.__extensions.values() or []:
                if ext.get('rss'):
                    nsmap.update(ext['inst'].extend_ns())

        nsmap.update({
            'atom': 'http://www.w3.org/2005/Atom',
            'content': 'http://purl.org/rss/1.0/modules/content/'
        })

        feed = xml_elem('rss', version='2.0', nsmap=nsmap)
        channel = xml_elem('channel', feed)
        if not (self.__rss_title and self.__rss_link
                and self.__rss_description):
            missing = ([] if self.__rss_title else ['title']) + \
                      ([] if self.__rss_link else ['link']) + \
                      ([] if self.__rss_description else ['description'])
            missing = ', '.join(missing)
            raise ValueError('Required fields not set (%s)' % missing)
        title = xml_elem('title', channel)
        title.text = self.__rss_title
        link = xml_elem('link', channel)
        link.text = self.__rss_link
        desc = xml_elem('description', channel)
        desc.text = self.__rss_description
        for ln in self.__atom_link or []:
            # It is recommended to include a atom self link in rss documents…
            if ln.get('rel') == 'self':
                selflink = xml_elem('{http://www.w3.org/2005/Atom}link',
                                    channel,
                                    href=ln['href'],
                                    rel='self')
                if ln.get('type'):
                    selflink.attrib['type'] = ln['type']
                if ln.get('hreflang'):
                    selflink.attrib['hreflang'] = ln['hreflang']
                if ln.get('title'):
                    selflink.attrib['title'] = ln['title']
                if ln.get('length'):
                    selflink.attrib['length'] = ln['length']
                break
        if self.__rss_category:
            for cat in self.__rss_category:
                category = xml_elem('category', channel)
                category.text = cat['value']
                if cat.get('domain'):
                    category.attrib['domain'] = cat['domain']
        if self.__rss_cloud:
            cloud = xml_elem('cloud', channel)
            cloud.attrib['domain'] = self.__rss_cloud.get('domain')
            cloud.attrib['port'] = self.__rss_cloud.get('port')
            cloud.attrib['path'] = self.__rss_cloud.get('path')
            cloud.attrib['registerProcedure'] = self.__rss_cloud.get(
                'registerProcedure')
            cloud.attrib['protocol'] = self.__rss_cloud.get('protocol')
        if self.__rss_copyright:
            copyright = xml_elem('copyright', channel)
            copyright.text = self.__rss_copyright
        if self.__rss_docs:
            docs = xml_elem('docs', channel)
            docs.text = self.__rss_docs
        if self.__rss_generator:
            generator = xml_elem('generator', channel)
            generator.text = self.__rss_generator
        if self.__rss_image:
            image = xml_elem('image', channel)
            url = xml_elem('url', image)
            url.text = self.__rss_image.get('url')
            title = xml_elem('title', image)
            title.text = self.__rss_image.get('title', self.__rss_title)
            link = xml_elem('link', image)
            link.text = self.__rss_image.get('link', self.__rss_link)
            if self.__rss_image.get('width'):
                width = xml_elem('width', image)
                width.text = self.__rss_image.get('width')
            if self.__rss_image.get('height'):
                height = xml_elem('height', image)
                height.text = self.__rss_image.get('height')
            if self.__rss_image.get('description'):
                description = xml_elem('description', image)
                description.text = self.__rss_image.get('description')
        if self.__rss_language:
            language = xml_elem('language', channel)
            language.text = self.__rss_language
        if self.__rss_lastBuildDate:
            lastBuildDate = xml_elem('lastBuildDate', channel)

            lastBuildDate.text = formatRFC2822(self.__rss_lastBuildDate)
        if self.__rss_managingEditor:
            managingEditor = xml_elem('managingEditor', channel)
            managingEditor.text = self.__rss_managingEditor
        if self.__rss_pubDate:
            pubDate = xml_elem('pubDate', channel)
            pubDate.text = formatRFC2822(self.__rss_pubDate)
        if self.__rss_rating:
            rating = xml_elem('rating', channel)
            rating.text = self.__rss_rating
        if self.__rss_skipHours:
            skipHours = xml_elem('skipHours', channel)
            for h in self.__rss_skipHours:
                hour = xml_elem('hour', skipHours)
                hour.text = str(h)
        if self.__rss_skipDays:
            skipDays = xml_elem('skipDays', channel)
            for d in self.__rss_skipDays:
                day = xml_elem('day', skipDays)
                day.text = d
        if self.__rss_textInput:
            textInput = xml_elem('textInput', channel)
            textInput.attrib['title'] = self.__rss_textInput.get('title')
            textInput.attrib['description'] = \
                self.__rss_textInput.get('description')
            textInput.attrib['name'] = self.__rss_textInput.get('name')
            textInput.attrib['link'] = self.__rss_textInput.get('link')
        if self.__rss_ttl:
            ttl = xml_elem('ttl', channel)
            ttl.text = str(self.__rss_ttl)
        if self.__rss_webMaster:
            webMaster = xml_elem('webMaster', channel)
            webMaster.text = self.__rss_webMaster

        if extensions:
            for ext in self.__extensions.values() or []:
                if ext.get('rss'):
                    ext['inst'].extend_rss(feed)

        for entry in self.__feed_entries:
            item = entry.rss_entry()
            channel.append(item)

        doc = etree.ElementTree(feed)
        return feed, doc
Example #4
0
    def rss_entry(self, extensions=True):
        '''Create a RSS item and return it.'''
        entry = etree.Element('item')
        if not (self.__rss_title or
                self.__rss_description or
                self.__rss_content):
            raise ValueError('Required fields not set')
        if self.__rss_title:
            title = etree.SubElement(entry, 'title')
            title.text = self.__rss_title
        if self.__rss_link:
            link = etree.SubElement(entry, 'link')
            link.text = self.__rss_link
        if self.__rss_description and self.__rss_content:
            description = etree.SubElement(entry, 'description')
            description.text = self.__rss_description
            XMLNS_CONTENT = 'http://purl.org/rss/1.0/modules/content/'
            content = etree.SubElement(entry, '{%s}encoded' % XMLNS_CONTENT)
            content.text = etree.CDATA(self.__rss_content['content']) \
                if self.__rss_content.get('type', '') == 'CDATA' \
                else self.__rss_content['content']
        elif self.__rss_description:
            description = etree.SubElement(entry, 'description')
            description.text = self.__rss_description
        elif self.__rss_content:
            description = etree.SubElement(entry, 'description')
            description.text = etree.CDATA(self.__rss_content['content']) \
                if self.__rss_content.get('type', '') == 'CDATA' \
                else self.__rss_content['content']
        for a in self.__rss_author or []:
            author = etree.SubElement(entry, 'author')
            author.text = a
        if self.__rss_guid.get('guid'):
            guid = etree.SubElement(entry, 'guid')
            guid.text = self.__rss_guid['guid']
            permaLink = str(self.__rss_guid.get('permalink', False)).lower()
            guid.attrib['isPermaLink'] = permaLink
        for cat in self.__rss_category or []:
            category = etree.SubElement(entry, 'category')
            category.text = cat['value']
            if cat.get('domain'):
                category.attrib['domain'] = cat['domain']
        if self.__rss_comments:
            comments = etree.SubElement(entry, 'comments')
            comments.text = self.__rss_comments
        if self.__rss_enclosure:
            enclosure = etree.SubElement(entry, 'enclosure')
            enclosure.attrib['url'] = self.__rss_enclosure['url']
            enclosure.attrib['length'] = self.__rss_enclosure['length']
            enclosure.attrib['type'] = self.__rss_enclosure['type']
        if self.__rss_pubDate:
            pubDate = etree.SubElement(entry, 'pubDate')
            pubDate.text = formatRFC2822(self.__rss_pubDate)
        if self.__rss_source:
            source = etree.SubElement(entry, 'source',
                                      url=self.__rss_source['url'])
            source.text = self.__rss_source['title']

        if extensions:
            for ext in self.__extensions.values() or []:
                if ext.get('rss'):
                    ext['inst'].extend_rss(entry)

        return entry
Example #5
0
	def _create_rss(self, extensions=True):
		'''Create an RSS feed xml structure containing all previously set fields.

		:returns: Tuple containing the feed root element and the element tree.
		'''
		nsmap = dict()
		if extensions:
			for ext in self.__extensions.values() or []:
				if ext.get('rss'):
					 nsmap.update( ext['inst'].extend_ns() )

		nsmap.update({'atom':  'http://www.w3.org/2005/Atom',
			'content': 'http://purl.org/rss/1.0/modules/content/'})

		feed = etree.Element('rss', version='2.0', nsmap=nsmap )
		channel = etree.SubElement(feed, 'channel')
		if not ( self.__rss_title and self.__rss_link and self.__rss_description ):
			missing = ', '.join(([] if self.__rss_title else ['title']) + \
					([] if self.__rss_link else ['link']) + \
					([] if self.__rss_description else ['description']))
			raise ValueError('Required fields not set (%s)' % missing)
		title = etree.SubElement(channel, 'title')
		title.text = self.__rss_title
		link = etree.SubElement(channel, 'link')
		link.text = self.__rss_link
		desc = etree.SubElement(channel, 'description')
		desc.text = self.__rss_description
		for ln in  self.__atom_link or []:
			# It is recommended to include a atom self link in rss documents…
			if ln.get('rel') == 'self':
				selflink = etree.SubElement(channel,
						'{http://www.w3.org/2005/Atom}link',
						href=ln['href'], rel='self')
				if ln.get('type'):
					selflink.attrib['type'] = ln['type']
				if ln.get('hreflang'):
					selflink.attrib['hreflang'] = ln['hreflang']
				if ln.get('title'):
					selflink.attrib['title'] = ln['title']
				if ln.get('length'):
					selflink.attrib['length'] = ln['length']
				break
		if self.__rss_category:
			for cat in self.__rss_category:
				category = etree.SubElement(channel, 'category')
				category.text = cat['value']
				if cat.get('domain'):
					category.attrib['domain'] = cat['domain']
		if self.__rss_cloud:
			cloud = etree.SubElement(channel, 'cloud')
			cloud.attrib['domain'] = self.__rss_cloud.get('domain')
			cloud.attrib['port'] = self.__rss_cloud.get('port')
			cloud.attrib['path'] = self.__rss_cloud.get('path')
			cloud.attrib['registerProcedure'] = self.__rss_cloud.get(
					'registerProcedure')
			cloud.attrib['protocol'] = self.__rss_cloud.get('protocol')
		if self.__rss_copyright:
			copyright = etree.SubElement(channel, 'copyright')
			copyright.text = self.__rss_copyright
		if self.__rss_docs:
			docs = etree.SubElement(channel, 'docs')
			docs.text = self.__rss_docs
		if self.__rss_generator:
			generator = etree.SubElement(channel, 'generator')
			generator.text = self.__rss_generator
		if self.__rss_image:
			image = etree.SubElement(channel, 'image')
			url = etree.SubElement(image, 'url')
			url.text = self.__rss_image.get('url')
			title = etree.SubElement(image, 'title')
			title.text = self.__rss_image['title'] \
					if self.__rss_image.get('title') else self.__rss_title
			link = etree.SubElement(image, 'link')
			link.text = self.__rss_image['link'] \
					if self.__rss_image.get('link') else self.__rss_link
			if self.__rss_image.get('width'):
				width = etree.SubElement(image, 'width')
				width.text = self.__rss_image.get('width')
			if self.__rss_image.get('height'):
				height = etree.SubElement(image, 'height')
				height.text = self.__rss_image.get('height')
			if self.__rss_image.get('description'):
				description = etree.SubElement(image, 'description')
				description.text = self.__rss_image.get('description')
		if self.__rss_language:
			language = etree.SubElement(channel, 'language')
			language.text = self.__rss_language
		if self.__rss_lastBuildDate:
			lastBuildDate = etree.SubElement(channel, 'lastBuildDate')

			lastBuildDate.text = formatRFC2822(self.__rss_lastBuildDate)
		if self.__rss_managingEditor:
			managingEditor = etree.SubElement(channel, 'managingEditor')
			managingEditor.text = self.__rss_managingEditor
		if self.__rss_pubDate:
			pubDate = etree.SubElement(channel, 'pubDate')
			pubDate.text = formatRFC2822(self.__rss_pubDate)
		if self.__rss_rating:
			rating = etree.SubElement(channel, 'rating')
			rating.text = self.__rss_rating
		if self.__rss_skipHours:
			skipHours = etree.SubElement(channel, 'skipHours')
			for h in self.__rss_skipHours:
				hour = etree.SubElement(skipHours, 'hour')
				hour.text = str(h)
		if self.__rss_skipDays:
			skipDays = etree.SubElement(channel, 'skipDays')
			for d in self.__rss_skipDays:
				day = etree.SubElement(skipDays, 'day')
				day.text = d
		if self.__rss_textInput:
			textInput = etree.SubElement(channel, 'textInput')
			textInput.attrib['title'] = self.__rss_textInput.get('title')
			textInput.attrib['description'] = self.__rss_textInput.get('description')
			textInput.attrib['name'] = self.__rss_textInput.get('name')
			textInput.attrib['link'] = self.__rss_textInput.get('link')
		if self.__rss_ttl:
			ttl = etree.SubElement(channel, 'ttl')
			ttl.text = str(self.__rss_ttl)
		if self.__rss_webMaster:
			webMaster = etree.SubElement(channel, 'webMaster')
			webMaster.text = self.__rss_webMaster

		if extensions:
			for ext in self.__extensions.values() or []:
				if ext.get('rss'):
					ext['inst'].extend_rss(feed)

		for entry in self.__feed_entries:
			item = entry.rss_entry()
			channel.append(item)

		doc = etree.ElementTree(feed)
		return feed, doc
Example #6
0
    def _create_rss(self, extensions=True):
        '''Create an RSS feed xml structure containing all previously set
        fields.

        :returns: Tuple containing the feed root element and the element tree.
        '''
        nsmap = dict()
        if extensions:
            for ext in self.__extensions.values() or []:
                if ext.get('rss'):
                    nsmap.update(ext['inst'].extend_ns())

        nsmap.update({
            'dc':
            'http://purl.org/dc/elements/1.1/',
            'sparkle':
            'http://www.andymatuschak.org/xml-namespaces/sparkle'
        })

        feed = etree.Element('rss', nsmap=nsmap, version='2.0')
        channel = etree.SubElement(feed, 'channel')
        if not (self.__rss_title and self.__rss_link
                and self.__rss_description):
            missing = ([] if self.__rss_title else ['title']) + \
                      ([] if self.__rss_link else ['link']) + \
                      ([] if self.__rss_description else ['description'])
            missing = ', '.join(missing)
            raise ValueError('Required fields not set (%s)' % missing)
        title = etree.SubElement(channel, 'title')
        title.text = self.__rss_title
        link = etree.SubElement(channel, 'link')
        link.text = self.__rss_link
        desc = etree.SubElement(channel, 'description')
        desc.text = self.__rss_description
        # for ln in self.__atom_link or []:
        #     # It is recommended to include a atom self link in rss documents…
        #     if ln.get('rel') == 'self':
        #         selflink = etree.SubElement(
        #                 channel, '{http://www.w3.org/2005/Atom}link',
        #                 href=ln['href'], rel='self')
        #         if ln.get('type'):
        #             selflink.attrib['type'] = ln['type']
        #         if ln.get('hreflang'):
        #             selflink.attrib['hreflang'] = ln['hreflang']
        #         if ln.get('title'):
        #             selflink.attrib['title'] = ln['title']
        #         if ln.get('length'):
        #             selflink.attrib['length'] = ln['length']
        #         break
        if self.__rss_category:
            for cat in self.__rss_category:
                category = etree.SubElement(channel, 'category')
                category.text = cat['value']
                if cat.get('domain'):
                    category.attrib['domain'] = cat['domain']
        if self.__rss_cloud:
            cloud = etree.SubElement(channel, 'cloud')
            cloud.attrib['domain'] = self.__rss_cloud.get('domain')
            cloud.attrib['port'] = self.__rss_cloud.get('port')
            cloud.attrib['path'] = self.__rss_cloud.get('path')
            cloud.attrib['registerProcedure'] = self.__rss_cloud.get(
                'registerProcedure')
            cloud.attrib['protocol'] = self.__rss_cloud.get('protocol')
        if self.__rss_copyright:
            copyright = etree.SubElement(channel, 'copyright')
            copyright.text = self.__rss_copyright
        # if self.__rss_docs:
        #     docs = etree.SubElement(channel, 'docs')
        #     docs.text = self.__rss_docs
        # if self.__rss_generator:
        #     generator = etree.SubElement(channel, 'generator')
        #     generator.text = self.__rss_generator
        if self.__rss_image:
            image = etree.SubElement(channel, 'image')
            url = etree.SubElement(image, 'url')
            url.text = self.__rss_image.get('url')
            title = etree.SubElement(image, 'title')
            title.text = self.__rss_image.get('title', self.__rss_title)
            link = etree.SubElement(image, 'link')
            link.text = self.__rss_image.get('link', self.__rss_link)
            if self.__rss_image.get('width'):
                width = etree.SubElement(image, 'width')
                width.text = self.__rss_image.get('width')
            if self.__rss_image.get('height'):
                height = etree.SubElement(image, 'height')
                height.text = self.__rss_image.get('height')
            if self.__rss_image.get('description'):
                description = etree.SubElement(image, 'description')
                description.text = self.__rss_image.get('description')
        if self.__rss_language:
            language = etree.SubElement(channel, 'language')
            language.text = self.__rss_language
        # if self.__rss_lastBuildDate:
        #     lastBuildDate = etree.SubElement(channel, 'lastBuildDate')
        #
        #     lastBuildDate.text = formatRFC2822(self.__rss_lastBuildDate)
        if self.__rss_managingEditor:
            managingEditor = etree.SubElement(channel, 'managingEditor')
            managingEditor.text = self.__rss_managingEditor
        if self.__rss_pubDate:
            pubDate = etree.SubElement(channel, 'pubDate')
            pubDate.text = formatRFC2822(self.__rss_pubDate)
        if self.__rss_rating:
            rating = etree.SubElement(channel, 'rating')
            rating.text = self.__rss_rating
        if self.__rss_skipHours:
            skipHours = etree.SubElement(channel, 'skipHours')
            for h in self.__rss_skipHours:
                hour = etree.SubElement(skipHours, 'hour')
                hour.text = str(h)
        if self.__rss_skipDays:
            skipDays = etree.SubElement(channel, 'skipDays')
            for d in self.__rss_skipDays:
                day = etree.SubElement(skipDays, 'day')
                day.text = d
        if self.__rss_textInput:
            textInput = etree.SubElement(channel, 'textInput')
            textInput.attrib['title'] = self.__rss_textInput.get('title')
            textInput.attrib['description'] = \
                self.__rss_textInput.get('description')
            textInput.attrib['name'] = self.__rss_textInput.get('name')
            textInput.attrib['link'] = self.__rss_textInput.get('link')
        if self.__rss_ttl:
            ttl = etree.SubElement(channel, 'ttl')
            ttl.text = str(self.__rss_ttl)
        if self.__rss_webMaster:
            webMaster = etree.SubElement(channel, 'webMaster')
            webMaster.text = self.__rss_webMaster

        if extensions:
            for ext in self.__extensions.values() or []:
                if ext.get('rss'):
                    ext['inst'].extend_rss(feed)

        for entry in self.__feed_entries:
            item = entry.rss_entry()
            channel.append(item)

        doc = etree.ElementTree(feed)
        return feed, doc