package App::TwitShell; use App::TwitShell::Resources; use App::TwitShell::Resources::Get; use App::TwitShell::Resources::Send; use Getopt::Long; use strict; use warnings; =head1 NAME App::TwitShell - Container for TwitShell objects's functions. =head1 VERSION Version 4.10 =cut our $VERSION = 4.10; =head1 SYNOPSIS App::TwitShell contains some common functions used with the TwitShell client object. =head1 METHODS =head2 new() Create an instance of the Twitter client and assign some default values. =cut sub new { my ($class) = @_; my $self = bless({configfile => $ENV{'HOME'}.'/.twitshellrc', count => 20, network => 'twitter', shorten => 0, refresh => 0, secs => 45 }, $class); return $self; } =head2 parse_config() Parse the .twitshellrc file. =cut sub parse_config { my $self = shift; open(CONFIG, $self -> {'configfile'}) or error("$!"); while (<CONFIG>) { chomp; # no newline s/#.*//; # no comments s/^\s+//; # no leading white s/\s+$//; # no trailing white next unless length; # anything left? my ($var, $value) = split(/\s*=\s*/, $_, 2); $self -> {$var} = $value; } } =head2 parse_arguments() Parse the command-line arguments. =cut sub parse_arguments { my $self = shift; my $getopt = Getopt::Long::GetOptions( 'action=s' => \$self -> {'action'}, 'id=i' => \$self -> {'id'}, 'msg=s' => \$self -> {'msg'}, 'username=s' => \$self -> {'username'}, 'network=s' => \$self -> {'network'}, 'count=i' => \$self -> {'count'}, 'refresh=i' => \$self -> {'refresh'}, 'secs=i' => \$self -> {'username'}, 'shorten=i' => \$self -> {'username'}, 'recipient=s'=> \$self -> {'recipient'} ); } =head2 run() Execute the action contant in 'action'. =cut sub run { my $self = shift; error("Missing 'username'") if $self -> {'username'} eq ''; error("Missing 'network'") if $self -> {'network'} eq ''; if ($self -> {'action'} eq 'user') { $self -> {'posts'} = get_user_posts($self); } elsif ($self -> {'action'} eq 'friends') { $self -> {'posts'} = get_friends_posts($self); } elsif ($self -> {'action'} eq 'inbox') { $self -> {'posts'} = get_inbox($self); } elsif ($self -> {'action'} eq 'outbox') { $self -> {'posts'} = get_outbox($self); } elsif ($self -> {'action'} eq 'single') { error("Missing 'id'") if $self -> {'id'} eq ''; $self -> {'posts'} = get_single_post($self); } elsif ($self -> {'action'} eq 'update') { error("Missing 'msg'") if $self -> {'msg'} eq ''; $self -> {'posts'} = update($self); } elsif ($self -> {'action'} eq 'send') { error("Missing 'msg'") if $self -> {'msg'} eq ''; error("Missing 'recipient'") if $self -> {'recipient'} eq ''; $self -> {'posts'} = send_dm($self); } } =head2 verify_credentials() Verify the user's credentials via the web APIs, using 'username' and 'password'. =cut sub verify_credentials { my $self = shift; my $api = get_api($self -> {'network'}); my $url = $api -> {'url'}."/account/verify_credentials.json"; my $response = auth_get_request($url, $self -> {'username'}, $self -> {'password'}, $api); my $json_text = parse_response($response); my $error = $json_text -> {error}; error("$error") if ($error); } =head2 get_pwd() Request user's password. =cut sub get_pwd { my $self = shift; print "Password: "; system('stty','-echo'); chop(my $pwd=<STDIN>); system('stty','echo'); print "\n"; $self -> {'password'} = $pwd; } =head2 error( $msg ) Print formatted errors and die =cut sub error { my $msg = shift; die "ERROR: $msg\n"; } =head2 get_data() Return content of a TwitShell object =cut sub get_data { my $self = shift; my %data = %$self; return \%data; } =head1 AUTHOR Alessandro Ghedini, C<< <alexbio at cpan.org> >> =head1 BUGS Please report any bugs or feature requests to C<bug-twitshell at rt.cpan.org>, or through the web interface at L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=TwitShell>. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes. =head1 SUPPORT You can find documentation for this module with the perldoc command. perldoc App::TwitShell You can also look for information at: =over 4 =item * TwitShell homepage L<http://alexlog.co.cc/projects/twitshell> =item * GitHub page L<http://github.com/AlexBio/TwitShell> =item * RT: CPAN's request tracker L<http://rt.cpan.org/NoAuth/Bugs.html?Dist=TwitShell> =item * AnnoCPAN: Annotated CPAN documentation L<http://annocpan.org/dist/TwitShell> =item * CPAN Ratings L<http://cpanratings.perl.org/d/TwitShell> =item * Search CPAN L<http://search.cpan.org/dist/TwitShell/> =back =head1 LICENSE AND COPYRIGHT Copyright 2010 Alessandro Ghedini. This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License. See http://dev.perl.org/licenses/ for more information. =cut 1; # End of App::TwitShell