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
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
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
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
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
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