dotfiles/bin/wd
michener 83d40113d2 First import
git-svn-id: http://photonzero.com/dotfiles/trunk@1 23f722f6-122a-0410-8cef-c75bd312dd78
2007-03-19 06:17:17 +00:00

120 lines
4.1 KiB
Perl
Executable file

#! /usr/bin/perl -w
#
# wd - what doing? get/set your twitter.com status
# version 1.07, 2007-01-09
#
# Copyright (c) 2007, Andrew J. Cosgriff, http://polydistortion.net/
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# * redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# * Redistributions in binary form must reproduce the above
# copyright notice, this list of conditions and the following
# disclaimer in the documentation and/or other materials provided
# with the distribution.
#
# * The names of its contributors may not be used to endorse or
# promote products derived from this software without specific
# prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
# CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
##########
#
# Configuration:
#
# set your username (e-mail address) and password here.
#
# note that you'll need to put a backslash \ in front of the @-sign in your
# e-mail address.
#
my $username = "";
my $password = "";
##########
use strict;
use JSON;
use LWP;
use Getopt::Std;
use DateTime::Format::Strptime;
my $ua = LWP::UserAgent->new;
$ua->credentials('twitter.com:80','Twitter API',$username,$password);
my %opts = ();
getopts('pvs', \%opts);
if (defined $opts{'p'}) {
$ua->env_proxy;
}
if ((! defined $opts{'s'}) and ($#ARGV > 0)) {
print "[warning] hmm, are you sure you didn't mean to add a -s to that?\n\n";
}
if (defined $opts{'s'}) {
if ($#ARGV < 0) {
print "well, what are you doing?\n";
exit 1;
}
my $response = $ua->post('http://twitter.com/statuses/update.json',
[ "status" => join(' ',@ARGV) ]);
die "Wrong content-type (",$response->content_type,") received - was expecting application/json\n"
unless $response->content_type =~ m/^application\/json/;
my $status = jsonToObj($response->content);
my %user = %{$status};
if (defined $opts{'v'}) {
print "status set to: ",$user{'text'},"\n";
}
} else {
my $response = $ua->get('http://twitter.com/statuses/friends.json');
die "Can't get Twitter status: ", $response->status_line
unless $response->is_success;
die "Wrong content-type (",$response->content_type,") received - was expecting application/json\n"
unless $response->content_type =~ m/^application\/json/;
my $status = jsonToObj($response->content);
my $strp = new DateTime::Format::Strptime(
pattern => '%a %b %d %T %z %Y',
locale => 'en_AU',
time_zone => 'Australia/Melbourne',
);
my %stati=();
foreach my $userobj (@{$status}) {
my %user=%{$userobj};
next if ((($#ARGV >= 0) and
($user{screen_name} !~ m/$ARGV[0]/))
or (! defined $user{status}));
$stati{$user{screen_name}}{"text"} = $user{status}->{text};
$stati{$user{screen_name}}{"rel"} = $user{status}->{relative_created_at};
$stati{$user{screen_name}}{"date"} = DateTime::Format::Strptime::strftime("%s",$strp->parse_datetime($user{status}->{created_at}));
}
foreach my $user (sort {$stati{$a}{"date"} cmp $stati{$b}{"date"};} keys %stati) {
print "$user ",$stati{$user}{text}," (",$stati{$user}{"rel"},")\n";
}
}