#!/usr/bin/perl ### User configuration ### my $token=""; #Input your token my $token_secret=""; #Input your token my $windows=0; #If you use Windows, set 1. my $color=0; # Enable color for bash. ########################## my $baseuri="https://api.twitter.com/1.1/statuses"; require HTTP::Request; use strict; use warnings; use utf8; use LWP::UserAgent; use JSON; use Encode; use Switch; use OAuth::Lite::Consumer; use String::Escape; switch(shift(@ARGV)){ case(/-k|--kill/){ &destroy($ARGV[0]); } case(/-p|--post/){ &update(@ARGV); } case(/-l|--list/){ &readlog("home",$ARGV[0]); } case(/-m|--listme/){ &readlog("user",$ARGV[0]); } else{ print "twaddler - CUI based Twitter client\n"; print " Version 0.3.3 by Hiu Hanataka, Gishiko\n"; print "Usage: ./twaddler option [value]\n"; print " Option:\n"; print " -l,--list [size] Get friend timelines.\n"; print " -m,--listme [size] Get user timelines.\n"; print " -p,--post msg Post message.\n"; print " -k,--kill msgid Kill message by MsgID\n"; } } exit; sub destroy(){ my $id = $_[0]; my $ua = LWP::UserAgent->new; $ua->timeout(60); my $api_uri = "${baseuri}/destroy/$id.json"; my $consumer = OAuth::Lite::Consumer->new( consumer_key => 'TgHNMa7WZE7Cxi1JbkAMQ', consumer_secret => 'SHy9mBMBPNj3Y17et9BF4g5XeqS4y3vkeW24PttDcY', ); my $access_token = OAuth::Lite::Token->new( token => $token, secret => $token_secret, ); my $req = $consumer->gen_oauth_request( method => "POST", url => "$api_uri", token => $access_token, params => { id => $id }, ); my $res = $ua->request($req); my $content = $res->content; } sub update(){ my @buf = @_; my $msg = "@buf"; if($windows){ $msg = Encode::decode('shift_jis', $msg); $msg = Encode::encode('utf-8', $msg); $msg = String::Escape::unbackslash( $msg ); } else { $msg = Encode::decode('utf-8', $msg); $msg = Encode::encode('utf-8', $msg); $msg = String::Escape::unbackslash( $msg ); } my $ua = LWP::UserAgent->new; $ua->timeout(60); my $api_uri = "${baseuri}/update.json"; my $consumer = OAuth::Lite::Consumer->new( consumer_key => 'TgHNMa7WZE7Cxi1JbkAMQ', consumer_secret => 'SHy9mBMBPNj3Y17et9BF4g5XeqS4y3vkeW24PttDcY', ); my $access_token = OAuth::Lite::Token->new( token => $token, secret => $token_secret, ); my $req = $consumer->gen_oauth_request( method => "POST", url => "$api_uri", token => $access_token, params => { status => $msg }, ); my $res = $ua->request($req); my $content = $res->content; } sub readlog(){ sub get_content(){ my ($count, $tgt) = @_; my $api_uri = "${baseuri}/${tgt}_timeline.json"; unless ($count){ $count = 20; } my $ua = LWP::UserAgent->new; $ua->timeout(60); my $consumer = OAuth::Lite::Consumer->new( consumer_key => 'TgHNMa7WZE7Cxi1JbkAMQ', consumer_secret => 'SHy9mBMBPNj3Y17et9BF4g5XeqS4y3vkeW24PttDcY', ); my $access_token = OAuth::Lite::Token->new( token => $token, secret => $token_secret, ); my $req = $consumer->gen_oauth_request( method => "GET", url => "$api_uri", token => $access_token, params => { count => $count }, ); my $res = $ua->request($req); my $content = $res->content; return $content; } my $tgt = $_[0]; my $num = $_[1]; my $friend_timeline_data = &get_content($num, $tgt); my $d = decode_json $friend_timeline_data; if (ref($d) eq "ARRAY"){ foreach my $d (reverse(@$d)) { my $ts; my $text; if($windows){ $ts = "$d->{created_at}"; $text = encode('shift_jis', $d->{text}); } else{ $ts = `date +'%H:%M' -d "$d->{created_at}"`; $text = encode('utf-8', $d->{text}); } chomp($ts); $text =~ s/(\r\n|\n\r|\n|\r)/ /g; if($color){ $text =~ s/(\@[a-z0-9_]+)/\033[31m$1\033[37m/gi; print "\033[35m$ts \033[33m<$d->{user}->{screen_name}>\033[37m $text \033[36m($d->{id})\033[0m\n"; } else{ print "$ts <$d->{user}->{screen_name}> $text ($d->{id})\n"; } } } else{ print "Error : Did you input access token?\nDetail : $friend_timeline_data"; } }