From: mitty Date: Thu, 17 Mar 2011 09:28:37 +0000 (+0000) Subject: * reads text file and tweets it X-Git-Url: http://lab.mitty.jp/git/?a=commitdiff_plain;h=ab38dc9986a76250cafc82aa4fdc82b08a10104c;p=lab.git * reads text file and tweets it * usage: update_timeline.pl [text_file_to_tweet] * text file should be UTF-8 git-svn-id: https://lab.mitty.jp/svn/lab/trunk@115 7d2118f6-f56c-43e7-95a2-4bb3031d96e7 --- diff --git a/Dev/twitter/update_timeline.pl b/Dev/twitter/update_timeline.pl new file mode 100755 index 0000000..1afcdf4 --- /dev/null +++ b/Dev/twitter/update_timeline.pl @@ -0,0 +1,124 @@ +#! /usr/bin/perl -w + +use strict; +use warnings; +use utf8; + +## IMPORTANT ## +# When Net::Twitter::Lite encounters a Twitter API error or a network error, +# it throws a Net::Twitter::Lite::Error object. +# You can catch and process these exceptions by using eval blocks and testing $@ +## from http://search.cpan.org/perldoc?Net::Twitter::Lite#ERROR_HANDLING +use Net::Twitter::Lite; +use FindBin qw($Bin); +use YAML::Tiny; +use Data::Dumper; +use Encode; + +my $help = sub { + die <authorized) { + die "$0: this client is not yet authorized."; +} + +open TWEET, $file or die "$0: cannot open file: $file"; +eval { + my $update = ""; + my $res; + foreach my $line () { + chomp $line; + $update .= $line; + } + if (length $update) { + $update = decode('utf8', $update); + $res = $bot->update($update); + } + + foreach my $line (split /\n/, Dumper $res) { + if ($line =~ /undef/) { next; } + print STDERR $line, "\n"; + } + if (ref $res) { + my $status = $res; + my $text = ""; + $text .= "(". $status->{id} . ") "; + $text .= ($status->{user}{name}) ? $status->{user}{name} : $status->{from_user}; + $text .= " [" . $status->{created_at} . "]"; + $text .= " ". $status->{text}; + $text =~ s/\n//; + print encode('sjis', $text), "\n"; + } +}; +if ($@) { + evalrescue($@); +} + + +sub loadconf { + # load configration data from yaml formatted file + # param => scalar string of filename + # ret => hash object of yaml data + + my $file = shift @_; + + my $yaml = YAML::Tiny->read($file); + + if ($!) { + warn "$0: '$file' $!"; + } + + return $yaml->[0]; +} + +sub login { + # make Net::Twitter::Lite object and login + # param => hash object of configration + # ret => Net::Twitter::Lite object + + my $conf = shift @_; + + my $bot = Net::Twitter::Lite->new( + consumer_key => $conf->{consumer_key}, + consumer_secret => $conf->{consumer_secret}, + ); + + $bot->access_token($conf->{access_token}); + $bot->access_token_secret($conf->{access_token_secret}); + + return $bot; +} + +sub evalrescue { + # output error message at eval error + + use Scalar::Util qw(blessed); + + if (blessed $@ && $@->isa('Net::Twitter::Lite::Error')) { + warn $@->error; + if ($@->twitter_error) { + my %twitter_error = %{$@->twitter_error}; + map { + $twitter_error{"$_ => "} = $twitter_error{$_} . "\n"; + delete $twitter_error{$_} + } keys %twitter_error; + warn join("", %twitter_error); + } + } + else { + warn $@; + } +}