App-Twimap
view release on metacpan or search on metacpan
lib/App/Twimap/Tweet.pm view on Meta::CPAN
package App::Twimap::Tweet;
use Moose;
use DateTime;
use DateTime::Format::Strptime;
use Email::Date::Format qw(email_date);
use HTML::Entities;
use Text::Wrap qw(wrap);
has 'data' => ( is => 'ro', isa => 'HashRef', required => 1 );
has 'expand_urls' => ( is => 'ro', isa => 'Bool', default => 1 );
has 'oembed_urls' => ( is => 'ro', isa => 'Bool', default => 1 );
my $_parser = DateTime::Format::Strptime->new(
pattern => '%a %b %d %T %z %Y',
locale => 'en_GB',
on_error => 'croak',
);
sub id {
my $self = shift;
my $tweet = $self->data;
return $tweet->{id_str};
}
sub in_reply_to_status_id {
my $self = shift;
my $tweet = $self->data;
return $tweet->{in_reply_to_status_id_str};
}
sub to_email {
my $self = shift;
my $tweet = $self->data;
my $tid = $self->id;
my $epoch = $_parser->parse_datetime( $tweet->{created_at} )->epoch;
my $date = email_date($epoch);
my $name = $tweet->{user}->{name};
my $screen_name = $tweet->{user}->{screen_name};
my $in_reply_to_status_id = $self->in_reply_to_status_id;
my $in_reply_to
= $in_reply_to_status_id
? "<$in_reply_to_status_id\@twitter>"
: '';
my $url = "https://twitter.com/$screen_name/status/$tid";
my $text;
if ( $tweet->{retweeted_status} ) {
$text
= 'RT @'
. $tweet->{retweeted_status}->{user}->{screen_name} . ': '
. $tweet->{retweeted_status}->{text};
} else {
$text = $tweet->{text};
}
my $subject = $text;
my $subject_offset = 0;
my $text_offset = 0;
my $oembed = '';
if ( $tweet->{entities} && $tweet->{entities}->{urls} ) {
foreach my $entity ( @{ $tweet->{entities}->{urls} } ) {
my $expanded_url = $entity->{expanded_url} || $entity->{url};
next unless $expanded_url;
$expanded_url = $self->expand_url($expanded_url)
( run in 0.687 second using v1.01-cache-2.11-cpan-ceb78f64989 )