Cmd-Dwarf

 view release on metacpan or  search on metacpan

share/app/lib/Dwarf/Module/SocialMedia/Twitter.pm  view on Meta::CPAN

package Dwarf::Module::SocialMedia::Twitter;
use Dwarf::Pragma;
use parent 'Dwarf::Module';
use Dwarf::HTTP::Async;
use Data::Dumper;
use DateTime;
use DateTime::Format::HTTP;
use Digest::SHA qw//;
use Encode qw/encode_utf8/;
use HTTP::Request::Common;
use HTTP::Response;
use JSON;
use LWP::UserAgent;
use Net::OAuth;

use Dwarf::Accessor qw/
	ua ua_async urls
	key secret
	request_token request_token_secret
	access_token access_token_secret
	user_id screen_name name profile_image
	on_error
/;

$Net::OAuth::PROTOCOL_VERSION = Net::OAuth::PROTOCOL_VERSION_1_0A;

sub init {
	my $self = shift;
	my $c = $self->c;

	$self->{ua} ||= LWP::UserAgent->new(
		timeout => 120
	);

	$self->{ua_async} ||= Dwarf::HTTP::Async->new;

	$self->{urls} ||= {
		api            => 'https://api.twitter.com/1.1',
		request_token  => 'https://api.twitter.com/oauth/request_token',
		authentication => 'https://api.twitter.com/oauth/authenticate',
 		authorization  => 'https://api.twitter.com/oauth/authorize',
		access_token   => 'https://api.twitter.com/oauth/access_token',
	};

	$self->{on_error} ||= sub { die @_ };
}

sub _build_user_id {
	my $self = shift;
	$self->init_user unless defined $self->{user_id};
	return $self->{user_id};
}

sub _build_screen_name {
	my $self = shift;
	$self->init_user unless defined $self->{screen_name};
	return $self->{screen_name};
}

sub _build_name {
	my $self = shift;
	$self->init_user unless defined $self->{name};
	return $self->{name};
}

sub _build_profile_image {
	my $self = shift;
	$self->init_user unless defined $self->{profile_image};
	return $self->{profile_image};
}



( run in 1.177 second using v1.01-cache-2.11-cpan-d8267643d1d )