package WWW::FairViewer::Search; use utf8; use 5.014; use warnings; =head1 NAME WWW::FairViewer::Search - Search functions for Fair API v3 =head1 SYNOPSIS use WWW::FairViewer; my $obj = WWW::FairViewer->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<< >> Jesus, C<< >> =head1 SUPPORT You can find documentation for this module with the perldoc command. perldoc WWW::FairViewer::Search =head1 LICENSE AND COPYRIGHT Copyright 2013-2015 Trizen. Copyright 2020 Jesus E. 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 for more information. =cut 1; # End of WWW::FairViewer::Search