Showing content from http://svn.python.org/projects/python/branches/py3k-urllib/Demo/scripts/newslist.py below:
.html containing links # to those groups beginning with . def createpage(root, tree, p): filename = os.path.join(pagedir, root+'.html') if root == rootpage: detail = '' else: detail = ' under ' + root with open(filename, 'w') as f: # f.write('Content-Type: text/html\n') f.write('\n\n') f.write(' Newsgroups available%s\n' % detail) f.write('\n\n') f.write(' Newsgroups available%s\n' % detail) f.write(' Back to top level
\n' % (httppref, rootpage)) printtree(f, tree, 0, p) f.write('\n
') f.write("This page automatically created by 'newslist' v. %s." % rcsrev) f.write(time.ctime(time.time()) + '\n') f.write('\n\n') # Printtree prints the groups as a bulleted list. Groups with # more than subgroups will be put on a separate page. # Other sets of subgroups are just indented. def printtree(f, tree, indent, p): l = len(tree) if l > sublistsize and indent > 0: # Create a new page and a link to it f.write('
' % (httppref, p[1:])) f.write(p[1:] + '.*') f.write('%s\n' % pagelinkicon) createpage(p[1:], tree, p) return kl = sorted(tree.keys()) if l > 1: if indent > 0: # Create a sub-list f.write('
%s\n
' % p[1:]) else: # Create a main list f.write('
') indent = indent + 1 for i in kl: if i == '.': # Output a newsgroup f.write('
- %s ' % (p[1:], p[1:])) if p[1:] in desc: f.write(' %s\n' % desc[p[1:]]) else: f.write('\n') else: # Output a hierarchy printtree(f, tree[i], indent, p+'.'+i) if l > 1: f.write('\n
') # Reading descriptions file --------------------------------------- # This returns a dict mapping group name to its description def readdesc(descfile): global desc desc = {} if descfile == '': return try: with open(descfile, 'r') as d: print('Reading descriptions...') for l in d: bits = l.split() try: grp = bits[0] dsc = ' '.join(bits[1:]) if len(dsc) > 1: desc[grp] = dsc except IndexError: pass except IOError: print('Failed to open description file ' + descfile) return # Check that ouput directory exists, ------------------------------ # and offer to create it if not def checkopdir(pagedir): if not os.path.isdir(pagedir): print('Directory %s does not exist.' % pagedir) print('Shall I create it for you? (y/n)') if sys.stdin.readline()[0] == 'y': try: os.mkdir(pagedir, 0o777) except: print('Sorry - failed!') sys.exit(1) else: print('OK. Exiting.') sys.exit(1) # Read and write current local tree ---------------------------------- def readlocallist(treefile): print('Reading current local group list...') tree = {} try: treetime = time.localtime(os.stat(treefile)[ST_MTIME]) except: 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) treedate = '%02d%02d%02d' % (treetime[0] % 100, treetime[1], treetime[2]) try: with open(treefile, 'rb') as dump: tree = marshal.load(dump) except IOError: print('Cannot open local group list ' + treefile) return (tree, treedate) def writelocallist(treefile, tree): try: with open(treefile, 'wb') as dump: groups = marshal.dump(tree, dump) print('Saved list to %s\n' % treefile) 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 = i[0].split()[0] if skipempty and int(i[1]) < int(i[2]): print(grpname.decode() + ' ', end=' ') else: groups.append(grpname.decode()) 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 %s...' % treedate, end=' ') info = server.newgroups(treedate, '000001')[1] print('got %d.' % len(info)) print('Processing...', end=' ') groups = [] for i in info: grpname = i.split()[0] groups.append(grpname.decode()) print('Done') return groups # Now the main program -------------------------------------------- def main(): tree = {} # Check that the output directory exists checkopdir(pagedir) try: print('Connecting to %s...' % newshost) if sys.version[0] == '0': s = NNTP.init(newshost) else: s = NNTP(newshost) connected = True except (nntplib.error_temp, nntplib.error_perm) as x: print('Error connecting to host:', x) print('I\'ll try to use just the local list.') connected = False # 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: groups = getnewgroups(s, treedate) if connected: addtotree(tree, groups) writelocallist(treefile,tree) # Read group descriptions readdesc(descfile) print('Creating pages...') createpage(rootpage, tree, '') print('Done') if __name__ == "__main__": main() # That's all folks ######################################################################
RetroSearch is an open source project built by @garambo
| Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4