Tag Archives: video

Show videos on your site using PERL and Youtube API

This tutorial uses an old Youtube API, after google acquired Youtube a new API was released

In this brief tutorial i will show you how to show videos from youtube on you web page using PERL and Youtube API, the idea of the script is that it will show by default the favorites videos of some users, and you will be able to navigate to the tags you specify.

For this script we will use some libraries from the CPAN:

  • CGI we will use to get the data send by GET
  • Template toolkit This is an excellent template library
  • XML:DOM this library will help us to parse the XML file that is returned by youtube
  • LWP::UserAgent This is needed by XML:DOM to parse the files in remote locations
  • Unicode::String We will use this to convert data to UTF8

Click here to see this script in action.

Download the code

index.pl this is the perl script.

  1. #!/usr/bin/perl
  2. # you have to sign up to get a developer id
  3. ‘developerid’;
  4. # we will show the favorites videos of this user as front page
  5. ‘someuser’;
  6. # this is an array of the tags we will allow to navigate throw
  7. ‘tlaxcala’=>‘Tlaxcala’,
  8.         ‘huamantla’=>‘Huamantla’,
  9.         ‘huamantlada’=>‘Huamantlada’,
  10.         ‘feria huamantla’=>‘Feria Huamantla’,
  11.         ‘cacaxtla’=>‘Cacaxtla’,
  12.         ‘apizaco’=>‘Apizaco’,
  13.         ‘tlaxco’=>‘Tlaxco’,
  14.         ‘feria tlaxcala’=>‘Feria Tlaxcala’‘action’"Content-type: text/html;charset=UTF-8\n\n"‘view’‘video’‘video’# here we start parsing the XML
  15. ‘http://www.youtube.com/api2_rest?method=youtube.videos.get_details&dev_id=FIq6LWxC3RE&video_id=’‘video’} );
  16.                 # we put this on eval to avoid errors
  17. # here i add all the commets to an array
  18. ‘comment’‘time’‘author’‘text’‘%r’‘%d-%m-%Y’, @date )
  19.                                 };
  20.                         }
  21.                        
  22.                         # here i format the video time
  23. ‘length_seconds’# here i create an array of the data i will use and show the page using template toolkit
  24. ‘video’‘title’‘author’‘rating_avg’‘tags’‘description’‘%02s:%02s:%02s’‘videos_view.tt’‘page’‘page’‘tag’‘tag’‘tag’ ) {
  25.                 # i show the favorites of the user
  26.                 $url=‘http://www.youtube.com/api2_rest?method=youtube.users.list_favorite_videos&dev_id=FIq6LWxC3RE&user=’‘page’}=‘1’‘page’);
  27.                 # here i get videos by tab
  28.                 $url=‘http://www.youtube.com/api2_rest?method=youtube.videos.list_by_tag&dev_id=FIq6LWxC3RE&tag=’‘tag’} . ‘&page=’‘page’} . ‘&per_page=20’;
  29.                 # since the api dosent support paging, i see if the next xml has data, to show next link
  30. ‘http://www.youtube.com/api2_rest?method=youtube.videos.list_by_tag&dev_id=FIq6LWxC3RE&tag=’‘tag’} . ‘&page=’‘page’} + 1 ) . ‘&per_page=20’# we put this on eval to avoid errors
  31. # here i create an array with the info for videos
  32. ‘video’‘author’‘author’‘id’‘id’‘title’‘title’‘length_seconds’‘length_seconds’‘rating_avg’‘rating_avg’‘rating_count’‘rating_count’‘description’‘description’‘view_count’‘view_count’‘upload_time’‘upload_time’‘comment_count’‘comment_count’‘tags’‘tags’‘url’‘url’‘thumbnail_url’‘thumbnail_url’‘video’‘tag’‘page’}
  33.         );
  34.         # i show the page using template toolkit
  35. ‘videos_list.tt’

videos_list.tt The template where we see the list of videos.

  1.  
  2. "videosList"
  3. [% FOREACH videos %]
  4.  
  5.   "index.pl?action=view&video=[% id %]""[% thumbnail_url %]"
  6.   "index.pl?action=view&video=[% id %]"[% title %]
  7.   [% description %]
  8.  
  9. [% END %]
  10.  
  11.  
  12.  
  13. "center"
  14.  [% IF tag || ( page>1 && total>0 ) %]
  15.  [% IF ( page > 1 ) %]
  16.   <a href="index.pl?tag=[% tag %]&amp;page=[% (page – 1) %]" alt="Previous" title="Previous">Previous
  17.   [% END %]
  18.   [% IF total>0 %]
  19.    "index.pl?tag=[% tag %]&amp;page=[% (page + 1) %]""Next"‘Next’Next
  20.   [% END %]
  21.  
  22.  
  23.  
  24.  [% END %]
  25.  
  26.  [% IF tag == ” %]Favorites[% ELSE %]"index.pl"Favorites[% END %]
  27.  [% FOREACH key = tags.keys %]
  28.   || [% IF tag == key %][% tags.$key %][% ELSE %]"index.pl?tag=[% key %]"[% tags.$key %][% END %]
  29.  [% END %]
  30.  
  31.  

videos_view.tt The template where we see a specific video.

  1.  
  2. [% title %]
  3.  
  4. "center"
  5. "425""350""movie""http://www.youtube.com/v/[% video %]""wmode""transparent""http://www.youtube.com/v/[% video %]""application/x-shockwave-flash" wmode="transparent""425""350"
  6.  
  7.  
  8. Author: "http://www.youtube.com/user/[% author %]""_blank"[% author %]
  9.  
  10. Rating: [% rating_avg %]
  11.  
  12. Tags: [% tags %]
  13.  
  14. Time: [% time %]
  15.  
  16.  
  17. [% description %]
  18.  
  19.  
  20. [% IF comments.size > 0 %]
  21.  Comments
  22.   [% FOREACH comment=comments %]
  23.    ‘textoComentarios’[% comment.text %]
  24.  
  25.    ‘pieComentarios’
  26.    | By ‘http://www.youtube.com/user/[% comentario.author %]’[% comment.author %] | [% comment.date %] | [% comment.time %] |
  27.  
  28.  
  29.  
  30.  [% END %]
  31. [% END %]
  32.