version 1.3, 2010/06/24 23:14:23 |
version 1.6, 2010/06/27 01:52:33 |
|
|
package Net::OpenAMD; |
package Net::OpenAMD; |
|
|
# $AFresh1: OpenAMD.pm,v 1.2 2010/06/24 22:10:10 andrew Exp $ |
# $AFresh1: OpenAMD.pm,v 1.5 2010/06/24 22:57:42 andrew Exp $ |
|
|
use warnings; |
use warnings; |
use strict; |
use strict; |
|
|
use Class::Std::Utils; |
use Class::Std::Utils; |
|
|
use LWP::UserAgent; |
use LWP::UserAgent; |
|
use URI; |
use Net::OAuth; |
use Net::OAuth; |
use JSON::Any; |
use JSON::Any; |
|
|
{ |
{ |
|
|
my @attr_refs = \(); |
my @attr_refs = \( my %base_url_of, my %ua_of, my %auth_of, ); |
|
|
sub new { |
sub new { |
my ( $class, $options ) = @_; |
my ( $class, $options ) = @_; |
my $self = bless anon_scalar(), $class; |
my $self = bless anon_scalar(), $class; |
my $ident = ident($self); |
my $ident = ident($self); |
|
|
|
$options //= {}; |
|
|
|
croak 'Options should be a hashref' if ref $options ne 'HASH'; |
|
|
|
$base_url_of{$ident} = $options->{base_url} || $BASE_URL; |
|
$ua_of{$ident} = $options->{ua} || LWP::UserAgent->new(); |
|
|
|
# XXX Authenticate |
|
|
return $self; |
return $self; |
} |
} |
|
|
sub _get { croak 'Unsupported' } |
sub _get { |
|
my ( $self, $action, $query ) = @_; |
|
my $ident = ident($self); |
|
|
|
my $uri = URI->new( $base_url_of{$ident} . '/' . $action ); |
|
$uri->query($query); |
|
|
|
my $response = $ua_of{$ident}->get($uri); |
|
|
|
if ( !$response->is_success ) { |
|
croak $response->status_line; |
|
} |
|
|
|
return JSON::Any->jsonToObj( $response->decoded_content ); |
|
} |
|
|
sub location { my $self = shift; return $self->_get( 'location', @_ ) } |
sub location { my $self = shift; return $self->_get( 'location', @_ ) } |
sub speakers { my $self = shift; return $self->_get( 'speakers', @_ ) } |
sub speakers { my $self = shift; return $self->_get( 'speakers', @_ ) } |
sub talks { my $self = shift; return $self->_get( 'talks', @_ ) } |
sub talks { my $self = shift; return $self->_get( 'talks', @_ ) } |
sub interests { my $self = shift; return $self->_get( 'interests', @_ ) } |
sub interests { my $self = shift; return $self->_get( 'interests', @_ ) } |
sub users { my $self = shift; return $self->_get( 'users', @_ ) } |
sub users { my $self = shift; return $self->_get( 'users', @_ ) } |
sub stats { croak 'Unused feature' } |
sub stats { croak 'Unused feature' } |
|
|
|
sub DESTROY { |
|
my ($self) = @_; |
|
my $ident = ident $self; |
|
|
|
foreach my $attr_ref (@attr_refs) { |
|
delete $attr_ref->{$ident}; |
|
} |
|
|
|
return; |
|
} |
|
|
} |
} |
|
|
1; # Magic true value required at end of module |
1; # Magic true value required at end of module |
|
|
This module is to make it easy to grab information from the OpenAMD project at |
This module is to make it easy to grab information from the OpenAMD project at |
The Next Hope. |
The Next Hope. |
|
|
|
http://wiki.hope.net/Attendee_Meta-Data |
|
|
http://amd.hope.net/ |
http://amd.hope.net/ |
|
|
http://amd.hope.net/2010/05/openamd-api-released-v1-1-1/ |
http://amd.hope.net/2010/05/openamd-api-released-v1-1-1/ |
|
|
|
http://travisgoodspeed.blogspot.com/2010/06/hacking-next-hope-badge.html |
|
|
=head1 INTERFACE |
=head1 INTERFACE |
|
|