Perlで「もごもご」にアクセスする
もごもごのAPIは、Twitter互換なので、Perlからアクセスする場合は、Net::Twitterが使えます。
APIの互換性重要
my $mogo2 = Net::Twitter->new(
username => 'xxx@example.com',
password => 'myapipass',
apirealm => 'mogo2 api basic auth',
apihost => 'api.mogo2.jp:80',
apiurl => 'http://api.mogo2.jp/statuses'
);
my $result = $mogo2->update($status);
もごもごのAPIでは、さらに、timelineにオプションが渡せたり、スレッドの取得の拡張APIがあるので、Net::Twitterをbaseにして書いてみた。
ソースは追記。
package Net::Mogo2;
use warnings;
use strict;
use base qw/Net::Twitter/;
our $VERSION = '0.01';
use URI;
sub new {
my $class = shift;
my %conf = @_;
$conf{apiurl} = 'http://api.mogo2.jp/statuses' unless defined $conf{apiurl};
$conf{apihost} = 'api.mogo2.jp:80' unless defined $conf{apihost};
$conf{apirealm} = 'mogo2 api basic auth' unless defined $conf{apirealm};
$class->SUPER::new(%conf);
}
sub _request {
my $self = shift;
my $path = shift;
my $uri = URI->new( $self->{apiurl} . $path );
$uri->query_form(@_);
my $req = $self->{ua}->post($uri);
return ($req->is_success) ? JSON::Any->jsonToObj($req->content) : undef;
}
sub public_timeline {
my $self = shift;
$self->_request("/public_timeline.json", @_);
}
sub thread_timeline {
my $self = shift;
my $id = shift;
$self->_request("/thread_timeline/$id.json", @_);
}
sub friends_timeline {
my $self = shift;
my $id;
if ( @_ % 2 ) {
$id = shift;
}
my $uri = $id ? "/friends_timeline/$id.json" : "/friends_timeline.json";
$self->_request($uri, @_);
}
sub user_timeline {
my $self = shift;
my $id;
if ( @_ % 2 ) {
$id = shift;
}
my $uri = $id ? "/user_timeline/$id.json" : "/user_timeline.json";
$self->_request($uri, @_);
}
1;