class VideoFeed < ActiveRecord::Base
require 'simple-rss'
require 'open-uri'
# Scopes, attachments, etc.
default_scope { order("published_at DESC") }
# Validations
validates_presence_of :video_id, :title, :channel
validates_uniqueness_of :video_id
# Relationships
# Methods
def self.sources
["Youtube","Vimeo"]
end
def self.vimeo_types
["Channel","Likes"]
end
# Video Import
def self.import_videos(source)
VideoFeed.build_youtube_feed if source == "Youtube"
VideoFeed.build_vimeo_feed if source == "Vimeo"
@response = "A channel has not been set. Check your settings.".html_safe if source.blank?
# Import
unless @response
count = 0
@rss.items.each do |item|
video = VideoFeed.build_youtube_item(item) if source == "Youtube"
video = VideoFeed.build_vimeo_item(item) if source == "Vimeo"
count += 1 if video.save
end
@response = "#{count} new videos added."
end
@response
end
# Youtube Import
def self.build_youtube_feed
@response = "A channel has not been set. Check your settings.".html_safe if MySettings.youtube_channel.blank?
begin
@rss = SimpleRSS.parse open("http://gdata.youtube.com/feeds/api/users/#{MySettings.youtube_channel}/uploads")
rescue
@response = "Your channel is not valid. Check your settings.".html_safe if @response.blank?
end
@rss.blank? ? @response : @rss
end
def self.build_youtube_item(item)
VideoFeed.new(
:video_id => item.link.split("v=")[1].split("&")[0],
:title => item.title,
:channel => MySettings.youtube_channel,
:thumbnail_url => item.media_thumbnail_url,
:published_at => item.published,
:source => item.link.split("://")[1].split("/")[0].gsub("www.", "").split(".")[0]
)
end
# Vimeo Import
def self.build_vimeo_feed
@response = "A channel has not been set. Check your settings.".html_safe if MySettings.vimeo_channel.blank?
begin
@rss = SimpleRSS.parse open("http://vimeo.com/#{MySettings.vimeo_channel}/#{MySettings.vimeo_feed_type == 'Channel' ? 'videos' : MySettings.vimeo_feed_type.downcase}/rss")
rescue
@response = "Your channel is not valid. Check your settings.".html_safe if @response.blank?
end
@rss.blank? ? @response : @rss
end
def self.build_vimeo_item(item)
VideoFeed.new(
:video_id => item.link.split("vimeo.com/")[1],
:title => item.title,
:channel => MySettings.vimeo_channel,
:thumbnail_url => item.media_thumbnail_url,
:published_at => item.pubDate,
:source => item.link.split("://")[1].split(".com")[0]
)
end
end