home *** CD-ROM | disk | FTP | other *** search
/ PC World 2005 December (Special) / PCWorld_2005-12_Special_cd.bin / Bezpecnost / lsti / lsti.exe / framework-2.5.exe / nntp.mirror < prev    next >
Text File  |  2005-01-27  |  3KB  |  87 lines

  1. #!/usr/bin/perl5
  2.  
  3. ### Subject: Re: Fuller example of Net::NNTP?
  4. ### Date:  Tue, 4 Feb 1997 10:37:58 -0800
  5. ### From: "Paul E. Hoffman" <phoffman@imc.org>
  6. ### To: Graham Barr <gbarr@ti.com>
  7. ### 
  8. ### Thanks for your reply. After looking at the examples, I realized that
  9. ### you're not doing what I want, which is to store the messages on the local
  10. ### hard disk with the same message number as what was on the remote. So, I
  11. ### rolled my own program, although I haven't finished it yet (I have a hook
  12. ### for expiring, but haven't done it yet).
  13. ### 
  14. ### You are welcome to use this in the Net:: distribution if you think it is
  15. ### useful.
  16. ###
  17. ### NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE
  18. ###
  19. ### This script is included as-is, I give no guarantee that it will
  20. ### work on every system
  21. ###
  22.  
  23. use Net::NNTP;
  24.  
  25. $BaseDir = '/usr/usenet';
  26. chdir($BaseDir) or die "Could not cd to $BaseDir\n";
  27.  
  28. # Format of grouplist is:
  29. #    groupname<tab>expirationdays
  30. # expirationdays is the number of days to leave the articles around;
  31. #    set it to 0 if you want the articles to stay forever
  32. # If the groupname starts with a #, it is skipped
  33. open(GROUPLIST, 'grouplist.txt') or die "Could not open grouplist.txt\n";
  34. while(<GROUPLIST>) {
  35.         $Line = $_; chomp($Line);
  36.         if($Line eq '') { next };  # Skip blank lines
  37.         if(substr($Line, 0, 1) eq '#') { next };  # Skip comments
  38.         push(@Groups, $Line)
  39. }
  40.  
  41. $NntpPtr = Net::NNTP->new('news.server.com');
  42.  
  43. foreach $GroupLine (@Groups) {
  44.         ($GroupName, $GroupExp) = split(/\s/, $GroupLine, 2);
  45.         # Process the expiration first (still to be done...)
  46.  
  47.         # See if this is a new group
  48.         unless(-e "$BaseDir/$GroupName") {
  49.                 unless(mkdir("$BaseDir/$GroupName", 0755))
  50.                         { die "Could not make $BaseDir/$GroupName\n" }
  51.         }
  52.         chdir("$BaseDir/$GroupName") or die "Couldn't chdir to $GroupName\n";
  53.         # Find the last article in the directory
  54.         @AllInDir = <*>; @RevSortedAllInDir = reverse(sort(@AllInDir));
  55.         $LenArr = @RevSortedAllInDir;
  56.         if($LenArr > 0) { $NumLastInDir = $RevSortedAllInDir[0] }
  57.         else { $NumLastInDir = 0 }
  58.         ($NumArt, $NumFirst, $NumLast, $XGroupName) =
  59. $NntpPtr->group($GroupName);
  60.  
  61.         if($NumLast == $NumLastInDir) { next }  # No new articles
  62.         if($NumLast < $NumLastInDir)
  63.                 { die "In $GroupName, the last number was $NumLast, but the " .
  64.                         " last number in the directory was $NumLastInDir\n" }
  65.         # Figure out which article to start from
  66.         if($NumLastInDir == 0) { $GetArtNum = $NumFirst }
  67.         else { $GetArtNum = $NumLastInDir + 1 }
  68.  
  69.         # Now read each of the new articles
  70.         while(1) {  # Loop until "last" is called
  71.                 $ArtRef = $NntpPtr->article($GetArtNum);
  72.                 @ArtArr = @$ArtRef; $ArtArrLen = @ArtArr;
  73.                 if($ArtArrLen > 0 ) {  # Skip article numbers that had 0 len
  74.                         open(OUT, ">$GetArtNum") or
  75.                                 die "Could not create $GroupName/$GetArtNum\n";
  76.                         print OUT @$ArtRef; close(OUT);
  77.                 }
  78.  
  79.                 # Check if we're at the end
  80.                 if($GetArtNum == $NumLast) { last }
  81.                 $GetArtNum += 1;  # Increment the article number to get
  82.         }
  83. }
  84.  
  85. $NntpPtr->quit;
  86. exit;
  87.