App-Twitch

 view release on metacpan or  search on metacpan

lib/App/Twitch.pm  view on Meta::CPAN

	my ( $self ) = @_;
	$0 = __PACKAGE__.' '.$VERSION.' using '.( getcwd ).'/'.$self->configfile;
}

sub run {
	my ( $self ) = @_;
	POE::Kernel->run;
	if (!blessed $self) {
		$self = $self->new_with_options;
	}
	my ( $cmd ) = @{$self->extra_argv};
	$cmd = 'start' if !$cmd;

	print "Using configfile: ".( getcwd ).'/'.$self->configfile."\n";
	print "Status: ".$self->status_message."\n" if ($cmd ne 'status' && $self->status);
	print "\n";

	die __PACKAGE__." already running...\n" if ($cmd eq 'start' && $self->status);
	die __PACKAGE__." not running...\n" if ($cmd eq 'stop' && !$self->status);

	if ($cmd eq 'start') {
		print "Starting up ".__PACKAGE__."...\n";
		$self->start;
	};
	if ($cmd eq 'status') {
		print "Status: ".__PACKAGE__." is ".( $self->status ? '' : 'not ')."running...\n";
		exit $self->status ? 0 : 1;
	}
	if ($cmd eq 'restart') {
		if ($self->status) {
			print __PACKAGE__." not running, starting up...\n";
		} else {
			print __PACKAGE__." restarting...\n";
		}
		$self->restart;
	}
	if ($cmd eq 'stop') {
		print "Stopping ".__PACKAGE__."...\n";
		$self->stop;
	};
	
	exit $self->exit_code;
}

sub START {
	my ( $self, $session ) = @_[ OBJECT, SESSION ];
	$self->set_process_name;
	$self->logger->info($self->logger_prefix.'Starting up App::Twitch '.$App::Twitch::VERSION.'... ');
	$self->logger->debug($self->logger_prefix.'Assigning POE::Session');
	$self->_session($session);
	$self->_containers;
	$self->_twitter if !$self->dryrun;
	$self->_tweet;
	$self->_keywords;
	$self->_feedaggregator;
	$self->_shorten if !$self->dryrun;
	$self->logger->info($self->logger_prefix.'Startup HTTP Service...');
	POE::Component::Client::HTTP->spawn(
		Agent				=> $self->http_agent,
		Alias				=> $self->_http_alias,
		Timeout				=> 30,
		ConnectionManager	=> $self->_keepalive,
		FollowRedirects		=> 5,
	);
	$self->_max_feeds_count;
	my $running_config_dumpfile = $self->tmpdir.'/'.$self->configfile;
	$running_config_dumpfile =~ s/\.yml/\.running_config\.yml/;
	DumpFile($running_config_dumpfile,$self->running_config);
	chmod 0600, $running_config_dumpfile;
	$self->yield('add_feed');
}

event add_feed => sub {
	my ( $self, $kernel ) = @_[ OBJECT, KERNEL ];
	my $feed_url = $self->feeds_shift;
	$self->logger->info($self->logger_prefix.'Adding feed: '.$feed_url);
	eval {
		my $feed = {
			url				=> $feed_url,
			delay			=> $self->feed_delay,
			max_headlines	=> 100,
			ignore_first	=> $self->ignore_first,
		};
		$self->_feedaggregator->add_feed($feed);
	};
	$self->logger->error($self->logger_prefix.'ERROR ['.$feed_url.']: '.$@) if $@;
	my $delay = floor( $self->feed_delay / $self->_max_feeds_count );
	$kernel->delay('add_feed',$delay) if $self->feeds_count;
};

event new_feed_entry => sub {
	my ( $self, $feed, $entry ) = @_[ OBJECT, ARG0..$#_ ];
	$self->_entry_count_inc;
	my $url = $entry->link;
	$url =~ s/ //g;
	my $event = {
		entry => $entry,
		url => $url,
		run_id => $self->_entry_count,
	};
	$self->logger->debug($self->logger_prefix.'{'.$event->{run_id}.'} New feed entry: '.$url);
	POE::Kernel->post(
		$self->_http_alias,
		'request',
		'new_content',
		HTTP::Request->new(GET => $url),
		$event,
	);
};

use Encode;
require Encode::Detect;

event new_content => sub {
	my ( $self, $request_packet, $response_packet ) = @_[ OBJECT, ARG0..$#_ ];
	my $event = $request_packet->[1];
	my $response = $response_packet->[0];
	eval {
		if ($response->code == 200) {
			my $extractor = HTML::ExtractContent->new;
			my $content = $response->decoded_content;

 view all matches for this distribution
 view release on metacpan -  search on metacpan

( run in 1.061 second using v1.00-cache-2.02-grep-82fe00e-cpan-2c419f77a38b )