diff options
author | trizen <trizen@protonmail.com> | 2020-02-15 00:05:24 +0200 |
---|---|---|
committer | trizen <trizen@protonmail.com> | 2020-02-15 00:05:24 +0200 |
commit | 8e4ba906343718a4a1c2fbd939a9dbe0a75287f8 (patch) | |
tree | 340f4a502ddefbdfc0a5eec997751b5e19206aa8 /lib/WWW/StrawViewer/Videos.pm | |
parent | 3e92a9d96d2ff6d2718a5a1e0d69dac766f6a141 (diff) | |
download | fair-viewer-8e4ba906343718a4a1c2fbd939a9dbe0a75287f8.tar.lz fair-viewer-8e4ba906343718a4a1c2fbd939a9dbe0a75287f8.tar.xz fair-viewer-8e4ba906343718a4a1c2fbd939a9dbe0a75287f8.zip |
Import files.
Diffstat (limited to 'lib/WWW/StrawViewer/Videos.pm')
-rw-r--r-- | lib/WWW/StrawViewer/Videos.pm | 229 |
1 files changed, 229 insertions, 0 deletions
diff --git a/lib/WWW/StrawViewer/Videos.pm b/lib/WWW/StrawViewer/Videos.pm new file mode 100644 index 0000000..9df9ff3 --- /dev/null +++ b/lib/WWW/StrawViewer/Videos.pm @@ -0,0 +1,229 @@ +package WWW::StrawViewer::Videos; + +use utf8; +use 5.014; +use warnings; + +=head1 NAME + +WWW::StrawViewer::Videos - videos handler. + +=head1 SYNOPSIS + + use WWW::StrawViewer; + my $obj = WWW::StrawViewer->new(%opts); + my $info = $obj->video_details($videoID); + +=head1 SUBROUTINES/METHODS + +=cut + +sub _make_videos_url { + my ($self, %opts) = @_; + return $self->_make_feed_url('videos', %opts); +} + +{ + no strict 'refs'; + foreach my $part ( + qw( + id + snippet + contentDetails + fileDetails + player + liveStreamingDetails + processingDetails + recordingDetails + statistics + status + suggestions + topicDetails + ) + ) { + *{__PACKAGE__ . '::' . 'video_' . $part} = sub { + my ($self, $id) = @_; + return $self->_get_results($self->_make_videos_url(id => $id, part => $part)); + }; + } +} + +=head2 videos_from_category($category_id) + +Get videos from a category ID. + +=cut + +sub videos_from_category { + my ($self, $cat_id) = @_; + $self->_get_results( + $self->_make_videos_url( + chart => $self->get_chart, + videoCategoryId => $cat_id, + ) + ); +} + +=head2 trending_videos_from_category($category_id) + +Get popular videos from a category ID. + +=cut + +sub trending_videos_from_category { + my ($self, $cat_id) = @_; + + my $results = do { + local $self->{publishedAfter} = do { + state $yv_utils = WWW::StrawViewer::Utils->new; + $yv_utils->period_to_date(1, 'w'); + } if !defined($self->get_publishedAfter); + local $self->{videoCategoryId} = $cat_id; + local $self->{regionCode} = "US" if !defined($self->get_regionCode); + $self->search_videos(""); + }; + + return $results; +} + +=head2 popular_videos($channel_id) + +Get the most popular videos for a given channel ID. + +=cut + +sub popular_videos { + my ($self, $id) = @_; + + my $results = do { + local $self->{channelId} = $id; + local $self->{order} = 'viewCount'; + $self->search_videos(""); + }; + + return $results; +} + +=head2 my_likes() + +Get the videos liked by the authenticated user. + +=cut + +sub my_likes { + my ($self) = @_; + $self->get_access_token() // return; + $self->_get_results($self->_make_videos_url(myRating => 'like', pageToken => $self->page_token)); +} + +=head2 my_dislikes() + +Get the videos disliked by the authenticated user. + +=cut + +sub my_dislikes { + my ($self) = @_; + $self->get_access_token() // return; + $self->_get_results($self->_make_videos_url(myRating => 'dislike', pageToken => $self->page_token)); +} + +=head2 send_rating_to_video($videoID, $rating) + +Send rating to a video. $rating can be either 'like' or 'dislike'. + +=cut + +sub send_rating_to_video { + my ($self, $video_id, $rating) = @_; + + if ($rating eq 'none' or $rating eq 'like' or $rating eq 'dislike') { + my $url = $self->_simple_feeds_url('videos/rate', id => $video_id, rating => $rating); + return defined($self->lwp_post($url, $self->_auth_lwp_header())); + } + + return; +} + +=head2 like_video($videoID) + +Like a video. Returns true on success. + +=cut + +sub like_video { + my ($self, $video_id) = @_; + $self->send_rating_to_video($video_id, 'like'); +} + +=head2 dislike_video($videoID) + +Dislike a video. Returns true on success. + +=cut + +sub dislike_video { + my ($self, $video_id) = @_; + $self->send_rating_to_video($video_id, 'dislike'); +} + +=head2 videos_details($id, $part) + +Get info about a videoID, such as: channelId, title, description, +tags, and categoryId. + +Available values for I<part> are: I<id>, I<snippet>, I<contentDetails> +I<player>, I<statistics>, I<status> and I<topicDetails>. + +C<$part> string can contain more values, comma-separated. + +Example: + + part => 'snippet,contentDetails,statistics' + +When C<$part> is C<undef>, it defaults to I<snippet>. + +=cut + +sub video_details { + my ($self, $id, $part) = @_; + return $self->_get_results($self->_make_videos_url(id => $id, part => $part // 'snippet')); +} + +=head2 Return details + +Each function returns a HASH ref, with a key called 'results', and another key, called 'url'. + +The 'url' key contains a string, which is the URL for the retrieved content. + +The 'results' key contains another HASH ref with the keys 'etag', 'items' and 'kind'. +From the 'results' key, only the 'items' are relevant to us. This key contains an ARRAY ref, +with a HASH ref for each result. An example of the item array's content are shown below. + +=cut + +=head1 AUTHOR + +Trizen, C<< <echo dHJpemVuQHByb3Rvbm1haWwuY29tCg== | base64 -d> >> + + +=head1 SUPPORT + +You can find documentation for this module with the perldoc command. + + perldoc WWW::StrawViewer::Videos + + +=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::Videos |