ruby_legendas_tv 0.9.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: c2a0d53e10d26b90a085e1b90eeeeb021c176712
4
+ data.tar.gz: 53372597d786b399886ba053b4c3e8fc6af0cdc9
5
+ SHA512:
6
+ metadata.gz: c5a69842596ba945b6d12efd80e3bb3bb58a175bb344cf35eea10d2be1bc141a08e982a1d9dd998d8878daf688ff1b6787ee18e3a0af2411959b1a5df9546127
7
+ data.tar.gz: 0e790d6b560fc5cc3785af5c56b5a375c62e96479a5426791f5bf44a01ae399e4a612a0395afe129690af066f475257240eeea689ae474af7b61a79e2b41a3df
@@ -0,0 +1,39 @@
1
+ class HomeParser
2
+ def self.get_most_downloaded_subtitles(base_url)
3
+
4
+ document = WebsiteUtils.open_document(base_url)
5
+
6
+ subtitles = Array.new
7
+ items_div = document.css('div.item').children
8
+ items_div.each{|link|
9
+ #puts link['href']
10
+ subtitle = Subtitle.get_subtitle_from_link(base_url, link['href'])
11
+ subtitles.push(subtitle)
12
+ }
13
+ subtitles
14
+ end
15
+
16
+ def self.get_highlights(base_url, page=1)
17
+ link = 'util/carrega_destaques'
18
+ if page != 1
19
+ link = link+'/todos/page:' + page.to_s
20
+ end
21
+ document = WebsiteUtils.open_document(base_url+link)
22
+
23
+ unless document.nil?
24
+ subtitles = Array.new
25
+ items_div = document.css('div.galery').css('div.clearfix').children
26
+ items_div.each{|link|
27
+ unless link.nil?
28
+ a = link.children.css('a')
29
+ unless a.nil? || a.empty?
30
+ href = a.attr('href')
31
+ subtitle = Subtitle.get_subtitle_from_link(base_url, href)
32
+ subtitles.push(subtitle)
33
+ end
34
+ end
35
+ }
36
+ subtitles
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,10 @@
1
+ class Movie
2
+ attr_accessor :title, :description, :sinopsis, :image_link
3
+
4
+ def initialize(title, description, sinopsis, image_link)
5
+ @title = title
6
+ @description = description
7
+ @sinopsis = sinopsis
8
+ @image_link = image_link
9
+ end
10
+ end
@@ -0,0 +1,46 @@
1
+ require 'uri'
2
+
3
+ class SearchEngine
4
+ def self.search_subtitle(base_url, query, page=1)
5
+ unless query.nil?
6
+ query = URI.escape(query)
7
+ link = 'util/carrega_legendas_busca/termo:' + query
8
+ if page != 1
9
+ link = link + '/page:' + page
10
+ end
11
+ document = WebsiteUtils.open_document(base_url+link)
12
+ unless document.nil?
13
+ subtitles = Array.new
14
+ urls = WebsiteUtils.get_article_urls(document)
15
+ urls.each_pair do |url, language|
16
+ subtitle = Subtitle.get_subtitle_from_link(base_url, url, language)
17
+ subtitles.push(subtitle)
18
+ end
19
+ subtitles
20
+ end
21
+ end
22
+ end
23
+
24
+ def self.search_title(base_url, query)
25
+ unless query.nil?
26
+ query = URI.escape(query)
27
+ link = 'busca?q=' + query
28
+
29
+ document = WebsiteUtils.open_document(base_url+link)
30
+ unless document.nil?
31
+ titles = Array.new
32
+ items_div = document.css('div.slider').children.css('div.item')
33
+ items_div.each{|link|
34
+ url = link.css('a').attr('href').text
35
+ img_url = link.css('img').attr('src').text
36
+ name = link.css('span').text
37
+ description = link.css('p').text
38
+
39
+ title = Title.new(name, description, img_url, url)
40
+ titles.push(title)
41
+ }
42
+ titles
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,66 @@
1
+ class Subtitle
2
+ attr_accessor :movie, :release, :date, :uploader, :download_num, :download_link, :likes, :unlikes, :description, :lang
3
+
4
+ def initialize(movie, release, date, uploader, download_num, download_link, likes, unlikes, description, lang=nil)
5
+ @movie = movie
6
+ @release = release
7
+ @date = date
8
+ @uploader = uploader #not implemented yet
9
+ @download_num = download_num
10
+ @download_link = download_link
11
+ @likes = likes #not implemented yet
12
+ @unlikes = unlikes #not implemented yet
13
+ @description = description
14
+ @lang=lang
15
+ end
16
+
17
+ def self.get_subtitle_from_link(base_url, link, lang=nil)
18
+ if link.nil?
19
+ return nil
20
+ else
21
+ page = WebsiteUtils.open_document(base_url+link)
22
+ if page.nil?
23
+ return nil
24
+ else
25
+ info = page.css('div.middle').css('section.first')
26
+ movie_title = info.css('h3').text
27
+ movie_description = info.css('h5').text
28
+ movie_sinopsis = info.css('div.t1').css('p').text
29
+ movie_img = info.css('img').attr('src')
30
+
31
+ movie = Movie.new(movie_title, movie_description, movie_sinopsis, movie_img)
32
+
33
+ release = page.css('h2')[0].text
34
+ date = page.css('span.date').text
35
+ hour = page.css('span.hour').text
36
+ if hour.nil?
37
+ datetime=Date.new(date)
38
+ else
39
+ datetime = DateTime.strptime(date + ' ' + hour, '%d/%m/%Y %Hh%M')
40
+ end
41
+ download_num = page.css('span.number').text.to_i
42
+ description = page.css('div.t2').css('p').text
43
+ download_link = page.css('button.icon_arrow').attr('onclick').text
44
+ download_link = download_link.gsub("window.open('", '')
45
+ download_link = download_link.gsub("', '_self')", '')
46
+
47
+ subtitle = Subtitle.new(movie, release, datetime, nil, download_num, download_link, nil, nil, description, lang)
48
+ subtitle
49
+ end
50
+ end
51
+ end
52
+
53
+ def self.get_subtitles_from_title(base_url, title)
54
+ link = title.link
55
+ document = WebsiteUtils.open_document(base_url+link)
56
+ unless document.nil?
57
+ subtitles = Array.new
58
+ urls = WebsiteUtils.get_article_urls(document)
59
+ urls.each_pair do |url, language|
60
+ subtitle = self.get_subtitle_from_link(base_url, url, language)
61
+ subtitles.push(subtitle)
62
+ end
63
+ subtitles
64
+ end
65
+ end
66
+ end
@@ -0,0 +1,11 @@
1
+ class Title
2
+ attr_accessor :name, :description, :image_url, :link, :id
3
+
4
+ def initialize(name, description, image_url, link)
5
+ @name = name
6
+ @description = description
7
+ @image_url = image_url
8
+ @id = link.split('/').last.split(':').last
9
+ @link = link
10
+ end
11
+ end
@@ -0,0 +1,33 @@
1
+ require 'timeout'
2
+
3
+ class WebsiteUtils
4
+ #Returns a hash where key is link and value is the language of subtitle
5
+ def self.get_article_urls(document)
6
+ unless document.nil?
7
+ links = Hash.new
8
+ items_div = document.css('div.gallery').css('article').children
9
+ #puts items_div.inspect
10
+ items_div.each{|link|
11
+ links[link.css('a').attr('href').text] = link.css('img').attr('title')
12
+ }
13
+ links
14
+ end
15
+ end
16
+
17
+ def self.open_document(url, tries=0)
18
+ begin
19
+ if tries > 3
20
+ return nil
21
+ else
22
+ status = Timeout::timeout(30) {
23
+ document = Nokogiri::HTML(open(url, "User-Agent" => "Chrome/15.0.874.121"))
24
+ return document
25
+ }
26
+ end
27
+ rescue Timeout::Error
28
+ puts 'Timeout error... Trying again'
29
+ document = open_document(url, tries+1)
30
+ return document
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,37 @@
1
+ require 'rubygems'
2
+ require 'nokogiri'
3
+ require 'open-uri'
4
+
5
+ load 'lib/ruby_legendas_tv/home_parser.rb'
6
+ load 'lib/ruby_legendas_tv/movie.rb'
7
+ load 'lib/ruby_legendas_tv/search_engine.rb'
8
+ load 'lib/ruby_legendas_tv/subtitle.rb'
9
+ load 'lib/ruby_legendas_tv/title.rb'
10
+ load 'lib/ruby_legendas_tv/website_utils.rb'
11
+
12
+ class RubyLegendasTv
13
+
14
+ @@base_url = "http://legendas.tv/"
15
+
16
+ public
17
+
18
+ def self.search_titles(query)
19
+ SearchEngine.search_title(@@base_url, query)
20
+ end
21
+
22
+ def self.search_subtitles_from_title(title)
23
+ Subtitle.get_subtitles_from_title(@@base_url, title)
24
+ end
25
+
26
+ def self.search_subtitles(query)
27
+ SearchEngine.search_subtitle(@@base_url, query)
28
+ end
29
+
30
+ def self.get_most_downloaded_subtitles
31
+ HomeParser.get_most_downloaded_subtitles(@@base_url)
32
+ end
33
+
34
+ def self.get_highlights(page=1)
35
+ HomeParser.get_highlights(@@base_url, page)
36
+ end
37
+ end
metadata ADDED
@@ -0,0 +1,50 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ruby_legendas_tv
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.3
5
+ platform: ruby
6
+ authors:
7
+ - Gustavo Chapim
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-02-08 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: A gem for LegendasTV new website
14
+ email: gustavo.chapim@ufrj.br
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/ruby_legendas_tv.rb
20
+ - lib/ruby_legendas_tv/home_parser.rb
21
+ - lib/ruby_legendas_tv/movie.rb
22
+ - lib/ruby_legendas_tv/search_engine.rb
23
+ - lib/ruby_legendas_tv/subtitle.rb
24
+ - lib/ruby_legendas_tv/title.rb
25
+ - lib/ruby_legendas_tv/website_utils.rb
26
+ homepage: http://rubygems.org/gems/ruby_legendas_tv
27
+ licenses:
28
+ - MIT
29
+ metadata: {}
30
+ post_install_message:
31
+ rdoc_options: []
32
+ require_paths:
33
+ - lib
34
+ required_ruby_version: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - '>='
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ required_rubygems_version: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ requirements: []
45
+ rubyforge_project:
46
+ rubygems_version: 2.0.14
47
+ signing_key:
48
+ specification_version: 4
49
+ summary: RubyLegendasTv!
50
+ test_files: []