simple_youtube works with the YouTube v2 API to...
1) Read(:get) YouTube data with no API Key
2) Update(:put) YouTube video data using your Gdata API Key and OAuth2(v3 of this gem uses OAuth1). Pass in your OAuth2 access token, created using the omniauth-youtube OAuth2 set up in Rails. Beforehand you'll also need to authenticate and authorize your host to use the Google APIs to set up the correct keys
3) Currently no Create or Delete functionality.
I have tried to cover most of the examples from the YouTube API reference
gem install simple_youtube
Video
:get a single video uid
http://gdata.youtube.com/feeds/api/videos/wOzOc0xxJu8?v=2
video_uid = Youtube::Video.find(:scope => 'wOzOc0xxJu8', :params => {:v => '2'})
video_uid.entry.size # => 1
video_uid.entry[0].title # => "Michael Watford - So Into You (Dub Mix)"
:get top 5 'ruby on rails' videos
http://gdata.youtube.com/feeds/api/videos?q=ruby+on+rails&max-results=5&v=2
video_search = Youtube::Video.find(:params => {:q => 'ruby on rails', :"max-results" => '5', :v => '2'})
video_search.entry.size # => 5
video_search.title # => "YouTube Videos matching query: ruby on rails"
video_search.entry[3].link[1].href # => http://gdata.youtube.com/feeds/api/videos/UCB57Npj9U0/responses?v=2
:get related videos
http://gdata.youtube.com/feeds/api/videos/rFVHjZYoq4Q/related?v=2
= Youtube::Video.find(:scope => 'rFVHjZYoq4Q', :type => 'related', :params => {:v => '2'})
.entry.size # => 25
.entry[24]..uri # => http://gdata.youtube.com/feeds/api/users/neodracco
:get video responses
http://gdata.youtube.com/feeds/api/videos/rFVHjZYoq4Q/responses?v=2
video_responses = Youtube::Video.find(:scope => 'rFVHjZYoq4Q', :type => 'responses', :params => {:v => '2'})
video_responses.entry[1].group.category # => Music
:get video comments
http://gdata.youtube.com/feeds/api/videos/rFVHjZYoq4Q/comments?v=2
video_comments = Youtube::Video.find(:scope => 'rFVHjZYoq4Q', :type => 'comments', :params => {:v => '2'})
video_comments.entry[0].content # => Come up to my first ever e on this about 14-15 years ago, ahh too long...
:get top 11 videos in Comedy category/tag
http://gdata.youtube.com/feeds/api/videos?category=Comedy&max-results=11&v=2
video_category = Youtube::Video.find(:params => {:category => 'Comedy', :"max-results" => '11', :v => '2'})
video_category.entry.size # => 11
video_category.entry[9].category[2].term # => Harry Potter
video_category.entry[0].category[1].term # => Comedy
:get top 5 videos in Comedy category/tag, excluding Film category/tag
http://gdata.youtube.com/feeds/api/videos?category=Comedy%2C-Film&max-results=5&v=2
video_category_comedy_exclude_film = Youtube::Video.find(:params => {:category => 'Comedy,-Film', :"max-results" => '5', :v => '2'})
video_category_comedy_exclude_film.entry[1].category.size # => 18
video_category_comedy_exclude_film.entry[1].category.each { |category| puts 'film' if category.term.eql?('Film') } #=> nil
:get videos in david, beckham,(News or Sports) category/tags
http://gdata.youtube.com/feeds/api/videos?category=david%2Cbeckham%2CNews%7CSports&v=2
video_category_david_beckham_news_or_sports = Youtube::Video.find(:params => {:category => 'david,beckham,News|Sports', :v => '2'})
video_category_david_beckham_news_or_sports.entry[7].category[1].label # => Sports
video_category_david_beckham_news_or_sports.entry[7].category[2].term # => david
:put an updated video
video_uid = "video_uid"
user_name = "user_name"
update_xml = IO.read('fixture/video_update.xml')
oauth_token = "oauth_token"
x_gdata_key = "x_gdata_key"
response = Youtube::Video.update(video_uid, user_name, update_xml, oauth_token, oauth_token_secret, x_gdata_key, host, host_secret)
response.code # => 200
Standardfeed
:get top rated videos from today
http://gdata.youtube.com/feeds/api/standardfeeds/top_rated?time=today&v=2
standardfeed_topratedtoday = Youtube::Standardfeed.find(:type => 'top_rated', :params => {:time => 'today', :v => '2'})
standardfeed_topratedtoday.entry[16]..name = "ZOMGitsCriss"
:get top rated videos from jp
http://gdata.youtube.com/feeds/api/standardfeeds/JP/top_rated?v=2
standardfeed_toprated_jp = Youtube::Standardfeed.find(:scope => 'JP', :type => 'top_rated', :params => {:v => '2'})
standardfeed_toprated_jp.id = "tag:youtube.com,2008:standardfeed:jp:top_rated"
standardfeed_toprated_jp.entry[1].link[4].href = "http://gdata.youtube.com/feeds/api/standardfeeds/jp/top_rated/v/BQ9YtJC-Kd8?v=2"
:get top rated comedy videos from jp
http://gdata.youtube.com/feeds/api/standardfeeds/JP/top_rated?category=Comedy&max-results=11&v=2
standardfeed_toprated_jp_comedy = Youtube::Standardfeed.find(:scope => 'JP', :type => 'top_rated', :params => {:category => 'Comedy', :"max-results" => '11', :v => '2'})
standardfeed_toprated_jp_comedy.entry[1].link[4].href = "http://gdata.youtube.com/feeds/api/standardfeeds/jp/top_rated/v/7hYGkqc1gqE?v=2"
User
:get a single user
http://gdata.youtube.com/feeds/api/users/neodracco
user_search = Youtube::User.find(:scope => 'neodracco')
user_search.entry.size => 1
:get ionysis favourite videos
http://gdata.youtube.com/feeds/api/users/ionysis/favorites?v=2
user_ionysis_favourites = Youtube::User.find(:scope => 'ionysis', :type => 'favorites', :params => {:v => '2'})
user_ionysis_favourites.entry[7].statistics.favoriteCount) = "9586"
user_ionysis_favourites.entry[7].rating[1].numLikes) = "2568"
:get cyanure1982 playlists
http://gdata.youtube.com/feeds/api/users/cyanure1982/playlists?v=2
user_cyanure1982_playlists = Youtube::User.find(:scope => 'cyanure1982', :type => 'playlists', :params => {:v => '2'})
user_cyanure1982_playlists.entry[2].title) = "shinnenkai"
:get ionysis subscriptions
http://gdata.youtube.com/feeds/api/users/ionysis/subscriptions?v=2
user_ionysis_subscriptions = Youtube::User.find(:scope => 'ionysis', :type => 'subscriptions', :params => {:v => '2'})
user_ionysis_subscriptions.entry[0].title) = "Videos published by : vinyljunkie07"
:get vinyljunkie07 contacts
http://gdata.youtube.com/feeds/api/users/vinyljunkie07/contacts?v=2
user_vinyljunkie07_contacts = Youtube::User.find(:scope => 'vinyljunkie07', :type => 'contacts', :params => {:v => '2'})
user_vinyljunkie07_contacts.entry[18].id) "tag:youtube.com,2008:user:vinyljunkie07:contact:CrackerSchool"
Playlist
:get the cyanure1982 playlist - shinnenkai(D00BDE6AA710D50C)
http://gdata.youtube.com/feeds/api/playlists/D00BDE6AA710D50C?max-results=14&v=2
playlist_cyanure1982 = Youtube::Playlist.find(:scope => 'D00BDE6AA710D50C', :params => {:"max-results" => '14', :v => '2'})
playlist_cyanure1982.entry.size = 14
playlist_cyanure1982.entry[7].group.keywords = "nu, jazz, club, house, Jazztronik, dj, Yukihiro, Fukutomi, Mondo, Grosso, Daishi, Dance, FreeTEMPO, FPM, KJM, Kentaro, Takizawa"
simple_youtube is derived from the active_youtube gem from the Quark ruby blog
Big Thanks to the Quark crew for the inspiration!!!