#!/usr/bin/perl -w # # $Id: traffic.pl,v 1.3 2004/10/18 20:53:39 nedko Exp $ # # Script to fetch traffic stats from support.netissat.bg # # ~/.trafficrc should exist and contain statements, one per line in form: # variable = value # Any whitespace before and after variable name and value is ignored. # username and password variables should be set. # # ~/.trafficrc example: # username = cab001705 # password = mysecret # use strict; use LWP::UserAgent; use HTTP::Request::Common; use HTTP::Cookies; sub ParseConfigFile($); sub Login($); sub Parse($); sub Logout($); my %netissat_stats; ParseConfigFile(\%netissat_stats); if (!$netissat_stats{'username'}) { print "Username not set\n"; exit 1; } if (!$netissat_stats{'password'}) { print "Password not set\n"; exit 1; } $netissat_stats{'cookie_jar'} = HTTP::Cookies->new(); $netissat_stats{'user_agent'} = LWP::UserAgent->new; $netissat_stats{'user_agent'}->timeout(10); $netissat_stats{'user_agent'}->env_proxy; $netissat_stats{'user_agent'}->cookie_jar($netissat_stats{'cookie_jar'}); # Login Login(\%netissat_stats); # Parse output Parse(\%netissat_stats); print "Period: $netissat_stats{'period'}\n"; print "Generated traffic: $netissat_stats{'generated_traffic'} MB\n"; print "Base traffic bought: $netissat_stats{'base_bought_traffic'} MB\n"; print "Additional traffic bought: $netissat_stats{'additional_bought_traffic'} MB\n"; print "Traffic left: $netissat_stats{'traffic_left'} MB\n"; print "End of payed period: $netissat_stats{'end_of_payed_period'}\n"; # Logout Logout(\%netissat_stats); sub Login($) { my $obj = shift; my $request; my $response; #print "Logging in user \"$obj->{'username'}\" ...\n"; $request = GET('https://support.netissat.bg/index.html'); $response = $obj->{'user_agent'}->request($request); $request = POST('https://support.netissat.bg/index.html?action=t', [username => $obj->{'username'}, password => $obj->{'password'}, Submit => " Влез "]); $response = $obj->{'user_agent'}->request($request); if (!$response->is_success) { die $response->status_line; } $obj->{'status'} = $response->content; # print "------------------------.\n"; # print $obj->{'status'}; # print "------------------------.\n"; if ($obj->{'status'} =~ /]*>\s*Потребител:\s*]*>\s*(\S+)\s*<\/span><\/td>/ && $1 eq $obj->{'username'}) { #print "User \"$1\" logged in.\n"; } else { print "Login failed.\n"; exit 1; } } sub Parse($) { my $obj = shift; if ($obj->{'status'} =~ /]*>\s*Вие ползвате услугата:\s*]*>\s*(.*?)\s*<\/span><\/td>/) { print "Service: \"$1\"\n"; } else { print "Parse error.\n"; exit 1; } if ($obj->{'status'} =~ /]*>Текущ месец:\s*(\d{2}-\d{2}-\d{4})\s*-\s*(\d{2}-\d{2}-\d{4})\s*<\/td>/) { $obj->{'period'} = "$1 - $2"; } else { print "Parse error.\n"; exit 1; } if ($obj->{'status'} =~ /]*>Генериран трафик:<\/td>\s*]*>([0-9.]+) /) { $obj->{'generated_traffic'} = $1; } else { print "Parse error.\n"; exit 1; } if ($obj->{'status'} =~ /]*>Платен трафик:<\/td>\s*]*>([0-9.]+) /) { $obj->{'base_bought_traffic'} = $1; } else { print "Parse error.\n"; exit 1; } if ($obj->{'status'} =~ /]*>Допълнителен трафик:<\/td>\s*]*>([0-9.]+) /) { $obj->{'additional_bought_traffic'} = $1; } else { print "Parse error.\n"; exit 1; } if ($obj->{'status'} =~ /]*>Оставащ трафик до края на месеца:\s*
\s*<\/td>\s*]*>([0-9.]+) /) { $obj->{'traffic_left'} = $1; } else { print "Parse error.\n"; exit 1; } if ($obj->{'status'} =~ /]*>\s*Услугата е платена до:\s*<\/td>\s*]*>\s*(\d{2}-\d{2}-\d{4})\s*<\/td>/) { $obj->{'end_of_payed_period'} = $1; } else { print "Parse error.\n"; exit 1; } } sub Logout($) { my $obj = shift; my $request = GET('https://support.netissat.bg/logout.html'); my $response = $obj->{'user_agent'}->request($request); } sub ParseConfigFile($) { my $obj = shift; open(CONFIGFILE, $ENV{"HOME"} . "/.trafficrc") || die "Cannot open ~/.trafficrc"; while () { next if (/^\s*\#/); # ignore lines starting with a # if (/^\s*username\s*=\s*(.*?)\s*$/i) { $obj->{'username'} = $1; } elsif (/^\s*password\s*=\s*(.*?)\s*$/i) { $obj->{'password'} = $1; } } close(CONFIGFILE); }