| 
									
										
										
										
											1996-11-27 19:52:01 +00:00
										 |  |  | #! /usr/bin/env python | 
					
						
							| 
									
										
										
										
											1994-05-27 13:32:41 +00:00
										 |  |  | ####################################################################### | 
					
						
							|  |  |  | # Newslist  $Revision$ | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # Syntax: | 
					
						
							|  |  |  | #    newslist [ -a ] | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # This is a program to create a directory full of HTML pages  | 
					
						
							|  |  |  | # which between them contain links to all the newsgroups available | 
					
						
							|  |  |  | # on your server. | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # The -a option causes a complete list of all groups to be read from  | 
					
						
							|  |  |  | # the server rather than just the ones which have appeared since last | 
					
						
							|  |  |  | # execution. This recreates the local list from scratch. Use this on | 
					
						
							| 
									
										
										
										
											1994-05-27 13:33:17 +00:00
										 |  |  | # the first invocation of the program, and from time to time thereafter. | 
					
						
							|  |  |  | #   When new groups are first created they may appear on your server as  | 
					
						
							|  |  |  | # empty groups. By default, empty groups are ignored by the -a option. | 
					
						
							|  |  |  | # However, these new groups will not be created again, and so will not | 
					
						
							|  |  |  | # appear in the server's list of 'new groups' at a later date. Hence it | 
					
						
							|  |  |  | # won't appear until you do a '-a' after some articles have appeared. | 
					
						
							|  |  |  | #  | 
					
						
							|  |  |  | # I should really keep a list of ignored empty groups and re-check them | 
					
						
							|  |  |  | # for articles on every run, but I haven't got around to it yet. | 
					
						
							| 
									
										
										
										
											1994-05-27 13:32:41 +00:00
										 |  |  | # | 
					
						
							|  |  |  | # This assumes an NNTP news feed. | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # Feel free to copy, distribute and modify this code for  | 
					
						
							|  |  |  | # non-commercial use. If you make any useful modifications, let me  | 
					
						
							|  |  |  | # know! | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # (c) Quentin Stafford-Fraser 1994 | 
					
						
							|  |  |  | # fraser@europarc.xerox.com                     qs101@cl.cam.ac.uk | 
					
						
							|  |  |  | #                                                                     # | 
					
						
							|  |  |  | ####################################################################### | 
					
						
							|  |  |  | import sys,nntplib, string, marshal, time, os, posix, string | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ####################################################################### | 
					
						
							|  |  |  | # Check these variables before running!                               # | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Top directory. | 
					
						
							|  |  |  | # Filenames which don't start with / are taken as being relative to this. | 
					
						
							| 
									
										
										
										
											1994-05-27 13:33:17 +00:00
										 |  |  | topdir='/anfs/qsbigdisc/web/html/newspage' | 
					
						
							| 
									
										
										
										
											1994-05-27 13:32:41 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | # The name of your NNTP host | 
					
						
							|  |  |  | # eg.  | 
					
						
							| 
									
										
										
										
											1994-05-27 13:33:17 +00:00
										 |  |  | #    newshost = 'nntp-serv.cl.cam.ac.uk' | 
					
						
							| 
									
										
										
										
											1994-05-27 13:32:41 +00:00
										 |  |  | # or use following to get the name from the NNTPSERVER environment  | 
					
						
							|  |  |  | # variable: | 
					
						
							| 
									
										
										
										
											1994-05-27 13:33:17 +00:00
										 |  |  | #    newshost = posix.environ['NNTPSERVER'] | 
					
						
							|  |  |  | newshost = 'nntp-serv.cl.cam.ac.uk' | 
					
						
							| 
									
										
										
										
											1994-05-27 13:32:41 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | # The filename for a local cache of the newsgroup list | 
					
						
							|  |  |  | treefile = 'grouptree' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # The filename for descriptions of newsgroups | 
					
						
							|  |  |  | # I found a suitable one at ftp.uu.net in /uunet-info/newgroups.gz | 
					
						
							|  |  |  | # You can set this to '' if you don't wish to use one. | 
					
						
							| 
									
										
										
										
											1994-05-27 13:33:17 +00:00
										 |  |  | descfile = 'newsgroups' | 
					
						
							| 
									
										
										
										
											1994-05-27 13:32:41 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | # The directory in which HTML pages should be created | 
					
						
							|  |  |  | # eg. | 
					
						
							|  |  |  | #   pagedir  = '/usr/local/lib/html/newspage' | 
					
						
							|  |  |  | #   pagedir  = 'pages'  | 
					
						
							|  |  |  | pagedir  = topdir | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # The html prefix which will refer to this directory | 
					
						
							|  |  |  | # eg.  | 
					
						
							|  |  |  | #   httppref = '/newspage/',  | 
					
						
							| 
									
										
										
										
											1994-05-27 13:33:17 +00:00
										 |  |  | # or leave blank for relative links between pages: (Recommended) | 
					
						
							|  |  |  | #   httppref = '' | 
					
						
							| 
									
										
										
										
											1994-05-27 13:32:41 +00:00
										 |  |  | httppref = '' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # The name of the 'root' news page in this directory.  | 
					
						
							|  |  |  | # A .html suffix will be added. | 
					
						
							| 
									
										
										
										
											1994-05-27 13:33:17 +00:00
										 |  |  | rootpage = 'root' | 
					
						
							| 
									
										
										
										
											1994-05-27 13:32:41 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | # Set skipempty to 0 if you wish to see links to empty groups as well. | 
					
						
							|  |  |  | # Only affects the -a option. | 
					
						
							| 
									
										
										
										
											1994-05-27 13:33:17 +00:00
										 |  |  | skipempty = 1 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # pagelinkicon can contain html to put an icon after links to | 
					
						
							|  |  |  | # further pages. This helps to make important links stand out. | 
					
						
							|  |  |  | # Set to '' if not wanted, or '...' is quite a good one. | 
					
						
							|  |  |  | pagelinkicon='... <img src="http://pelican.cl.cam.ac.uk/icons/page.xbm"> ' | 
					
						
							| 
									
										
										
										
											1994-05-27 13:32:41 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | # --------------------------------------------------------------------- | 
					
						
							|  |  |  | # Less important personal preferences: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Sublistsize controls the maximum number of items the will appear as | 
					
						
							|  |  |  | # an indented sub-list before the whole thing is moved onto a different | 
					
						
							|  |  |  | # page. The smaller this is, the more pages you will have, but the  | 
					
						
							|  |  |  | # shorter each will be. | 
					
						
							|  |  |  | sublistsize = 4 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # That should be all.                                                 # | 
					
						
							|  |  |  | ####################################################################### | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1994-08-19 15:02:57 +00:00
										 |  |  | for dir in os.curdir, os.environ['HOME']: | 
					
						
							| 
									
										
										
										
											1998-09-14 16:44:15 +00:00
										 |  |  |     rcfile = os.path.join(dir, '.newslistrc.py') | 
					
						
							|  |  |  |     if os.path.exists(rcfile): | 
					
						
							|  |  |  |         print rcfile | 
					
						
							|  |  |  |         execfile(rcfile) | 
					
						
							|  |  |  |         break | 
					
						
							| 
									
										
										
										
											1994-08-19 15:02:57 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1994-05-27 13:32:41 +00:00
										 |  |  | from nntplib import NNTP | 
					
						
							|  |  |  | from stat import * | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-12-09 19:39:12 +00:00
										 |  |  | rcsrev = '$Revision$' | 
					
						
							|  |  |  | rcsrev = string.join(filter(lambda s: '$' not in s, string.split(rcsrev))) | 
					
						
							| 
									
										
										
										
											1994-05-27 13:32:41 +00:00
										 |  |  | desc = {} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Make (possibly) relative filenames into absolute ones | 
					
						
							|  |  |  | treefile = os.path.join(topdir,treefile) | 
					
						
							|  |  |  | descfile = os.path.join(topdir,descfile) | 
					
						
							|  |  |  | page = os.path.join(topdir,pagedir) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # First the bits for creating trees --------------------------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Addtotree creates/augments a tree from a list of group names | 
					
						
							|  |  |  | def addtotree(tree, groups): | 
					
						
							|  |  |  |    print 'Updating tree...' | 
					
						
							|  |  |  |    for i in groups: | 
					
						
							| 
									
										
										
										
											1998-09-14 16:44:15 +00:00
										 |  |  |         parts = string.splitfields(i,'.') | 
					
						
							|  |  |  |         makeleaf(tree, parts) | 
					
						
							| 
									
										
										
										
											1994-05-27 13:32:41 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | # Makeleaf makes a leaf and the branch leading to it if necessary | 
					
						
							|  |  |  | def makeleaf(tree,path): | 
					
						
							|  |  |  |    j = path[0] | 
					
						
							|  |  |  |    l = len(path) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    if not tree.has_key(j): | 
					
						
							|  |  |  |       tree[j] = {} | 
					
						
							|  |  |  |    if l == 1: | 
					
						
							|  |  |  |       tree[j]['.'] = '.' | 
					
						
							|  |  |  |    if l > 1: | 
					
						
							|  |  |  |       makeleaf(tree[j],path[1:]) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1998-09-14 16:44:15 +00:00
										 |  |  | # Then the bits for outputting trees as pages ----------------   | 
					
						
							| 
									
										
										
										
											1994-05-27 13:32:41 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | # Createpage creates an HTML file named <root>.html containing links | 
					
						
							|  |  |  | # to those groups beginning with <root>. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def createpage(root, tree, p): | 
					
						
							|  |  |  |    filename = os.path.join(pagedir,root+'.html') | 
					
						
							|  |  |  |    if root == rootpage: | 
					
						
							|  |  |  |       detail = '' | 
					
						
							|  |  |  |    else: | 
					
						
							|  |  |  |       detail = ' under ' + root | 
					
						
							|  |  |  |    f = open(filename,'w') | 
					
						
							|  |  |  |    # f.write('Content-Type: text/html\n') | 
					
						
							|  |  |  |    f.write('<TITLE>Newsgroups available' + detail + '</TITLE>\n') | 
					
						
							|  |  |  |    f.write('<H1>Newsgroups available' + detail +'</H1>\n') | 
					
						
							|  |  |  |    f.write('<A HREF="'+httppref+rootpage+'.html">Back to top level</A><P>\n') | 
					
						
							|  |  |  |    printtree(f,tree,0,p) | 
					
						
							|  |  |  |    f.write('<I>This page automatically created by \'newslist\' v. '+rcsrev+'.') | 
					
						
							|  |  |  |    f.write(time.ctime(time.time()) + '</I><P>') | 
					
						
							|  |  |  |    f.close() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Printtree prints the groups as a bulleted list.  Groups with | 
					
						
							|  |  |  | # more than <sublistsize> subgroups will be put on a separate page. | 
					
						
							|  |  |  | # Other sets of subgroups are just indented. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def printtree(f, tree, indent, p): | 
					
						
							|  |  |  |    global desc | 
					
						
							|  |  |  |    l = len(tree) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    if l > sublistsize and indent>0: | 
					
						
							|  |  |  |       # Create a new page and a link to it | 
					
						
							|  |  |  |       f.write('<LI><B><A HREF="'+httppref+p[1:]+'.html">') | 
					
						
							| 
									
										
										
										
											1994-05-27 13:33:17 +00:00
										 |  |  |       f.write(p[1:]+'.*') | 
					
						
							|  |  |  |       f.write('</A></B>'+pagelinkicon+'\n') | 
					
						
							| 
									
										
										
										
											1994-05-27 13:32:41 +00:00
										 |  |  |       createpage(p[1:], tree, p) | 
					
						
							|  |  |  |       return | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    kl = tree.keys() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    if l > 1: | 
					
						
							|  |  |  |       kl.sort() | 
					
						
							|  |  |  |       if indent > 0: | 
					
						
							| 
									
										
										
										
											1998-09-14 16:44:15 +00:00
										 |  |  |          # Create a sub-list | 
					
						
							|  |  |  |          f.write('<LI>'+p[1:]+'\n<UL>') | 
					
						
							| 
									
										
										
										
											1994-05-27 13:32:41 +00:00
										 |  |  |       else: | 
					
						
							| 
									
										
										
										
											1998-09-14 16:44:15 +00:00
										 |  |  |          # Create a main list | 
					
						
							|  |  |  |          f.write('<UL>') | 
					
						
							| 
									
										
										
										
											1994-05-27 13:32:41 +00:00
										 |  |  |       indent = indent + 1 | 
					
						
							|  |  |  |     | 
					
						
							|  |  |  |    for i in kl: | 
					
						
							|  |  |  |       if i == '.': | 
					
						
							| 
									
										
										
										
											1998-09-14 16:44:15 +00:00
										 |  |  |          # Output a newsgroup | 
					
						
							|  |  |  |          f.write('<LI><A HREF="news:' + p[1:] + '">'+ p[1:] + '</A> ') | 
					
						
							|  |  |  |          if desc.has_key(p[1:]): | 
					
						
							|  |  |  |             f.write('     <I>'+desc[p[1:]]+'</I>\n') | 
					
						
							|  |  |  |          else: | 
					
						
							|  |  |  |             f.write('\n') | 
					
						
							| 
									
										
										
										
											1994-05-27 13:32:41 +00:00
										 |  |  |       else: | 
					
						
							| 
									
										
										
										
											1998-09-14 16:44:15 +00:00
										 |  |  |          # Output a hierarchy | 
					
						
							|  |  |  |          printtree(f,tree[i], indent, p+'.'+i) | 
					
						
							| 
									
										
										
										
											1994-05-27 13:32:41 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |    if l > 1: | 
					
						
							|  |  |  |       f.write('\n</UL>') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Reading descriptions file --------------------------------------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # This returns an array mapping group name to its description | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1994-05-27 13:33:17 +00:00
										 |  |  | def readdesc(descfile): | 
					
						
							| 
									
										
										
										
											1994-05-27 13:32:41 +00:00
										 |  |  |    global desc | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    desc = {} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    if descfile == '': | 
					
						
							| 
									
										
										
										
											1998-09-14 16:44:15 +00:00
										 |  |  |         return | 
					
						
							| 
									
										
										
										
											1994-05-27 13:32:41 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |    try: | 
					
						
							|  |  |  |       d = open(descfile, 'r') | 
					
						
							|  |  |  |       print 'Reading descriptions...' | 
					
						
							|  |  |  |    except (IOError): | 
					
						
							|  |  |  |       print 'Failed to open description file ' + descfile | 
					
						
							|  |  |  |       return | 
					
						
							|  |  |  |    l = d.readline() | 
					
						
							|  |  |  |    while l != '': | 
					
						
							|  |  |  |       bits = string.split(l) | 
					
						
							|  |  |  |       try: | 
					
						
							| 
									
										
										
										
											1998-09-14 16:44:15 +00:00
										 |  |  |          grp = bits[0] | 
					
						
							|  |  |  |          dsc = string.join(bits[1:]) | 
					
						
							|  |  |  |          if len(dsc)>1: | 
					
						
							|  |  |  |             desc[grp] = dsc | 
					
						
							| 
									
										
										
										
											1994-05-27 13:32:41 +00:00
										 |  |  |       except (IndexError): | 
					
						
							| 
									
										
										
										
											1998-09-14 16:44:15 +00:00
										 |  |  |          pass | 
					
						
							| 
									
										
										
										
											1994-05-27 13:32:41 +00:00
										 |  |  |       l = d.readline() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1994-05-27 13:33:17 +00:00
										 |  |  | # Check that ouput directory exists, ------------------------------ | 
					
						
							|  |  |  | # and offer to create it if not | 
					
						
							| 
									
										
										
										
											1994-05-27 13:32:41 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1994-05-27 13:33:17 +00:00
										 |  |  | def checkopdir(pagedir): | 
					
						
							| 
									
										
										
										
											1994-05-27 13:32:41 +00:00
										 |  |  |    if not os.path.isdir(pagedir): | 
					
						
							|  |  |  |       print 'Directory '+pagedir+' does not exist.' | 
					
						
							|  |  |  |       print 'Shall I create it for you? (y/n)' | 
					
						
							|  |  |  |       if sys.stdin.readline()[0] == 'y': | 
					
						
							| 
									
										
										
										
											1998-09-14 16:44:15 +00:00
										 |  |  |          try: | 
					
						
							|  |  |  |             os.mkdir(pagedir,0777) | 
					
						
							|  |  |  |          except: | 
					
						
							|  |  |  |             print 'Sorry - failed!' | 
					
						
							|  |  |  |             sys.exit(1) | 
					
						
							| 
									
										
										
										
											1994-05-27 13:32:41 +00:00
										 |  |  |       else: | 
					
						
							| 
									
										
										
										
											1998-09-14 16:44:15 +00:00
										 |  |  |          print 'OK. Exiting.' | 
					
						
							|  |  |  |          sys.exit(1) | 
					
						
							| 
									
										
										
										
											1994-05-27 13:32:41 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1994-05-27 13:33:17 +00:00
										 |  |  | # Read and write current local tree ---------------------------------- | 
					
						
							| 
									
										
										
										
											1994-05-27 13:32:41 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1994-05-27 13:33:17 +00:00
										 |  |  | def readlocallist(treefile): | 
					
						
							| 
									
										
										
										
											1994-05-27 13:32:41 +00:00
										 |  |  |       print 'Reading current local group list...' | 
					
						
							| 
									
										
										
										
											1994-05-27 13:33:17 +00:00
										 |  |  |       tree = {} | 
					
						
							| 
									
										
										
										
											1994-05-27 13:32:41 +00:00
										 |  |  |       try: | 
					
						
							| 
									
										
										
										
											1998-09-14 16:44:15 +00:00
										 |  |  |          treetime = time.localtime(os.stat(treefile)[ST_MTIME]) | 
					
						
							| 
									
										
										
										
											1994-05-27 13:32:41 +00:00
										 |  |  |       except: | 
					
						
							| 
									
										
										
										
											1998-09-14 16:44:15 +00:00
										 |  |  |          print '\n*** Failed to open local group cache '+treefile | 
					
						
							|  |  |  |          print 'If this is the first time you have run newslist, then' | 
					
						
							|  |  |  |          print 'use the -a option to create it.' | 
					
						
							|  |  |  |          sys.exit(1) | 
					
						
							| 
									
										
										
										
											1994-05-27 13:32:41 +00:00
										 |  |  |       treedate = '%02d%02d%02d' % (treetime[0] % 100 ,treetime[1], treetime[2]) | 
					
						
							|  |  |  |       try: | 
					
						
							| 
									
										
										
										
											1998-09-14 16:44:15 +00:00
										 |  |  |          dump = open(treefile,'r') | 
					
						
							|  |  |  |          tree = marshal.load(dump) | 
					
						
							|  |  |  |          dump.close() | 
					
						
							| 
									
										
										
										
											1994-05-27 13:32:41 +00:00
										 |  |  |       except (IOError): | 
					
						
							| 
									
										
										
										
											1998-09-14 16:44:15 +00:00
										 |  |  |          print 'Cannot open local group list ' + treefile | 
					
						
							| 
									
										
										
										
											1994-05-27 13:33:17 +00:00
										 |  |  |       return (tree, treedate) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def writelocallist(treefile, tree): | 
					
						
							|  |  |  |    try: | 
					
						
							|  |  |  |       dump = open(treefile,'w') | 
					
						
							|  |  |  |       groups = marshal.dump(tree,dump) | 
					
						
							|  |  |  |       dump.close() | 
					
						
							|  |  |  |       print 'Saved list to '+treefile+'\n' | 
					
						
							|  |  |  |    except: | 
					
						
							|  |  |  |       print 'Sorry - failed to write to local group cache '+treefile | 
					
						
							|  |  |  |       print 'Does it (or its directory) have the correct permissions?' | 
					
						
							|  |  |  |       sys.exit(1) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Return list of all groups on server ----------------------------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def getallgroups(server): | 
					
						
							|  |  |  |    print 'Getting list of all groups...' | 
					
						
							|  |  |  |    treedate='010101' | 
					
						
							|  |  |  |    info = server.list()[1] | 
					
						
							|  |  |  |    groups = [] | 
					
						
							|  |  |  |    print 'Processing...' | 
					
						
							|  |  |  |    if skipempty: | 
					
						
							|  |  |  |       print '\nIgnoring following empty groups:' | 
					
						
							|  |  |  |    for i in info: | 
					
						
							|  |  |  |       grpname = string.split(i[0])[0] | 
					
						
							|  |  |  |       if skipempty and string.atoi(i[1]) < string.atoi(i[2]): | 
					
						
							| 
									
										
										
										
											1998-09-14 16:44:15 +00:00
										 |  |  |          print grpname+' ', | 
					
						
							| 
									
										
										
										
											1994-05-27 13:33:17 +00:00
										 |  |  |       else: | 
					
						
							| 
									
										
										
										
											1998-09-14 16:44:15 +00:00
										 |  |  |          groups.append(grpname) | 
					
						
							| 
									
										
										
										
											1994-05-27 13:33:17 +00:00
										 |  |  |    print '\n' | 
					
						
							|  |  |  |    if skipempty: | 
					
						
							|  |  |  |       print '(End of empty groups)' | 
					
						
							|  |  |  |    return groups | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Return list of new groups on server ----------------------------- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def getnewgroups(server, treedate): | 
					
						
							|  |  |  |    print 'Getting list of new groups since start of '+treedate+'...', | 
					
						
							|  |  |  |    info = server.newgroups(treedate,'000001')[1] | 
					
						
							|  |  |  |    print 'got '+`len(info)`+'.' | 
					
						
							|  |  |  |    print 'Processing...', | 
					
						
							|  |  |  |    groups = [] | 
					
						
							|  |  |  |    for i in info: | 
					
						
							|  |  |  |       grpname = string.split(i)[0] | 
					
						
							|  |  |  |       groups.append(grpname) | 
					
						
							|  |  |  |    print 'Done' | 
					
						
							|  |  |  |    return groups | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Now the main program -------------------------------------------- | 
					
						
							| 
									
										
										
										
											1994-05-27 13:32:41 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1994-05-27 13:33:17 +00:00
										 |  |  | def main(): | 
					
						
							|  |  |  |    global desc | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    tree={} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    # Check that the output directory exists | 
					
						
							|  |  |  |    checkopdir(pagedir); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    try: | 
					
						
							|  |  |  |       print 'Connecting to '+newshost+'...' | 
					
						
							|  |  |  |       if sys.version[0] == '0': | 
					
						
							| 
									
										
										
										
											1998-09-14 16:44:15 +00:00
										 |  |  |          s = NNTP.init(newshost) | 
					
						
							| 
									
										
										
										
											1994-05-27 13:33:17 +00:00
										 |  |  |       else: | 
					
						
							| 
									
										
										
										
											1998-09-14 16:44:15 +00:00
										 |  |  |          s = NNTP(newshost) | 
					
						
							| 
									
										
										
										
											1994-05-27 13:33:17 +00:00
										 |  |  |       connected = 1 | 
					
						
							|  |  |  |    except (nntplib.error_temp, nntplib.error_perm), x: | 
					
						
							|  |  |  |       print 'Error connecting to host:', x | 
					
						
							|  |  |  |       print 'I\'ll try to use just the local list.' | 
					
						
							|  |  |  |       connected = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    # If -a is specified, read the full list of groups from server    | 
					
						
							|  |  |  |    if connected and len(sys.argv) > 1 and sys.argv[1] == '-a': | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |      groups = getallgroups(s) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    # Otherwise just read the local file and then add | 
					
						
							|  |  |  |    # groups created since local file last modified. | 
					
						
							|  |  |  |    else: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       (tree, treedate) = readlocallist(treefile) | 
					
						
							|  |  |  |       if connected: | 
					
						
							| 
									
										
										
										
											1998-09-14 16:44:15 +00:00
										 |  |  |          groups = getnewgroups(s, treedate) | 
					
						
							| 
									
										
										
										
											1994-05-27 13:33:17 +00:00
										 |  |  |        | 
					
						
							| 
									
										
										
										
											1994-05-27 13:32:41 +00:00
										 |  |  |    if connected: | 
					
						
							|  |  |  |       addtotree(tree, groups) | 
					
						
							| 
									
										
										
										
											1994-05-27 13:33:17 +00:00
										 |  |  |       writelocallist(treefile,tree) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |    # Read group descriptions | 
					
						
							|  |  |  |    readdesc(descfile) | 
					
						
							| 
									
										
										
										
											1994-05-27 13:32:41 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |    print 'Creating pages...' | 
					
						
							|  |  |  |    createpage(rootpage, tree, '') | 
					
						
							|  |  |  |    print 'Done' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | main() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # That's all folks | 
					
						
							|  |  |  | ###################################################################### |