the_tv_db 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/.travis.yml ADDED
@@ -0,0 +1,6 @@
1
+ language: ruby
2
+ only:
3
+ - master
4
+ rvm:
5
+ - 1.9.2
6
+ - 1.9.3
data/Gemfile CHANGED
@@ -2,3 +2,7 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Gem dependencies are specified in the_tv_db.gemspec
4
4
  gemspec
5
+
6
+ group :test do
7
+ gem "rake", "~> 0.9.2.2"
8
+ end
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # TheTvDB
1
+ # TheTvDB [![Build Status](https://travis-ci.org/jassa/the_tv_db.png)](https://travis-ci.org/jassa/the_tv_db)
2
2
 
3
3
  Ruby API Client for TheTvDB.com
4
4
 
data/Rakefile CHANGED
@@ -1 +1,8 @@
1
1
  require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new do |r|
5
+ r.verbose = false
6
+ end
7
+
8
+ task :default => :spec
@@ -1,6 +1,8 @@
1
1
  require "faraday"
2
2
  require "the_tv_db/response"
3
+ require "the_tv_db/response/unzip"
3
4
  require "the_tv_db/response/xmlize"
5
+ require "the_tv_db/response/raise_error"
4
6
 
5
7
  module TheTvDB
6
8
  module Connection
@@ -11,8 +13,10 @@ module TheTvDB
11
13
  def connection
12
14
  @connection ||= Faraday.new(:url => TheTvDB::ENDPOINT) do |faraday|
13
15
  faraday.response :logger if ENV['DEBUG'] # log requests to STDOUT
14
- faraday.adapter :typhoeus # make requests with Typhoeus
16
+ faraday.adapter :net_http # make requests with NetHTTP
15
17
  faraday.use TheTvDB::Response::Xmlize
18
+ faraday.use TheTvDB::Response::Unzip
19
+ faraday.use TheTvDB::Response::RaiseError
16
20
  end
17
21
  end
18
22
 
@@ -0,0 +1,10 @@
1
+ module TheTvDB
2
+ class Response::RaiseError < Faraday::Response::Middleware
3
+
4
+ def on_complete(env)
5
+ status_code = env[:status].to_i
6
+ raise TheTvDB::RecordNotFound.new(env) if (400...600).include? status_code
7
+ end
8
+
9
+ end # Response::RaiseError
10
+ end # TheTvDB
@@ -0,0 +1,33 @@
1
+ module TheTvDB
2
+ class Response::Unzip < Response
3
+ dependency 'zip/zip'
4
+
5
+ define_parser do |body|
6
+ ::Zip::ZipFile.new body
7
+ end
8
+
9
+ def parse(body)
10
+ case body
11
+ when String
12
+ zip = Tempfile.new('unzip_me')
13
+ begin
14
+ zip.write(body)
15
+ unzipped = self.class.parser.call(zip)
16
+ files = {}
17
+ unzipped.each do |file|
18
+ files[file.name] = file.get_input_stream.read
19
+ end
20
+ ensure
21
+ zip.close
22
+ zip.unlink
23
+ end
24
+ files
25
+ else
26
+ body
27
+ end
28
+ rescue
29
+ body
30
+ end
31
+
32
+ end # Response::Unzip
33
+ end # TheTvDB
@@ -1,12 +1,10 @@
1
- require "multi_xml"
2
-
3
1
  module TheTvDB
4
2
  class Response::Xmlize < Response
5
3
  dependency 'multi_xml'
6
4
 
7
5
  define_parser do |body|
8
- MultiXml.parser = :ox
9
- MultiXml.parse body
6
+ ::MultiXml.parser = :ox
7
+ ::MultiXml.parse body
10
8
  end
11
9
 
12
10
  def parse(body)
@@ -17,6 +15,8 @@ module TheTvDB
17
15
  true
18
16
  when 'false'
19
17
  false
18
+ when Hash
19
+ body.each { |k, v| body[k] = self.class.parser.call(v) }
20
20
  else
21
21
  self.class.parser.call body
22
22
  end
@@ -7,7 +7,7 @@ module TheTvDB
7
7
  class << self
8
8
  attr_accessor :parser
9
9
  end
10
-
10
+
11
11
  def self.define_parser(&block)
12
12
  @parser = block
13
13
  end
@@ -19,6 +19,6 @@ module TheTvDB
19
19
  def parse_response?(env)
20
20
  env[:body].respond_to? :to_str
21
21
  end
22
-
22
+
23
23
  end # Response
24
24
  end # TheTvDB
@@ -19,13 +19,21 @@ module TheTvDB
19
19
  end
20
20
  end
21
21
 
22
- def find(id)
23
- data = request("/data/series/#{id}/all/")["Data"]
24
- record = new(data["Series"])
25
- record.episodes = data["Episode"]
22
+ def find(id, lang="en")
23
+ if TheTvDB.api_key
24
+ files = request("#{TheTvDB.api_key}/series/#{id}/all/#{lang}.zip")
25
+ data = files["#{lang}.xml"].fetch("Data")
26
+ record = new(data["Series"])
27
+ record.episodes = data["Episode"]
28
+ record.banners = files["banners.xml"]["Banners"]["Banner"]
29
+ record.actors = files["actors.xml"]["Actors"]["Actor"]
30
+ else
31
+ data = request("/data/series/#{id}/all/").fetch("Data")
32
+ record = new(data["Series"])
33
+ record.episodes = data["Episode"]
34
+ end
35
+
26
36
  return record
27
- rescue MultiXml::ParseError
28
- raise RecordNotFound, "Couldn't find series with ID=#{id}"
29
37
  end
30
38
  alias :get :find
31
39
  end
@@ -58,7 +66,7 @@ module TheTvDB
58
66
  :zap2it_id => "zap2it_id"
59
67
  }.freeze
60
68
 
61
- attr_accessor *ATTRS_MAP.keys, :episodes
69
+ attr_accessor *ATTRS_MAP.keys, :episodes, :banners, :actors
62
70
 
63
71
  def episodes=(episodes)
64
72
  @episodes = case episodes
@@ -1,3 +1,3 @@
1
1
  module TheTvDb
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -0,0 +1,73 @@
1
+ <?xml version="1.0" encoding="UTF-8" ?>
2
+ <Actors>
3
+ <Actor>
4
+ <id>77049</id>
5
+ <Image>actors/77049.jpg</Image>
6
+ <Name>Anna Torv</Name>
7
+ <Role>Olivia Dunham</Role>
8
+ <SortOrder>0</SortOrder>
9
+ </Actor>
10
+ <Actor>
11
+ <id>77045</id>
12
+ <Image>actors/77045.jpg</Image>
13
+ <Name>Joshua Jackson</Name>
14
+ <Role>Peter Bishop</Role>
15
+ <SortOrder>0</SortOrder>
16
+ </Actor>
17
+ <Actor>
18
+ <id>77047</id>
19
+ <Image>actors/77047.jpg</Image>
20
+ <Name>John Noble</Name>
21
+ <Role>Dr. Walter Bishop</Role>
22
+ <SortOrder>1</SortOrder>
23
+ </Actor>
24
+ <Actor>
25
+ <id>77046</id>
26
+ <Image>actors/77046.jpg</Image>
27
+ <Name>Jasika Nicole</Name>
28
+ <Role>Astrid</Role>
29
+ <SortOrder>1</SortOrder>
30
+ </Actor>
31
+ <Actor>
32
+ <id>77044</id>
33
+ <Image>actors/77044.jpg</Image>
34
+ <Name>Blair Brown</Name>
35
+ <Role>Nina Sharp</Role>
36
+ <SortOrder>1</SortOrder>
37
+ </Actor>
38
+ <Actor>
39
+ <id>77050</id>
40
+ <Image>actors/77050.jpg</Image>
41
+ <Name>Mark Valley</Name>
42
+ <Role>John Scott</Role>
43
+ <SortOrder>2</SortOrder>
44
+ </Actor>
45
+ <Actor>
46
+ <id>77042</id>
47
+ <Image>actors/77042.jpg</Image>
48
+ <Name>Kirk Acevedo</Name>
49
+ <Role>Charlie Francis</Role>
50
+ <SortOrder>2</SortOrder>
51
+ </Actor>
52
+ <Actor>
53
+ <id>284298</id>
54
+ <Image>actors/284298.jpg</Image>
55
+ <Name>Seth Gabel</Name>
56
+ <Role>Lincoln Lee</Role>
57
+ <SortOrder>2</SortOrder>
58
+ </Actor>
59
+ <Actor>
60
+ <id>77048</id>
61
+ <Image>actors/77048.jpg</Image>
62
+ <Name>Lance Reddick</Name>
63
+ <Role>Phillip Broyles</Role>
64
+ <SortOrder>3</SortOrder>
65
+ </Actor>
66
+ <Actor>
67
+ <id>303768</id>
68
+ <Image>actors/303768.jpg</Image>
69
+ <Name>Georgina Haig</Name>
70
+ <Role>Etta</Role>
71
+ <SortOrder>3</SortOrder>
72
+ </Actor>
73
+ </Actors>