Skip to content

Instantly share code, notes, and snippets.

@shohey1226
Created April 21, 2013 08:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save shohey1226/5428937 to your computer and use it in GitHub Desktop.
Save shohey1226/5428937 to your computer and use it in GitHub Desktop.
#!/bin/env perl
use strict;
use warnings;
use AnyEvent::Twitter::Stream;
use EV;
use utf8;
use YAML;
use FindBin qw($Bin);
use Data::Dumper;
use LWP::UserAgent;
binmode STDOUT => ':utf8';
my $keys = YAML::LoadFile ("$Bin/../etc/config.yml");
my $cv = AnyEvent->condvar();
my $listener_twitter;
my $listener_timer;
my $set_twitter;
my $set_timer;
$set_twitter = sub {
$listener_twitter = AnyEvent::Twitter::Stream->new(
consumer_key => $keys->{consumer_key},
consumer_secret => $keys->{consumer_secret},
token => $keys->{access_token},
token_secret => $keys->{access_token_secret},
method => 'userstream',
on_tweet => sub {
my $tweet = shift;
if (defined $tweet->{user}){
#print Dumper $tweet;
print $tweet->{created_at}, $tweet->{user}->{id}, $tweet->{user}->{screen_name}, $tweet->{text}, "\n";
for my $url (@{ $tweet->{entities}->{urls} }){
#print Dumper $url;
print expand_uri($url->{url}), "\n";
}
}
},
on_error => sub { # try to reconnect
my $error = shift;
warn "ERROR: $error";
undef $listener_twitter;
$set_timer->(5);
},
on_eof => sub {
},
);
};
$set_timer = sub {
my $after = shift || 0;
$listener_timer = AnyEvent->timer(
after => $after,
cb => sub {
unless ( $listener_twitter ) {
print "(re)connecting\n";
undef $listener_timer;
$set_twitter->();
}
},
);
};
$set_timer->();
$cv->recv;
exit;
# got from 404 Blong not found :)
sub expand_uri{
my $uri = shift;
my $ua = LWP::UserAgent->new;
my $res = $ua->head($uri);
warn $res->status_line unless $res->is_success;
return $res->request->uri;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment