diff options
Diffstat (limited to 'lib/WWW/StrawViewer/Search.pm')
-rw-r--r-- | lib/WWW/StrawViewer/Search.pm | 175 |
1 files changed, 175 insertions, 0 deletions
diff --git a/lib/WWW/StrawViewer/Search.pm b/lib/WWW/StrawViewer/Search.pm new file mode 100644 index 0000000..67b8982 --- /dev/null +++ b/lib/WWW/StrawViewer/Search.pm @@ -0,0 +1,175 @@ +package WWW::StrawViewer::Search; + +use utf8; +use 5.014; +use warnings; + +=head1 NAME + +WWW::StrawViewer::Search - Search functions for Straw API v3 + +=head1 SYNOPSIS + + use WWW::StrawViewer; + my $obj = WWW::StrawViewer->new(%opts); + $obj->search_videos(@keywords); + +=head1 SUBROUTINES/METHODS + +=cut + +sub _make_search_url { + my ($self, %opts) = @_; + + return $self->_make_feed_url( + 'search', + + topicId => $self->get_topicId, + regionCode => $self->get_regionCode, + + maxResults => $self->get_maxResults, + order => $self->get_order, + publishedAfter => $self->get_publishedAfter, + publishedBefore => $self->get_publishedBefore, + regionCode => $self->get_regionCode, + relevanceLanguage => $self->get_relevanceLanguage, + safeSearch => $self->get_safeSearch, + channelId => $self->get_channelId, + channelType => $self->get_channelType, + pageToken => $self->page_token, + + ( + $opts{type} eq 'video' + ? ( + videoCaption => $self->get_videoCaption, + videoCategoryId => $self->get_videoCategoryId, + videoDefinition => $self->get_videoDefinition, + videoDimension => $self->get_videoDimension, + videoDuration => $self->get_videoDuration, + videoEmbeddable => $self->get_videoEmbeddable, + videoLicense => $self->get_videoLicense, + videoSyndicated => $self->get_videoSyndicated, + videoType => $self->get_videoType, + eventType => $self->get_eventType, + ) + : () + ), + + %opts, + ); + +} + +=head2 search_for($types,$keywords;\%args) + +Search for a list of types (comma-separated). + +=cut + +sub search_for { + my ($self, $type, $keywords, $args) = @_; + + $keywords //= []; + if (ref $keywords ne 'ARRAY') { + $keywords = [split ' ', $keywords]; + } + + my $url = $self->_make_search_url( + type => $type, + q => $self->escape_string(join(' ', @{$keywords})), + (ref $args eq 'HASH' ? %{$args} : (part => 'snippet')), + ); + + return $self->_get_results($url); +} + +{ + no strict 'refs'; + + foreach my $pair ( + { + name => 'videos', + type => 'video', + }, + { + name => 'playlists', + type => 'playlist', + }, + { + name => 'channels', + type => 'channel', + }, + { + name => 'all', + type => 'video,channel,playlist', + } + ) { + *{__PACKAGE__ . '::' . "search_$pair->{name}"} = sub { + my $self = shift; + $self->search_for($pair->{type}, @_); + }; + } +} + +=head2 search_videos($keywords;\%args) + +Search and return the found video results. + +=cut + +=head2 search_playlists($keywords;\%args) + +Search and return the found playlists. + +=cut + +=head2 search_channels($keywords;\%args) + +Search and return the found channels. + +=cut + +=head2 search_all($keywords;\%args) + +Search and return the results. + +=cut + +=head2 related_to_videoID($id) + +Retrieves a list of videos that are related to the video +that the parameter value identifies. The parameter value must +be set to a YouTube video ID. + +=cut + +sub related_to_videoID { + my ($self, $id) = @_; + return $self->search_for('video', [], {relatedToVideoId => $id}); +} + +=head1 AUTHOR + +Trizen, C<< <echo dHJpemVuQHByb3Rvbm1haWwuY29tCg== | base64 -d> >> + + +=head1 SUPPORT + +You can find documentation for this module with the perldoc command. + + perldoc WWW::StrawViewer::Search + + +=head1 LICENSE AND COPYRIGHT + +Copyright 2013-2015 Trizen. + +This program is free software; you can redistribute it and/or modify it +under the terms of either: the GNU General Public License as published +by the Free Software Foundation; or the Artistic License. + +See L<http://dev.perl.org/licenses/> for more information. + +=cut + +1; # End of WWW::StrawViewer::Search |