ruby-imdb 0.6.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -14,6 +14,7 @@ begin
14
14
  s.add_dependency "json", ">= 1.4.3"
15
15
  s.add_dependency "mongo", ">= 1.0.1"
16
16
  s.add_dependency "mongo_mapper", ">= 0.7.5"
17
+ s.add_dependency "chronic", ">= 0.2.3"
17
18
  end
18
19
  rescue LoadError
19
20
  puts "Jeweler not available. Install it with: gem install jeweler"
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.6.0
1
+ 0.7.0
@@ -4,7 +4,7 @@ require "open-uri"
4
4
  require "nokogiri"
5
5
  require "json"
6
6
  require "mongo_mapper"
7
-
7
+ require "chronic"
8
8
 
9
9
  class Array
10
10
  def to_hash(default=nil)
@@ -8,11 +8,16 @@ module IMDB
8
8
 
9
9
 
10
10
  def initialize(id_of)
11
+ # !!!DON'T FORGET DEFINE NEW METHODS IN SUPER!!!
11
12
  super("Movie", {:imdb_id => String,
12
13
  :poster => String,
13
14
  :title => String,
14
15
  :cast => Array,
15
- :photos => Array}, [:imdb_id])
16
+ :photos => Array,
17
+ :release_date => String,
18
+ :director => String,
19
+ :genres => Array,
20
+ :writers => Array}, [:imdb_id])
16
21
 
17
22
  @imdb_id = id_of
18
23
 
@@ -36,9 +41,9 @@ module IMDB
36
41
  def cast
37
42
  doc.search("table.cast tr").map do |link|
38
43
  picture = link.children[0].search("img")[0]["src"] rescue nil
39
- name = link.children[1].content rescue nil
40
- profile_id = link.children[1].search('a[@href^="/name/nm"]').first["href"].split("nm")[1].gsub(/\//,'') rescue nil
41
- char = link.children[3].content rescue nil
44
+ name = link.children[1].content.strip rescue nil
45
+ profile_id = link.children[1].search('a[@href^="/name/nm"]').first["href"] rescue nil
46
+ char = link.children[3].content.strip rescue nil
42
47
  IMDB::Person.new(@imdb_id, name, char, profile_id, picture) unless name.nil? and char.nil? and picture.nil? and profile_id.nil?
43
48
  end
44
49
  end
@@ -46,21 +51,53 @@ module IMDB
46
51
  # Get movie photos
47
52
  # @return [Array]
48
53
  def photos
49
- begin
50
- doc.search("img").map do |img|
51
- unless img["src"][/_CR/].nil?
52
- img["src"]
53
- end
54
+ doc.search("img").map { |img|
55
+ unless img["src"][/_CR/].nil?
56
+ img["src"]
54
57
  end
58
+ }.compact
59
+ rescue
60
+ nil
61
+
62
+ end
63
+
64
+ # Get release date
65
+ # @return [String]
66
+ def release_date
67
+ Date.parse(Chronic.parse(doc.xpath("//h5[contains(., 'Release Date')]/..").first.content[/^\d{1,2} \w+ \d{4}/]).strftime('%Y/%m/%d'))
68
+ rescue nil
69
+ end
70
+
71
+ # Get Director
72
+ # @return [String]
73
+ def director
74
+ doc.xpath("//h5[contains(., 'Director')]/..").at("a").content rescue nil
75
+ end
76
+
77
+ # Genre List
78
+ # @return [Array]
79
+ def genres
80
+ doc.xpath("//h5[contains(., 'Genre')]/..").search("a").map { |g|
81
+ g.content unless g.content =~ /See more/
82
+ }.compact
55
83
  rescue
56
84
  nil
57
- end
85
+ end
86
+
87
+ # Writer List
88
+ # @return [Array]
89
+ def writers
90
+ doc.xpath("//a[@name='writers']/../../../..").search('a[@href^="/name/nm"]').map {|w|
91
+ name = w.content
92
+ profile = w['href']
93
+ IMDB::Person.new(@imdb_id, name, nil, profile, nil)
94
+ }
58
95
  end
59
96
 
60
97
  private
61
98
 
62
99
  def doc
63
- if caller[0] =~ /`([^']*)'/ and $1 == "cast"
100
+ if caller[0] =~ /`([^']*)'/ and ($1 == "cast" or $1 == "writers")
64
101
  @doc = Nokogiri::HTML(open("#{@link}/fullcredits"))
65
102
  else
66
103
  @doc = Nokogiri::HTML(open("#{@link}"))
@@ -33,10 +33,6 @@ module IMDB
33
33
  @picture
34
34
  end
35
35
 
36
- def profile
37
- @profile
38
- end
39
-
40
36
  def to_s
41
37
  "Name: #{@name} \n Char: #{@char} \n"
42
38
  end
@@ -3,10 +3,6 @@ module IMDB
3
3
  class Skeleton
4
4
  attr_accessor :model, :method_names
5
5
 
6
- class << self
7
-
8
- end
9
-
10
6
  def initialize(model_name = "", method_names = {}, keys = [])
11
7
  if IMDB::Configuration.caching
12
8
  @model = Class.new do
@@ -23,6 +19,7 @@ module IMDB
23
19
  alias_method old_meth, meth.to_sym
24
20
  define_method meth do
25
21
  k = keys.to_hash { |k| k; self.send(k) }
22
+
26
23
  @db_query = self.model.first(k)
27
24
 
28
25
  if @db_query.nil?
@@ -39,7 +36,7 @@ module IMDB
39
36
  |c|
40
37
  c.to_hash
41
38
  }
42
- @db_query[meth] = a
39
+ @db_query[meth] = a
43
40
  else
44
41
  @db_query[meth] = a
45
42
  end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{ruby-imdb}
8
- s.version = "0.6.0"
8
+ s.version = "0.7.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Yalcin Acikyildiz"]
12
- s.date = %q{2010-05-21}
12
+ s.date = %q{2010-05-24}
13
13
  s.description = %q{Ruby IMDB Parsing Library}
14
14
  s.email = %q{yalcin@webliyacelebi.com}
15
15
  s.extra_rdoc_files = [
@@ -62,17 +62,20 @@ Gem::Specification.new do |s|
62
62
  s.add_runtime_dependency(%q<json>, [">= 1.4.3"])
63
63
  s.add_runtime_dependency(%q<mongo>, [">= 1.0.1"])
64
64
  s.add_runtime_dependency(%q<mongo_mapper>, [">= 0.7.5"])
65
+ s.add_runtime_dependency(%q<chronic>, [">= 0.2.3"])
65
66
  else
66
67
  s.add_dependency(%q<nokogiri>, [">= 1.4.1"])
67
68
  s.add_dependency(%q<json>, [">= 1.4.3"])
68
69
  s.add_dependency(%q<mongo>, [">= 1.0.1"])
69
70
  s.add_dependency(%q<mongo_mapper>, [">= 0.7.5"])
71
+ s.add_dependency(%q<chronic>, [">= 0.2.3"])
70
72
  end
71
73
  else
72
74
  s.add_dependency(%q<nokogiri>, [">= 1.4.1"])
73
75
  s.add_dependency(%q<json>, [">= 1.4.3"])
74
76
  s.add_dependency(%q<mongo>, [">= 1.0.1"])
75
77
  s.add_dependency(%q<mongo_mapper>, [">= 0.7.5"])
78
+ s.add_dependency(%q<chronic>, [">= 0.2.3"])
76
79
  end
77
80
  end
78
81
 
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 6
7
+ - 7
8
8
  - 0
9
- version: 0.6.0
9
+ version: 0.7.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Yalcin Acikyildiz
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-05-21 00:00:00 -04:00
17
+ date: 2010-05-24 00:00:00 -04:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -73,6 +73,20 @@ dependencies:
73
73
  version: 0.7.5
74
74
  type: :runtime
75
75
  version_requirements: *id004
76
+ - !ruby/object:Gem::Dependency
77
+ name: chronic
78
+ prerelease: false
79
+ requirement: &id005 !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ segments:
84
+ - 0
85
+ - 2
86
+ - 3
87
+ version: 0.2.3
88
+ type: :runtime
89
+ version_requirements: *id005
76
90
  description: Ruby IMDB Parsing Library
77
91
  email: yalcin@webliyacelebi.com
78
92
  executables: []