[Koha-patches] [PATCH] Bug 20783 - Cannot embed some YouTube videos due to 403 errors Sponsored-by: UCA - Universidad de Cádiz

Juan Romay Sieira juan.sieira at xercode.es
Fri May 18 20:50:40 CEST 2018


YouTube videos are embeded instead of played with its videoplayback URL, that can throw a 403 error
---
 C4/HTML5Media.pm                                   | 30 ++++++++++------------
 C4/Installer/PerlDependencies.pm                   |  6 ++---
 koha-tmpl/intranet-tmpl/prog/css/staff-global.css  |  5 ++++
 .../prog/en/modules/catalogue/detail.tt            | 12 ++++++---
 .../opac-tmpl/bootstrap/en/modules/opac-detail.tt  | 14 ++++++----
 koha-tmpl/opac-tmpl/bootstrap/less/opac.less       |  7 +++++
 6 files changed, 45 insertions(+), 29 deletions(-)

diff --git a/C4/HTML5Media.pm b/C4/HTML5Media.pm
index 1ac22f1..af03bdb 100644
--- a/C4/HTML5Media.pm
+++ b/C4/HTML5Media.pm
@@ -50,7 +50,7 @@ sub gethtml5media {
     my @HTML5MediaExtensions = split( /\|/, C4::Context->preference("HTML5MediaExtensions") );
     my $HTML5MediaYouTube    = C4::Context->preference("HTML5MediaYouTube");
     my $marcflavour          = C4::Context->preference("marcflavour");
-    my $isyoutube            = 0;
+    my $is_embed            = 0;
     foreach my $HTML5Media_field (@HTML5Media_fields) {
         my %HTML5Media;
         # protocol
@@ -99,19 +99,19 @@ sub gethtml5media {
         if ( $HTML5Media_field->subfield('u') ) {
             $HTML5Media{srcblock} = $HTML5Media_field->subfield('u');
             if (grep /youtu\.?be/, $HTML5Media_field->subfield('u') ) {
+                $HTML5Media{srcblock} = "";
                 if ($HTML5MediaYouTube == 1) {
-                    require WWW::YouTube::Download;
-                    import  WWW::YouTube::Download qw(playback_url);
-                    my $youtube           = WWW::YouTube::Download->new;
+                    use HTML::Video::Embed;
+                    my $embedder = HTML::Video::Embed->new({
+                        class   => 'html5-embed-video'
+                    });
+
                     eval {
-                        $HTML5Media{srcblock} = $youtube->playback_url(
-                            $HTML5Media_field->subfield('u'), {
-                                'fmt' => '43' #webm is the only format compatible to all modern browsers. maybe check for available qualities
-                            }
-                        );
+                        my $html_embed_code = $embedder->url_to_embed( $HTML5Media_field->subfield('u') );
+                        $HTML5Media{embed} = $html_embed_code;
                     };
                     if ($@) { warn $@; }
-                    else  { $isyoutube = 1;}
+                    else  { $is_embed = 1;}
                 }
                else {
                    next; # do not embed youtube videos
@@ -145,13 +145,9 @@ sub gethtml5media {
         else {
             $HTML5Media{extension} = ($HTML5Media{srcblock} =~ m/([^.]+)$/)[0];
         }
-        if ( ( !grep /\Q$HTML5Media{extension}\E/, @HTML5MediaExtensions ) && ( $isyoutube != 1) ) {
+        if ( ( !grep /\Q$HTML5Media{extension}\E/, @HTML5MediaExtensions ) && ( $is_embed != 1) ) {
             next; # not a specified media file
         }
-        # youtube
-        if ($isyoutube == 1) {
-                $HTML5Media{mime} = 'video/webm';
-        }
         # mime
         if ( $HTML5Media_field->subfield('c') ) {
             $HTML5Media{codecs} = $HTML5Media_field->subfield('c');
@@ -222,7 +218,7 @@ sub gethtml5media {
             $HTML5Media{type} = 'track';
         }
         # push
-        if ( $HTML5Media{srcblock} && $HTML5Media{type} ) {
+        if ( ($HTML5Media{srcblock} && $HTML5Media{type}) || $HTML5Media{embed} ) {
             push (@HTML5Media_sets, \%HTML5Media);
         }
     }
@@ -252,7 +248,7 @@ sub gethtml5media {
     }
 
     return (
-        HTML5MediaEnabled  => ( (scalar(@HTML5Media_sets) > 0) && ($HTML5MediaParent) ),
+        HTML5MediaEnabled  => ( (scalar(@HTML5Media_sets) > 0 && $HTML5MediaParent) || $is_embed ),
         HTML5MediaSets     => \@HTML5Media_sets,
         HTML5MediaParent   => $HTML5MediaParent,
         HTML5MediaWidth    => $HTML5MediaWidth,
diff --git a/C4/Installer/PerlDependencies.pm b/C4/Installer/PerlDependencies.pm
index 130740c..3240b3d 100644
--- a/C4/Installer/PerlDependencies.pm
+++ b/C4/Installer/PerlDependencies.pm
@@ -802,10 +802,10 @@ our $PERL_DEPS = {
         'required' => '1',
         'min_ver'  => '1.10',
     },
-    'WWW::YouTube::Download' => {
-        'usage'    => 'HTML5Media streaming from YouTube',
+    'HTML::Video::Embed' => {
+        'usage'    => 'Convert a url into a html embed string',
         'required' => '0',
-        'min_ver'  => '0.56',
+        'min_ver'  => '0.016000',
     },
     'Net::SFTP::Foreign' => {
         'usage'    => 'Edifact',
diff --git a/koha-tmpl/intranet-tmpl/prog/css/staff-global.css b/koha-tmpl/intranet-tmpl/prog/css/staff-global.css
index c68bff6..d3231c0 100644
--- a/koha-tmpl/intranet-tmpl/prog/css/staff-global.css
+++ b/koha-tmpl/intranet-tmpl/prog/css/staff-global.css
@@ -2479,6 +2479,11 @@ video {
     width: 480px;
 }
 
+.html5-embed-video {
+	width: 480px;
+	height: 300px;
+}
+
 /* Bootstrap overrides */
 button,
 .btn {
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt
index ec6695c..ea76058 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tt
@@ -795,10 +795,14 @@
 <div id="html5media">
           [% FOREACH HTML5MediaSet IN HTML5MediaSets %]
             <p>
-              <[% HTML5MediaParent %] controls preload=none>
-                <[% HTML5MediaSet.child  %] src="[% HTML5MediaSet.srcblock %]"[% HTML5MediaSet.typeblock %] />
-                [[% HTML5MediaParent %] tag not supported by your browser.]
-              </[% HTML5MediaParent %]>
+                [% IF (HTML5MediaSet.embed) %]
+                    [% HTML5MediaSet.embed %]
+                [% ELSE %]
+                    <[% HTML5MediaParent %] controls preload=none>
+                    <[% HTML5MediaSet.child  %] src="[% HTML5MediaSet.srcblock %]"[% HTML5MediaSet.typeblock %] />
+                    [[% HTML5MediaParent %] tag not supported by your browser.]
+                    </[% HTML5MediaParent %]>
+                [% END %]
             </p>
           [% END %]
 </div>
diff --git a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-detail.tt b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-detail.tt
index 121fe6d..e2b105b 100644
--- a/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-detail.tt
+++ b/koha-tmpl/opac-tmpl/bootstrap/en/modules/opac-detail.tt
@@ -1031,11 +1031,15 @@
                             <div id="html5media">
                               [% FOREACH HTML5MediaSet IN HTML5MediaSets %]
                                 <p>
-                                  [% SET ctrl_preload = ' controls preload=none' #translatability %]
-                                  <[% HTML5MediaParent _ ctrl_preload %] >
-                                    <[% HTML5MediaSet.child _ ' src="' _  HTML5MediaSet.srcblock _'"' _ HTML5MediaSet.typeblock %] />
-                                    <span>[[% HTML5MediaParent %] tag not supported by your browser.]</span>
-                                  </[% HTML5MediaParent %]>
+                                    [% IF (HTML5MediaSet.embed) %]
+                                        [% HTML5MediaSet.embed %]
+                                    [% ELSE %]
+                                        [% SET ctrl_preload = ' controls preload=none' #translatability %]
+                                        <[% HTML5MediaParent _ ctrl_preload %] >
+                                        <[% HTML5MediaSet.child _ ' src="' _  HTML5MediaSet.srcblock _'"' _ HTML5MediaSet.typeblock %] />
+                                        <span>[[% HTML5MediaParent %] tag not supported by your browser.]</span>
+                                        </[% HTML5MediaParent %]>
+                                    [% END %]
                                 </p>
                               [% END %]
                             </div>
diff --git a/koha-tmpl/opac-tmpl/bootstrap/less/opac.less b/koha-tmpl/opac-tmpl/bootstrap/less/opac.less
index 3cbfdb8..ed0b94d 100644
--- a/koha-tmpl/opac-tmpl/bootstrap/less/opac.less
+++ b/koha-tmpl/opac-tmpl/bootstrap/less/opac.less
@@ -2636,6 +2636,13 @@ a.reviewlink:visited {
     }
 }
 
+video {
+    width: 480px;
+}
 
+.html5-embed-video {
+    width: 480px;
+    height: 300px;
+}
 
 @import "responsive.less";
-- 
2.1.4



More information about the Koha-patches mailing list