minimal nntp client

Discussion in 'Ruby' started by Gerry Ford, Mar 13, 2008.

  1. Gerry Ford

    Gerry Ford Guest

    I'm relatively new to ruby, having had one thread regarding commenting.

    I'd like to move on to a more authentic task. I would like to write an
    analogous script in ruby as this perl script:
    ## minimal nntp client


    #!/usr/bin/perl -1

    use strict;
    use warnings;
    use Net::NNTP;
    use Date::parse;

    my $nsrv='news.newsgroups.com';
    my $grp='alt.religion.mormon';
    my $USER = '';
    my $PASS = '';

    my $nntp=Net::NNTP->new($nsrv) or die "Can't login to `$nsrv'$!\n";
    $nntp->authinfo($USER,$PASS) or die $!;
    my (undef, $first, $last, undef)=$nntp->group($grp)
    or die "Can't access $grp\n";

    my ($since, @arts)=time-5*60*60;
    for (reverse $first..$last) {
    my %hdr=map /^(\S[^:]+):\s(.*)$/g, @{$nntp->head($_)};
    defined(my $date=$hdr{'NNTP-Posting-Date'}) or next;
    defined(my $time=str2time $date)
    or warn "Couldn't parse date for article $_ ($date)\n"
    and next;
    last if $time < $since;
    unshift @arts, $_;
    }

    $nntp->article($_,\*STDOUT) for @arts;

    # perl client2.pl >text59.txt 2>text56.txt
    __END__

    This script retrieves the messages of the last five hours in the
    specified ng.

    Q1) What is the ruby analog to the perl use of strict and warnings?

    Q2) What analog does ruby have of net:nntp?

    Thanks in advance,
    --
    Posted via http://www.ruby-forum.com/.
    Gerry Ford, Mar 13, 2008
    #1
    1. Advertising

  2. Gerry Ford wrote:
    > I'm relatively new to ruby, having had one thread regarding commenting.
    >
    > I'd like to move on to a more authentic task. I would like to write an
    > analogous script in ruby as this perl script:
    > ## minimal nntp client
    >
    >
    > #!/usr/bin/perl -1
    >
    > use strict;
    > use warnings;
    > use Net::NNTP;
    > use Date::parse;
    >
    > my $nsrv='news.newsgroups.com';
    > my $grp='alt.religion.mormon';
    > my $USER = '';
    > my $PASS = '';
    >
    > my $nntp=Net::NNTP->new($nsrv) or die "Can't login to `$nsrv'$!\n";
    > $nntp->authinfo($USER,$PASS) or die $!;
    > my (undef, $first, $last, undef)=$nntp->group($grp)
    > or die "Can't access $grp\n";
    >
    > my ($since, @arts)=time-5*60*60;
    > for (reverse $first..$last) {
    > my %hdr=map /^(\S[^:]+):\s(.*)$/g, @{$nntp->head($_)};
    > defined(my $date=$hdr{'NNTP-Posting-Date'}) or next;
    > defined(my $time=str2time $date)
    > or warn "Couldn't parse date for article $_ ($date)\n"
    > and next;
    > last if $time < $since;
    > unshift @arts, $_;
    > }
    >
    > $nntp->article($_,\*STDOUT) for @arts;
    >
    > # perl client2.pl >text59.txt 2>text56.txt
    > __END__
    >
    > This script retrieves the messages of the last five hours in the
    > specified ng.
    >
    > Q1) What is the ruby analog to the perl use of strict and warnings?
    >
    > Q2) What analog does ruby have of net:nntp?
    >
    > Thanks in advance,


    Shameless plug:

    There's my small library at
    http://rubyforge.org/projects/ruby-net-nntp/. Can be installed via
    rubygems (gem install ruby-net-nntp) and used according to the
    documentation.

    It's still not 100% feature complete, so I consider it in beta state,
    but covers most ofyour needs, and if you need assistance, just ask me.

    tony
    Anton Bangratz, Mar 13, 2008
    #2
    1. Advertising

  3. On Thu, Mar 13, 2008 at 2:32 AM, Gerry Ford <> wrote:
    >
    > Q1) What is the ruby analog to the perl use of strict and warnings?
    >


    I am not really experienced in Perl, but as I understand it. strict
    enforces that you have to declare variables, so that when you mistype
    something an error occurrs. You get a NameError in Ruby when you use a
    variable which hasn't any value assigned:

    # irb
    # foo has a value
    foo = "Hello"
    puts foo # "Hello"

    # bar is not declared
    puts bar

    # NameError: undefined local variable or method `bar' for main:Object
    # from (irb):6

    As far as I know you can't turn warnings on from your code, but you
    can run Ruby with the "-w" option which shows warnings.
    Thomas Wieczorek, Mar 13, 2008
    #3
  4. Gerry Ford

    Gerry Ford Guest

    Anton Bangratz wrote:
    > Gerry Ford wrote:


    >> Q2) What analog does ruby have of net:nntp?
    >>
    >> Thanks in advance,

    >
    > Shameless plug:
    >
    > There's my small library at
    > http://rubyforge.org/projects/ruby-net-nntp/. Can be installed via
    > rubygems (gem install ruby-net-nntp) and used according to the
    > documentation.
    >
    > It's still not 100% feature complete, so I consider it in beta state,
    > but covers most ofyour needs, and if you need assistance, just ask me.

    Thanks Anton.

    I downloaded your library as well as the nntp gem. My next question is
    where I should put it. When I downloaded a perl date::parse module,
    what they expect is that it gets put in the site file, and then has a
    folder called 'Date' wherein lies Parse.pm

    This screenshot shows my gem subdirectory: http://zaxfuuq.net/ruby5.jpg
    The directory just keeps sprawling. Where all would ruby.exe look
    for something required?

    My second question is how to call something from these gems. They seem
    inscrutable to me.

    Beautiful night here in New Mexico. Cheers.
    --



    --
    Posted via http://www.ruby-forum.com/.
    Gerry Ford, Mar 14, 2008
    #4
  5. Gerry Ford

    Gerry Ford Guest

    Thomas Wieczorek wrote:
    > On Thu, Mar 13, 2008 at 2:32 AM, Gerry Ford <> wrote:
    >>
    >> Q1) What is the ruby analog to the perl use of strict and warnings?
    >>

    >
    > I am not really experienced in Perl, but as I understand it. strict
    > enforces that you have to declare variables, so that when you mistype
    > something an error occurrs. You get a NameError in Ruby when you use a
    > variable which hasn't any value assigned:
    >
    > # irb
    > # foo has a value
    > foo = "Hello"
    > puts foo # "Hello"
    >
    > # bar is not declared
    > puts bar
    >
    > # NameError: undefined local variable or method `bar' for main:Object
    > # from (irb):6
    >
    > As far as I know you can't turn warnings on from your code, but you
    > can run Ruby with the "-w" option which shows warnings.

    Thanks, Thomas. It sounds like ruby is already "strict" in the perl
    sense. As for warnings, I'll enable them on the goocher, which is what
    I call a dos command that I comment out at the end of a script: Thus

    # perl client2.pl >text59.txt 2>text56.txt
    __END__
    becomes, in ruby, with warnings enabled:

    # ruby -w client2.rb >text59.txt 2>text56.txt
    __END__

    Cheers.
    --
    --
    Posted via http://www.ruby-forum.com/.
    Gerry Ford, Mar 14, 2008
    #5
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Catherina Svensson
    Replies:
    0
    Views:
    465
    Catherina Svensson
    May 19, 2008
  2. Gregory Brown
    Replies:
    1
    Views:
    122
    Matt Todd
    Sep 11, 2006
  3. Anton Bangratz
    Replies:
    0
    Views:
    160
    Anton Bangratz
    Jun 4, 2008
  4. Replies:
    7
    Views:
    382
    Dr.Ruud
    Aug 9, 2006
  5. sadie-no-reply

    Posting to nntp newsgroup with Perl (Net::NNTP)

    sadie-no-reply, Mar 4, 2007, in forum: Perl Misc
    Replies:
    3
    Views:
    284
    Jamie
    Mar 5, 2007
Loading...

Share This Page