ruby-imdb 0.6.0 → 0.7.0

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.
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: []