mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	
		
			
	
	
		
			92 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			92 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | import sys | ||
|  | 
 | ||
|  | from xml.sax import make_parser, handler | ||
|  | 
 | ||
|  | # --- Templates | ||
|  | 
 | ||
|  | top = \ | ||
|  | """
 | ||
|  | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> | ||
|  | <HTML> | ||
|  | <HEAD> | ||
|  |   <TITLE>%s</TITLE> | ||
|  | </HEAD> | ||
|  | 
 | ||
|  | <BODY> | ||
|  | <H1>%s</H1> | ||
|  | """
 | ||
|  | 
 | ||
|  | bottom = \ | ||
|  | """
 | ||
|  | </ul> | ||
|  | 
 | ||
|  | <HR> | ||
|  | <ADDRESS> | ||
|  | Converted to HTML by sax_rss2html.py. | ||
|  | </ADDRESS> | ||
|  | 
 | ||
|  | </BODY> | ||
|  | </HTML> | ||
|  | """
 | ||
|  | 
 | ||
|  | # --- The ContentHandler | ||
|  | 
 | ||
|  | class RSSHandler(handler.ContentHandler): | ||
|  | 
 | ||
|  |     def __init__(self, out = sys.stdout): | ||
|  |         handler.ContentHandler.__init__(self) | ||
|  |         self._out = out | ||
|  | 
 | ||
|  |         self._text = "" | ||
|  |         self._parent = None | ||
|  |         self._list_started = 0 | ||
|  |         self._title = None | ||
|  |         self._link = None | ||
|  |         self._descr = "" | ||
|  | 
 | ||
|  |     # ContentHandler methods | ||
|  | 
 | ||
|  |     def startElement(self, name, attrs): | ||
|  |         if name == "channel" or name == "image" or name == "item": | ||
|  |             self._parent = name | ||
|  | 
 | ||
|  |         self._text = "" | ||
|  | 
 | ||
|  |     def endElement(self, name): | ||
|  |         if self._parent == "channel": | ||
|  |             if name == "title": | ||
|  |                 self._out.write(top % (self._text, self._text)) | ||
|  |             elif name == "description": | ||
|  |                 self._out.write("<p>%s</p>\n" % self._text) | ||
|  | 
 | ||
|  |         elif self._parent == "item": | ||
|  |             if name == "title": | ||
|  |                 self._title = self._text | ||
|  |             elif name == "link": | ||
|  |                 self._link = self._text | ||
|  |             elif name == "description": | ||
|  |                 self._descr = self._text | ||
|  |             elif name == "item": | ||
|  |                 if not self._list_started: | ||
|  |                     self._out.write("<ul>\n") | ||
|  |                     self._list_started = 1 | ||
|  | 
 | ||
|  |                 self._out.write('  <li><a href="%s">%s</a> %s\n' % | ||
|  |                                 (self._link, self._title, self._descr)) | ||
|  | 
 | ||
|  |                 self._title = None | ||
|  |                 self._link = None | ||
|  |                 self._descr = "" | ||
|  | 
 | ||
|  |         if name == "rss": | ||
|  |             self._out.write(bottom) | ||
|  |                  | ||
|  |     def characters(self, content): | ||
|  |         self._text = self._text + content | ||
|  | 
 | ||
|  | # --- Main program | ||
|  | 
 | ||
|  | parser = make_parser() | ||
|  | parser.setContentHandler(RSSHandler()) | ||
|  | parser.parse(sys.argv[1]) |