« 名前解決のコスト | メイン | ImageMagickでAnimated GIFのサムネイルをきれいにつくる方法 »

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;