Class: CrawlerDB
Instance Method Summary collapse
- #buscar_por_titulo(titulo, nlim = 30) ⇒ Object
- #guardar_pelicula(id) ⇒ Object
- #guardar_peliculas(ids, nthread = 5) ⇒ Object
-
#initialize ⇒ CrawlerDB
constructor
A new instance of CrawlerDB.
- #obtener_pelicula(id) ⇒ Object
- #procesar_paginas(letra) ⇒ Object
- #procesar_todo ⇒ Object
Constructor Details
#initialize ⇒ CrawlerDB
Returns a new instance of CrawlerDB.
6 7 8 |
# File 'lib/rfilma/crawlerdb.rb', line 6 def initialize super end |
Instance Method Details
#buscar_por_titulo(titulo, nlim = 30) ⇒ Object
14 15 16 |
# File 'lib/rfilma/crawlerdb.rb', line 14 def buscar_por_titulo(titulo,nlim=30) Pelicula.where(titulo: /#{titulo}/i).limit(nlim).as_json end |
#guardar_pelicula(id) ⇒ Object
18 19 20 21 22 |
# File 'lib/rfilma/crawlerdb.rb', line 18 def guardar_pelicula(id) p = Crawler.new.obtener_pelicula(id) m = Pelicula.new(p) m.upsert end |
#guardar_peliculas(ids, nthread = 5) ⇒ Object
24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/rfilma/crawlerdb.rb', line 24 def guardar_peliculas(ids,nthread=5) pool = Thread.pool(nthread) ids2 = Pelicula.find(ids).each.map{|idd| idd["id"]} ids3 = (ids - ids2) + (ids2 - ids) ids3.each{|i| pool.process{ guardar_pelicula(i) } } pool.shutdown end |
#obtener_pelicula(id) ⇒ Object
10 11 12 |
# File 'lib/rfilma/crawlerdb.rb', line 10 def obtener_pelicula(id) Pelicula.where(id: id).as_json end |
#procesar_paginas(letra) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/rfilma/crawlerdb.rb', line 36 def procesar_paginas(letra) pagina = 1 # Cualquier categoría tiene más de una página r = ">>" indices_pelis = [] while r.include?(">>") p = @a.get("http://www.filmaffinity.com/es/allfilms_#{letra}_#{pagina}.html").body doc = Nokogiri::HTML(p) r = doc.xpath('//div[@class="pager"]/a[contains(text(),">>")]').text doc.xpath('//div[@class="movie-card movie-card-1"]').each{|mc| indices_pelis << mc["data-movie-id"].to_i } pagina+=1 end # Evitamos indices duplicados Set.new(indices_pelis).to_a end |
#procesar_todo ⇒ Object
54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/rfilma/crawlerdb.rb', line 54 def procesar_todo cat = ('A'..'Z').to_a << "*" << "0-9" pool = Thread.pool(5) cat.each{|c| pool.process{ ra = procesar_paginas(c) guardar_peliculas(ra) } } pool.shutdown end |