| WebService-YouTube documentation | Contained in the WebService-YouTube distribution. |
WebService::YouTube::Videos - Perl interfece to youtube.videos.*
This document describes WebService::YouTube::Videos version 1.0.3
use WebService::YouTube::Videos;
my $api = WebService::YouTube::Videos->new( { dev_id => YOUR_DEV_ID } );
# Call API youtube.videos.list_featured
my @videos = $api->list_featured;
foreach my $video (@videos) {
# $video->isa('WebService::YouTube::Video');
}
# Call other APIs
my @videos = $api->list_by_user($user);
my @videos = $api->list_by_tag($tag);
my $video = $api->get_details($video_id);
# Parse XML
my @video = $api->parse_xml($xml); # when $xml contains <video_list>
my $video = $api->parse_xml($xml); # when $xml contains <video_details>
This is a Perl interface to YouTube REST API.
See Developer APIs http://youtube.com/dev and Developer API -- REST Interface http://youtube.com/dev_rest for details.
Creates and returns a new WebService::YouTube::Videos object. %fields can contain parameters enumerated in ACCESSORS section.
Parses XML and returns the result. $xml should be an object that XML::Simple can understand.
Returns a WebService::YouTube::Video object. $video_id is an ID of the video which you want to get details.
See http://youtube.com/dev_api_ref?m=youtube.videos.get_details for details.
Returns an array of WebService::YouTube::Video object. $tag is a keyword string separated by a space. %fields can contain the optional parameters.
1 <= page
per_page <= 100 (default 20)
See http://youtube.com/dev_api_ref?m=youtube.videos.list_by_tag for details.
Returns an array of WebService::YouTube::Video object. $tag is a keyword string separated by a space. %fields can contain optional parameters.
See http://youtube.com/dev_api_ref?m=youtube.videos.list_by_user for details.
Returns an array of WebService::YouTube::Video object.
See http://youtube.com/dev_api_ref?m=youtube.videos.list_featured for details.
Developer ID
LWP::UserAgent object
Developer ID is required when you call API of YouTube.
The XML is not a YouTube's XML.
The ut_response is neither <video_list> nor <video_details>.
WebService::YouTube::Videos requires no configuration files or environment variables.
Class::Accessor::Fast, LWP::UserAgent, XML::Simple, WebService::YouTube::Util, WebService::YouTube::Video
None reported.
No bugs have been reported.
Please report any bugs or feature requests to
bug-webservice-youtube@rt.cpan.org, or through the web interface at
http://rt.cpan.org/NoAuth/ReportBug.html?Queue=WebService-YouTube.
I will be notified, and then you'll automatically be notified of progress on
your bug as I make changes.
Hironori Yoshida <yoshida@cpan.org>
This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See perlartistic.
| WebService-YouTube documentation | Contained in the WebService-YouTube distribution. |
# # $Id: Videos.pm 11 2007-04-09 04:34:01Z hironori.yoshida $ # package WebService::YouTube::Videos; use strict; use warnings; use version; our $VERSION = qv('1.0.3'); use Carp; use LWP::UserAgent; use WebService::YouTube::Util; use WebService::YouTube::Video; use XML::Simple; use base qw(Class::Accessor::Fast); __PACKAGE__->mk_accessors(qw(dev_id ua)); sub new { my ( $class, @args ) = @_; my $self = $class->SUPER::new(@args); if ( !$self->dev_id ) { croak 'dev_id is required'; } if ( !$self->ua ) { $self->ua( LWP::UserAgent->new ); } return $self; } sub parse_xml { my ( $self, $xml ) = @_; my $ut_response = XMLin( $xml, ForceArray => [qw(comment channel video)] ); if ( !$ut_response ) { carp 'invalid XML'; return; } if ( $ut_response->{status} ne 'ok' ) {
carp(
sprintf "status: %s\ncode: %d\ndescription: %s",
$ut_response->{status},
$ut_response->{error}->{code},
$ut_response->{error}->{description}
);
return;
}
if ( exists $ut_response->{video_list} ) {
my $video_list = $ut_response->{video_list}->{video};
my @videos;
foreach my $video_id ( keys %{$video_list} ) {
my $video =
WebService::YouTube::Video->new( $video_list->{$video_id} );
$video->id($video_id);
push @videos, $video;
}
return @videos;
}
if ( exists $ut_response->{video_details} ) {
my $video =
WebService::YouTube::Video->new( $ut_response->{video_details} );
return $video;
}
carp( sprintf '%s: unknown response at %s',
[ keys %{$ut_response} ]->[0], $ut_response );
return;
}
sub get_details {
my ( $self, $video_id ) = @_;
if ( ref $video_id ) {
$video_id = $video_id->id;
}
my $uri =
WebService::YouTube::Util->rest_uri( $self->dev_id,
'youtube.videos.get_details', { video_id => $video_id } );
my $res = $self->ua->get($uri);
if ( !$res->is_success ) {
carp $res->status_line;
return;
}
my $video = $self->parse_xml( $res->content );
if ( !$video ) {
return;
}
$video->id($video_id);
return $video;
}
sub list_by_tag {
my ( $self, $tag, $fields ) = @_;
my $uri = WebService::YouTube::Util->rest_uri(
$self->dev_id,
'youtube.videos.list_by_tag',
{
tag => $tag,
%{ $fields || {} }
}
);
my $res = $self->ua->get($uri);
if ( !$res->is_success ) {
carp $res->status_line;
return;
}
return $self->parse_xml( $res->content );
}
sub list_by_user {
my ( $self, $user ) = @_;
my $uri =
WebService::YouTube::Util->rest_uri( $self->dev_id,
'youtube.videos.list_by_user', { user => $user } );
my $res = $self->ua->get($uri);
if ( !$res->is_success ) {
carp $res->status_line;
return;
}
return $self->parse_xml( $res->content );
}
sub list_featured {
my $self = shift;
my $uri = WebService::YouTube::Util->rest_uri( $self->dev_id,
'youtube.videos.list_featured' );
my $res = $self->ua->get($uri);
if ( !$res->is_success ) {
carp $res->status_line;
return;
}
return $self->parse_xml( $res->content );
}
1;
__END__