acts_as_unvlogable 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,15 @@
1
+ # This removes the activesupport dependency
2
+
3
+ class Object
4
+ def blank?
5
+ respond_to?(:empty?) ? empty? : !self
6
+ end
7
+
8
+ def instance_values #:nodoc:
9
+ instance_variables.inject({}) do |values, name|
10
+ values[name.to_s[1..-1]] = instance_variable_get(name)
11
+ values
12
+ end
13
+ end
14
+
15
+ end
@@ -0,0 +1,24 @@
1
+ # This removes the activesupport dependency
2
+
3
+ class String
4
+ def camelize(first_letter_in_uppercase = true)
5
+ if first_letter_in_uppercase
6
+ self.to_s.gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase }
7
+ else
8
+ self.first + camelize(self)[1..-1]
9
+ end
10
+ end
11
+
12
+ def constantize
13
+ camel_cased_word = self
14
+ unless /\A(?:::)?([A-Z]\w*(?:::[A-Z]\w*)*)\z/ =~ camel_cased_word
15
+ raise NameError, "#{camel_cased_word.inspect} is not a valid constant name!"
16
+ end
17
+
18
+ Object.module_eval("::#{$1}", __FILE__, __LINE__)
19
+ end
20
+
21
+ def humanize
22
+ self.to_s.gsub(/_id$/, "").gsub(/_/, " ").capitalize
23
+ end
24
+ end
@@ -0,0 +1,8 @@
1
+
2
+ class String
3
+ def query_param(param_name)
4
+ raise ArgumentError.new("param name can't be nil") if param_name.blank?
5
+ uri = URI.parse(self)
6
+ (CGI::parse(uri.query)[param_name].first.to_s if uri.query) || nil
7
+ end
8
+ end
@@ -0,0 +1,3 @@
1
+ module ActsAsUnvlogable
2
+ VERSION = "1.0.0"
3
+ end
@@ -0,0 +1,57 @@
1
+ # ----------------------------------------------
2
+ # Class for 11870 (11870.com)
3
+ # http://11870.com/pro/chic-basic-born/media/b606abfe
4
+ # ----------------------------------------------
5
+
6
+
7
+ class Vg11870
8
+
9
+ def initialize(url=nil, options={})
10
+ @url = url
11
+ @page = Hpricot(open(url))
12
+ @flashvars = get_hash(/var flashvars = \{(.+)\}/.match(@page.to_s)[1])
13
+ @flashvars['logo'] = "http://11870.com#{@flashvars['logo']}" unless @flashvars['logo'].blank?
14
+ end
15
+
16
+ def title
17
+ CGI::unescapeHTML @page.search("//h1[@class='fn name']/a").first.inner_html
18
+ end
19
+
20
+ def thumbnail
21
+ @flashvars['image']
22
+ end
23
+
24
+ def duration
25
+ nil
26
+ end
27
+
28
+ def embed_url
29
+ query = @flashvars.map {|k,v| "&#{k}=#{v}"}
30
+ "http://11870.com/multimedia/flvplayer.swf?#{query}"
31
+ end
32
+
33
+ def embed_html(width=425, height=344, options={})
34
+ "<object width='#{width}' height='#{height}' classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' codebase='http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0'> <param name='movie' value='#{embed_url}' /> <param name='quality' value='high' /><embed src='#{embed_url}' width='#{width}' height='#{height}' quality='high' type='application/x-shockwave-flash' pluginspage='http://www.macromedia.com/go/getflashplayer'/></object>"
35
+ end
36
+
37
+ def flv
38
+ @flashvars['file']
39
+ end
40
+
41
+ def download_url
42
+ nil
43
+ end
44
+
45
+ def service
46
+ "11870.com"
47
+ end
48
+
49
+ protected
50
+
51
+ def get_hash(string)
52
+ pieces = string.gsub('"', '').split(/,|:\s/)
53
+ hash = Hash[*pieces]
54
+ hash.delete_if { |key, value| value.nil? || key == "displaywidth" }
55
+ end
56
+
57
+ end
@@ -0,0 +1,48 @@
1
+ # ----------------------------------------------
2
+ # Class for BlipTv (blip.tv)
3
+ # http://blip.tv/file/678407/
4
+ # ----------------------------------------------
5
+
6
+
7
+ class VgBlip
8
+
9
+ def initialize(url=nil, options={})
10
+ @url = url.split("?").first if url
11
+ res = Net::HTTP.get(URI.parse("#{url}?skin=rss"))
12
+ @feed = REXML::Document.new(res)
13
+ end
14
+
15
+ def title
16
+ CGI::unescape REXML::XPath.first(@feed, "//media:title")[0].to_s
17
+ end
18
+
19
+ def thumbnail
20
+ REXML::XPath.first(@feed, "//blip:smallThumbnail")[0].to_s
21
+ end
22
+
23
+ def duration
24
+ nil
25
+ end
26
+
27
+ def embed_url
28
+ emb = REXML::XPath.first(@feed, "//media:player")[0].to_s
29
+ emb.split("src=\"")[1].split("\"")[0]
30
+ end
31
+
32
+ def embed_html(width=425, height=344, options={})
33
+ "<embed src='#{embed_url}' type='application/x-shockwave-flash' width='#{width}' height='#{height}' allowscriptaccess='always' allowfullscreen='true'></embed>"
34
+ end
35
+
36
+ def flv
37
+ REXML::XPath.first(@feed, "//enclosure").attributes['url']
38
+ end
39
+
40
+ def download_url
41
+ nil
42
+ end
43
+
44
+ def service
45
+ "Blip.tv"
46
+ end
47
+
48
+ end
@@ -0,0 +1,66 @@
1
+ # ----------------------------------------------
2
+ # Class for Collegehumor (www.collegehumor.com)
3
+ # http://www.collegehumor.com/video:1781938
4
+ # ----------------------------------------------
5
+
6
+
7
+ class VgCollegehumor
8
+
9
+ def initialize(url=nil, options={})
10
+ @url = url
11
+ @video_id = parse_url(url)
12
+ res = Net::HTTP.get(URI.parse("http://www.collegehumor.com/moogaloop/video:#{@video_id}"))
13
+ @feed = REXML::Document.new(res)
14
+ end
15
+
16
+ def title
17
+ REXML::XPath.first(@feed, "//video/caption")[0].to_s
18
+ end
19
+
20
+ def thumbnail
21
+ REXML::XPath.first(@feed, "//video/thumbnail")[0]
22
+ end
23
+
24
+ def embed_url
25
+ "http://www.collegehumor.com/moogaloop/moogaloop.swf?clip_id=#{@video_id}&fullscreen=1"
26
+ end
27
+
28
+ def embed_html(width=425, height=344, options={})
29
+ "<object type='application/x-shockwave-flash' data='#{embed_url}' width='#{width}' height='#{height}'><param name='allowfullscreen' value='true'/><param name='wmode' value='transparent'/><param name='AllowScriptAccess' value='true'/><param name='movie' quality='best' value='#{embed_url}'/><embed src='#{embed_url}' type='application/x-shockwave-flash' wmode='transparent' width='#{width}' height='#{height}' allowScriptAccess='always'></embed></object>"
30
+ end
31
+
32
+ def flv
33
+ REXML::XPath.first(@feed, "//video/file")[0]
34
+ end
35
+
36
+ def download_url
37
+ nil
38
+ end
39
+
40
+ def duration
41
+ nil
42
+ end
43
+
44
+ def service
45
+ "CollegeHumor"
46
+ end
47
+
48
+ private
49
+
50
+ def parse_url(url)
51
+ uri = URI.parse(url)
52
+ path = uri.path
53
+ videoargs = ''
54
+ if path and path.split(":").size > 0
55
+ videoargs = path.split(":")
56
+ raise unless videoargs.size > 0 && videoargs.first == '/video'
57
+ else
58
+ raise
59
+ end
60
+ videoargs[1]
61
+ rescue
62
+ nil
63
+ end
64
+
65
+
66
+ end
@@ -0,0 +1,66 @@
1
+ # ----------------------------------------------
2
+ # Class for Dailymotion (www.dailymotion.com)
3
+ # http://www.dailymotion.com/visited-week/lang/es/video/x7u5kn_parkour-dayyy_sport
4
+ # ----------------------------------------------
5
+
6
+
7
+ class VgDailymotion
8
+
9
+ def initialize(url=nil, options={})
10
+ @url = url
11
+ @video_id = parse_url(url)
12
+ res = Net::HTTP.get(URI.parse("http://www.dailymotion.com/rss/video/#{@video_id}"))
13
+ @feed = REXML::Document.new(res)
14
+ end
15
+
16
+ def title
17
+ REXML::XPath.first(@feed, "//item/title")[0].to_s
18
+ end
19
+
20
+ def thumbnail
21
+ REXML::XPath.first(@feed, "//media:thumbnail").attributes['url'].gsub("preview_large", "preview_medium")
22
+ end
23
+
24
+ def embed_url
25
+ REXML::XPath.first(@feed, "//media:content[@type='application/x-shockwave-flash']").attributes['url']
26
+ end
27
+
28
+ def embed_html(width=425, height=344, options={})
29
+ "<object width='#{width}' height='#{height}'><param name='movie' value='#{embed_url}&related=1'></param><param name='allowFullScreen' value='true'></param><param name='allowScriptAccess' value='always'></param><embed src='#{embed_url}&related=1' type='application/x-shockwave-flash' width='#{width}' height='#{height}' allowFullScreen='true' allowScriptAccess='always'></embed></object>"
30
+ end
31
+
32
+ def flv
33
+ REXML::XPath.first(@feed, "//media:content[@type='video/x-flv']").attributes['url']
34
+ end
35
+
36
+ def download_url
37
+ nil
38
+ end
39
+
40
+ def duration
41
+ nil
42
+ end
43
+
44
+ def service
45
+ "Dailymotion"
46
+ end
47
+
48
+ private
49
+
50
+ def parse_url(url)
51
+ uri = URI.parse(url)
52
+ path = uri.path
53
+ videoargs = ''
54
+ if path
55
+ videoargs = path.split('/video/')[1].split("/")[0]
56
+ raise unless videoargs.size > 0
57
+ else
58
+ raise
59
+ end
60
+ videoargs
61
+ rescue
62
+ nil
63
+ end
64
+
65
+
66
+ end
@@ -0,0 +1,49 @@
1
+ # ----------------------------------------------
2
+ # Class for dalealplay (dalealplay.com)
3
+ # http://www.dalealplay.com/informaciondecontenido.php?con=80280
4
+ #
5
+ # Crappy without api
6
+ # ----------------------------------------------
7
+
8
+
9
+ class VgDalealplay
10
+
11
+ def initialize(url=nil, options={})
12
+ @url = url
13
+ @video_id = @url.query_param('con')
14
+ @page = Hpricot(open(url))
15
+ end
16
+
17
+ def title
18
+ (Iconv.iconv 'utf-8', 'iso-8859-1', @page.search("//title").inner_html.split(" - www.dalealplay.com")[0]).to_s
19
+ end
20
+
21
+ def thumbnail
22
+ "http://images-00.dalealplay.com/contenidos2/#{@video_id}/captura.jpg"
23
+ end
24
+
25
+ def embed_url
26
+ @page.search("//link[@rel='video_src']").first.attributes["href"].sub("autoStart=true", "autoStart=false")
27
+ end
28
+
29
+ def duration
30
+ nil
31
+ end
32
+
33
+ def embed_html(width=425, height=344, options={})
34
+ "<object type='application/x-shockwave-flash' width='#{width}' height='#{height}' data='#{embed_url}'><param name='quality' value='best' /> <param name='allowfullscreen' value='true' /><param name='scale' value='showAll' /><param name='movie' value='http#{embed_url}' /></object>"
35
+ end
36
+
37
+ def flv
38
+ "http://videos.dalealplay.com/contenidos3/#{CGI::parse(URI::parse(embed_url).query)['file']}"
39
+ end
40
+
41
+ def download_url
42
+ nil
43
+ end
44
+
45
+ def service
46
+ "dalealplay"
47
+ end
48
+
49
+ end
@@ -0,0 +1,70 @@
1
+ # ----------------------------------------------
2
+ # Class for Flickr (flickr.com)
3
+ # http://www.flickr.com/photos/andina/3158762127/in/photostream/
4
+ # ----------------------------------------------
5
+
6
+
7
+ class VgFlickr
8
+
9
+ def initialize(url=nil, options={})
10
+ # general settings
11
+ @url = url
12
+ @video_id = parse_url(url)
13
+ settings ||= YAML.load_file(RAILS_ROOT + '/config/unvlogable.yml') rescue {}
14
+ @details = Flickr::Photo.new(@video_id, options.nil? || options[:key].nil? ? settings['flickr_key'] : options[:key])
15
+ raise if @details.media != "video"
16
+ end
17
+
18
+ def title
19
+ @details.title
20
+ end
21
+
22
+ def thumbnail
23
+ @details.source('Small')
24
+ end
25
+
26
+ def embed_url
27
+ "http://www.flickr.com/apps/video/stewart.swf?v=63881&intl_lang=en-us&photo_secret=#{@details.secret}&photo_id=#{@video_id}"
28
+ end
29
+
30
+ def embed_html(width=425, height=344, options={})
31
+ "<object type='application/x-shockwave-flash' width='#{width}' height='#{height}' data='http://www.flickr.com/apps/video/stewart.swf?v=63881' classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000'><param name='movie' value='#{embed_url}'></param> <param name='bgcolor' value='#000000'></param> <param name='allowFullScreen' value='true'></param><embed type='application/x-shockwave-flash' src='#{embed_url}' bgcolor='#000000' allowfullscreen='true' width='#{width}' height='#{height}'></embed></object>"
32
+ end
33
+
34
+
35
+ def flv
36
+ player_feed = "http://www.flickr.com/apps/video/video_mtl_xml.gne?v=x&photo_id=#{@video_id}&secret=#{@details.secret}&olang=en-us&noBuffer=null&bitrate=700&target=_blank"
37
+ res = Net::HTTP.get(URI::parse(player_feed))
38
+ player_feed_xml = REXML::Document.new(res)
39
+ data_id = REXML::XPath.first(player_feed_xml, "//Data/Item[@id='id']")[0].to_s
40
+
41
+ video_feed = "http://www.flickr.com/video_playlist.gne?node_id=#{data_id}&tech=flash&mode=playlist&lq=j2CW2jbpqCLKRy_s4bTylH&bitrate=700&secret=#{@details.secret}&rd=video.yahoo.com-offsite&noad=1"
42
+ res = Net::HTTP.get(URI::parse(video_feed))
43
+ video_feed_xml = REXML::Document.new(res)
44
+ stream = REXML::XPath.first(video_feed_xml, "//DATA/SEQUENCE-ITEM/STREAM")
45
+ "#{stream.attributes['APP']}#{stream.attributes['FULLPATH']}"
46
+ end
47
+
48
+ def download_url
49
+ nil
50
+ end
51
+
52
+ def duration
53
+ nil
54
+ end
55
+
56
+ def service
57
+ "Flickr"
58
+ end
59
+
60
+ private
61
+
62
+ def parse_url(url)
63
+ video_id = URI::parse(url).path.split("/")[3]
64
+ raise unless video_id
65
+ video_id
66
+ rescue
67
+ nil
68
+ end
69
+
70
+ end
@@ -0,0 +1,48 @@
1
+ # ----------------------------------------------
2
+ # Class for Marca.tv (www.marca.tv)
3
+ # http://www.marca.com/tv/?v=DN23wG8c1Rj
4
+ # ----------------------------------------------
5
+
6
+
7
+ class VgMarca
8
+
9
+ def initialize(url=nil, options={})
10
+ @url = url
11
+ @video_id = @url.query_param('v')
12
+ res = Net::HTTP.get(URI.parse("http://estaticos.marca.com/consolamultimedia/marcaTV/elementos/#{@video_id[0,1]}/#{@video_id[1,1]}/#{@video_id[2,100]}.xml"))
13
+ @feed = REXML::Document.new(res)
14
+ end
15
+
16
+ def title
17
+ REXML::XPath.first( @feed, "//titulo" )[0].to_s
18
+ end
19
+
20
+ def thumbnail
21
+ REXML::XPath.first( @feed, "//foto" )[0].to_s
22
+ end
23
+
24
+ def duration
25
+ nil
26
+ end
27
+
28
+ def embed_url
29
+ "http://www.marca.com/componentes/flash/embed.swf?ba=0&cvol=1&bt=1&lg=1&vID=#{@video_id}&ba=1"
30
+ end
31
+
32
+ def embed_html(width=425, height=344, options={})
33
+ "<embed width='#{width}' height='#{height}' wmode='transparent' pluginspage='http://www.macromedia.com/go/getflashplayer' type='application/x-shockwave-flash' allowfullscreen='true' quality='high' src='#{embed_url}'/>"
34
+ end
35
+
36
+ def flv
37
+ REXML::XPath.first(@feed, "//media")[0].to_s
38
+ end
39
+
40
+ def download_url
41
+ nil
42
+ end
43
+
44
+ def service
45
+ "Marca.tv"
46
+ end
47
+
48
+ end
@@ -0,0 +1,77 @@
1
+ # ----------------------------------------------
2
+ # Class for Metacafe (www.metacafe.com)
3
+ # http://www.metacafe.com/watch/476621/experiments_with_the_myth_busters_with_diet_coke_and_mentos_dry/
4
+ # ----------------------------------------------
5
+
6
+
7
+ class VgMetacafe
8
+
9
+ def initialize(url=nil, options={})
10
+ @url = url
11
+ @args = parse_url(url)
12
+
13
+ #is the video 'youtubed'?
14
+ @youtubed = @args[1].index("yt-").nil? ? false : true
15
+ @yt = @youtubed ? VgYoutube.new("http://www.youtube.com/watch?v=#{@args[1].sub('yt-', '')}") : nil
16
+ end
17
+
18
+ def title
19
+ @youtubed ? @yt.title : (@args[2].humanize unless @args[2].blank?)
20
+ end
21
+
22
+ def thumbnail
23
+ "http://www.metacafe.com/thumb/#{@args[1]}.jpg"
24
+ end
25
+
26
+ def embed_url
27
+ "http://www.metacafe.com/fplayer/#{@args[1]}/#{@args[2]}.swf"
28
+ end
29
+
30
+ def embed_html(width=425, height=344, options={})
31
+ "<embed src='#{embed_url}' width='#{width}' height='#{height}' wmode='transparent' pluginspage='http://www.macromedia.com/go/getflashplayer' type='application/x-shockwave-flash'></embed>"
32
+ end
33
+
34
+ def flv
35
+ if @youtubed
36
+ @yt.flv
37
+ else
38
+ params = Hash.new
39
+ open(self.embed_url) {|f|
40
+ params = CGI::parse(f.base_uri.request_uri.split("?")[1])
41
+ }
42
+ CGI::unescape "#{ params['mediaURL']}?__gda__=#{params['gdaKey']}"
43
+ end
44
+ end
45
+
46
+ def duration
47
+ nil
48
+ end
49
+
50
+ def download_url
51
+ nil
52
+ end
53
+
54
+ def service
55
+ "Metacafe"
56
+ end
57
+
58
+ private
59
+
60
+ def parse_url(url)
61
+ uri = URI.parse(url)
62
+ path = uri.path
63
+ @args = ''
64
+ if path and path.split("/").size >=1
65
+ @args = path.split("/")
66
+ @args.delete("watch")
67
+
68
+ raise unless @args.size > 0
69
+ else
70
+ raise
71
+ end
72
+ @args
73
+ rescue
74
+ nil
75
+ end
76
+
77
+ end
@@ -0,0 +1,65 @@
1
+ # ----------------------------------------------
2
+ # Class for MTV Music (www.mtvmusic.com)
3
+ # http://www.mtvmusic.com/astley_rick/videos/55086/never_gonna_give_you_up.jhtml
4
+ #
5
+ #
6
+ # quite ugly, we know :(
7
+ # ----------------------------------------------
8
+
9
+
10
+ class VgMtvmusic
11
+
12
+ def initialize(url=nil, options={})
13
+ @url = url
14
+ @video_id = @url.query_param('id') || URI.parse(@url).path.split("/")[3]
15
+ @feed = nil
16
+
17
+ # veeeeeery ugly
18
+ page = Hpricot(open(url))
19
+ searchterms = page.search("//title").first.inner_html.split("Music Video")
20
+ res = Net::HTTP.get(URI.parse("http://api.mtvnservices.com/1/video/search/?term=#{searchterms[0].gsub(' ', '%20')}"))
21
+ search = REXML::Document.new(res)
22
+ entries = search.elements.to_a("//entry")
23
+ entries.each do |entry|
24
+ if REXML::XPath.first(entry, "media:content" ).attributes['url'] == "http://media.mtvnservices.com/mgid:uma:video:api.mtvnservices.com:#{@video_id}"
25
+ @feed = entry
26
+ end
27
+ end
28
+ end
29
+
30
+ def title
31
+ REXML::XPath.first(@feed, "//entry/title")[0].to_s
32
+ end
33
+
34
+ def thumbnail
35
+ REXML::XPath.first(@feed, "//media:thumbnail").attributes['url']
36
+ end
37
+
38
+ def duration
39
+ nil
40
+ end
41
+
42
+ def embed_url
43
+ REXML::XPath.first(@feed, "//media:content[@type='application/x-shockwave-flash']").attributes['url']
44
+ end
45
+
46
+ def embed_html(width=425, height=344, options={})
47
+ "<embed src='#{embed_url}' width='#{width}' height='#{height}' type='application/x-shockwave-flash' flashVars='dist=http://www.mtvmusic.com' allowFullScreen='true' AllowScriptAccess='never'></embed>"
48
+ end
49
+
50
+ # this method fails depending on country restrictions
51
+ def flv
52
+ res = Net::HTTP.get(URI.parse("http://api-media.mtvnservices.com/player/embed/includes/mediaGen.jhtml?uri=mgid:uma:video:api.mtvnservices.com:#{@video_id}&vid=#{@video_id}&ref=#{CGI::escape "{ref}"}"))
53
+ search = REXML::Document.new(res)
54
+ REXML::XPath.first(search, "//rendition/src")[0]
55
+ end
56
+
57
+ def download_url
58
+ nil
59
+ end
60
+
61
+ def service
62
+ "MTV Music"
63
+ end
64
+
65
+ end
@@ -0,0 +1,48 @@
1
+ # ----------------------------------------------
2
+ # Class for Myspace (vids.myspace.com)
3
+ # http://vids.myspace.com/index.cfm?fuseaction=vids.individual&VideoID=27111431
4
+ # ----------------------------------------------
5
+
6
+
7
+ class VgMyspace
8
+
9
+ def initialize(url=nil, options={})
10
+ @url = url
11
+ @video_id = @url.query_param('videoid').blank? ? @url.query_param('VideoID') : @url.query_param('videoid')
12
+ res = Net::HTTP.get(URI.parse("http://mediaservices.myspace.com/services/rss.ashx?type=video&videoID=#{@video_id}"))
13
+ @feed = REXML::Document.new(res)
14
+ end
15
+
16
+ def title
17
+ REXML::XPath.first(@feed, "//item/title")[0].to_s
18
+ end
19
+
20
+ def thumbnail
21
+ REXML::XPath.first(@feed, "//media:thumbnail").attributes['url']
22
+ end
23
+
24
+ def duration
25
+ nil
26
+ end
27
+
28
+ def embed_url
29
+ "http://lads.myspace.com/videos/vplayer.swf?m=#{REXML::XPath.first( @feed, "//myspace:itemID" )[0]}&v=2&type=video"
30
+ end
31
+
32
+ def embed_html(width=425, height=344, options={})
33
+ "<embed src='#{embed_url}' type='application/x-shockwave-flash' width='#{width}' height='#{height}'></embed>"
34
+ end
35
+
36
+ def flv
37
+ REXML::XPath.first(@feed, "//media:content").attributes['url']
38
+ end
39
+
40
+ def download_url
41
+ nil
42
+ end
43
+
44
+ def service
45
+ "Myspace"
46
+ end
47
+
48
+ end