derobo-ofdb 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,9 +4,10 @@ require 'rubygems'
4
4
  require 'hpricot'
5
5
 
6
6
  require 'ofdb/string_extensions'
7
- require 'ofdb/movies'
7
+ require 'ofdb/movie'
8
8
  require 'ofdb/search'
9
9
 
10
10
  module Ofdb
11
- VERSION = '0.0.1'
11
+ #current Version of the module
12
+ VERSION = '0.0.2'
12
13
  end
@@ -3,10 +3,32 @@ module Ofdb
3
3
  #This Class is Lazy-Load, means that the Pages are only loaded when needed. Also the data mining
4
4
  #is only done when needed
5
5
  class Movie
6
+ #holds the title of this movie
6
7
  attr_reader :title
7
- def initialize(name)
8
- @name = name
9
- @url = "http://www.ofdb.de/film/#{@name}"
8
+ #holds the "ofdb-id"
9
+ attr_reader :name
10
+ #holds the url of the poster
11
+ attr_reader :poster
12
+
13
+ # Takes a IMDB-ID and call a serch with Ofdb::Search
14
+ # If the serch returns exactly 1 Movie then this Movie is return, else nil
15
+ def Movie.build_from_imdb(id)
16
+ search = Ofdb::Search.new(id, true)
17
+ return search.movies.first if search.movies.size == 1
18
+ nil
19
+ end
20
+
21
+ # Take a link to a Ofdb-page of a Movie and builds the +Ofdb::Movie+
22
+ # The full link isn't require, e.g. for +"http://www.ofdb.de/film/1050,Pulp-Fiction"+ only
23
+ # +"1050,Pulp-Fiction"+ is required.
24
+ def initialize(ofdb_link)
25
+ if ofdb_link =~ /http:\/\/www.ofdb.de\/film/
26
+ @name = ofdb_link.gsub("http:\/\/www.ofdb.de\/film")
27
+ @url = ofdb_link
28
+ else
29
+ @name = ofdb_link
30
+ @url = "http://www.ofdb.de/film/#{@name}"
31
+ end
10
32
  @title = /\d,/.match(name).post_match.gsub("---","§§§").gsub("-", " ").gsub("§§§", " - ")
11
33
  end
12
34
 
@@ -32,10 +54,15 @@ module Ofdb
32
54
  #Returns a URL to the Poster
33
55
  def poster
34
56
  document.search('img[@src^="http://img.ofdb.de/film/"]').each do |x|
35
- return x.get_attribute("src").to_s
57
+ return @poster = x.get_attribute("src").to_s
36
58
  end
37
59
  end
38
60
 
61
+ #Sets the poster to a URL
62
+ def poster=(poster)
63
+ @poster = poster
64
+ end
65
+
39
66
  #Returns a Array containg the Genres
40
67
  def genre
41
68
  get_viewphp("page=genre&Genre=").map {|x| x.innerHTML }
@@ -54,9 +81,11 @@ module Ofdb
54
81
  private
55
82
  # Returns a new Hpricot document for parsing.
56
83
  def document
57
- @document ||= Hpricot(Ofdb::Movie.find_by_id(@url))
84
+ @document ||= Hpricot(open(@url))
58
85
  end
59
86
 
87
+ # Returns a php snipped for a link to "view.php?..." as an Array
88
+ # The Result-Array is only filled with links matching the filter
60
89
  def get_viewphp(filter=nil)
61
90
  rsl = Array.new
62
91
  document.search('font.Daten a[@href^="view.php"').each do |x|
@@ -65,9 +94,6 @@ module Ofdb
65
94
  end
66
95
  rsl
67
96
  end
68
-
69
- def self.find_by_id(url)
70
- open(url)
71
- end
97
+
72
98
  end
73
99
  end
@@ -1,9 +1,11 @@
1
1
  module Ofdb
2
2
  class Search
3
+ require 'cgi'
4
+ # holds the current search String
3
5
  attr_reader :query
4
6
  #Uses query as Searchstring
5
7
  #
6
- # search = Ofdb::Search.new("Das Leben des Brains")
8
+ # search = Ofdb::Search.new("The Matrix")
7
9
  #
8
10
  # Ofdb::Search ist lazy loading.
9
11
  def initialize(query, is_imdb_id=false)
@@ -11,23 +13,23 @@ module Ofdb
11
13
  @query = query
12
14
  end
13
15
 
14
- # Returns the Searchresults as Array of Hashes with
15
- #* :link => Url in Ofdb.de of that movie
16
- #* :title => String like: $Germantitle / $OrignialTitle ($Year)
17
- #* :poster => Url of the Poster, nil if not found
16
+ # Returns the Result of the Search as an Array of Ofdb::Movie
18
17
  def movies
19
18
  @movies ||= parse_movies
20
19
  end
21
20
 
22
21
  private
22
+ # Returns the Hpricot::Document of the Website
23
23
  def document
24
24
  @document ||= Hpricot(Ofdb::Search.query(@query, @is_imdb))
25
25
  end
26
26
 
27
+ # Does the query an the ofdb.de an returns the results html
27
28
  def self.query(query, imdb=false)
28
29
  open("http://www.ofdb.de/view.php?page=suchergebnis&SText=#{CGI::escape(query)}#{"&Kat=IMDb" if imdb}")
29
30
  end
30
31
 
32
+ # extracts all the results
31
33
  def parse_movies
32
34
  return @movies if @movies
33
35
  @movies = Array.new
@@ -36,7 +38,9 @@ module Ofdb
36
38
  title = element.innerHTML.imdb_strip_tags
37
39
  poster = /images\/film\/.*"\sw/.match(element.get_attribute('onmouseover')).to_s.gsub("\" w","").gsub("images/film/", "")
38
40
  poster = nil if poster =="na.gif"
39
- @movies << {:link => link, :title => title, :poster=>poster}
41
+ mov = Ofdb::Movie.new(link)
42
+ mov.poster = poster if poster
43
+ @movies << mov
40
44
  end
41
45
  @movies
42
46
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: derobo-ofdb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - deRobo