Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked
 
PerlMonks  

parse the "Private Message XML Ticker" with index and substr

by PodMaster (Abbot)
on Mar 18, 2002 at 08:28 UTC ( #152432=snippet: print w/replies, xml ) Need Help??
Description: Like the title says. Uses LWP::Simple to fetch the ticker. Requires that you provide a username and password.
#!/usr/bin/perl -w

=head1 parse the "Private Message XML Ticker" with C<index> and C<subs
+tr>

For real.  Probably won't work if the "DTD" changes (not bloody likely
+).

=cut

use strict;
use LWP::Simple;
# private message xml ticker 15848
my $user = shift or die "please supply username";
my $pass = shift or die "please supply password";
my $html = get('http://perlmonks.org/index.pl?node_id=15848;op=login;t
+icker=yes;user='
               .$user.';passwd='.$pass);

die unless $html;
warn $html;

my $fh = [split "\n", $html];

while(@{$fh}) {
    parse_private_messages(shift @{$fh}, $fh);
}
exit;


sub fmat_timestamp {
    my $s = shift;
#yyyymmddhhmmss
    my $y = substr($s,0,4,'');
    my $m = substr($s,0,2,'');
    my $d = substr($s,0,2,'');
    my $h = substr($s,0,2,'');
    my $mm = substr($s,0,2,'');
    my $ss = substr($s,0,2,'');

#yyyy-mm-dd hh:mm:ss
    return "$y-$m-$d $h:$mm:$ss";
}

sub parse_private_messages {
    my $s = shift;
    my $fh = shift;

#<message status="active" user_id="83485" author="blakem" message_id="
+539766685" time="20011130001441">
    my $sX = index($s,'<message status="'); # 17 active|archived
    my $iX = index($s,'" user_id="'); # 11
    my $aX = index($s,'" author="'); # 10
    my $mX = index($s,'" message_id="'); # 14
    my $tX = index($s,'" time="'); # 8 ++ 14

    my ($status, $id, $author, $mid, $time);

    if($sX >=0 and $iX >= 0 and $aX >= 0 and $mX >= 0 and $tX >= 0) {
        printf '(%s)(%s)(%s)(%s)(%s)'."\n", $sX, $iX, $aX, $mX, $tX;
        printf '(%s)(%s)(%s)(%s)(%s)'."\n",
            $status = substr($s,$sX + 17, $iX - $sX - 17),
            $id = substr($s,$iX + 11, $aX - $iX - 11),
            $author = substr($s,$aX + 10, $mX - $aX - 10),
            $mid= substr($s,$mX + 14, $tX - $mX - 14),
            $time= fmat_timestamp(substr($s,$tX + 8, 14)),
            ,;

        $s = shift(@{$fh});
        #</message> # 10
        print substr($s,0, -10);
        print "\n\n";
    }
}

__END__

<CHATTER><INFO site="http://perlmonks.org" sitename="Perl Monks">Rende
+red by the
 Private Message XML Ticker</INFO>
        <message status="active" user_id="83485" author="blakem" messa
+ge_id="539
766685" time="20011130001441">
heh, [podmaster] is Cheesy WebRing Member #69 ;-)</message>
        <message status="active" user_id="78006" author="no_slogan" me
+ssage_id="
539897350" time="20020314043623">
Re pseudorandom: Touche.</message>
</CHATTER>


(1)(24)(40)(56)(79)
(active)(83485)(blakem)(539766685)(2001-11-30 00:14:41)
heh, [podmaster] is Cheesy WebRing Member #69 ;-)

(1)(24)(40)(59)(82)
(active)(78006)(no_slogan)(539897350)(2002-03-14 04:36:23)
Re pseudorandom: Touche.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: snippet [id://152432]
help
Chatterbox?
[choroba]: bit vectors as keys?
[robby_dobby]: Hmm, I keep falling asleep at my desk, while maintaining an active appearance. Am I getting old?
[robby_dobby]: Every time I fall asleep, there's a small guy in the dreams, shouting "Whoo!" and it jolts me awake. :/
[Lady_Aleena]: robby_dobby, at least you aren't driving. I seem to always be driving somewhere in my dreams and end up at a weird house.
[robby_dobby]: LA: That's there. But this is work and it's the same thing as falling asleep driving :-)
[Lady_Aleena]: I love the dream where I was at a huge house and decided to go swimming in the pool, but then the tour group showed up.

How do I use this? | Other CB clients
Other Users?
Others imbibing at the Monastery: (6)
As of 2017-05-29 08:06 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?