Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

ActiveResource extension to Gdata Youtube API, anonymous Reads, Updates using your API key and OAuth, no Create or Delete access.

branch: master

Fetching latest commit…

Octocat-spinner-32-eaf2f5

Cannot retrieve the latest commit at this time

Octocat-spinner-32 .bundle
Octocat-spinner-32 lib
Octocat-spinner-32 spec
Octocat-spinner-32 .gitignore
Octocat-spinner-32 Gemfile
Octocat-spinner-32 README.markdown
Octocat-spinner-32 Rakefile
Octocat-spinner-32 simple_youtube.gemspec
README.markdown

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

video_related = Youtube::Video.find(:scope => 'rFVHjZYoq4Q', :type => 'related', :params => {:v => '2'})
video_related.entry.size            # => 25
video_related.entry[24].author.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].author.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!!!

Something went wrong with that request. Please try again.