philk-tvdbparty 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. data/lib/tvdbmapper.rb +62 -0
  2. data/lib/tvdbparty.rb +89 -0
  3. metadata +71 -0
@@ -0,0 +1,62 @@
1
+ =begin rdoc
2
+ This is just HappyMapper classes for the various XML files that come out of the zip file from TheTVDB. I didn't map everything, just the ones that seemed important.
3
+ =end
4
+ require "rubygems"
5
+ require "zip/zip"
6
+ require "happymapper"
7
+
8
+ module TVDBMapper
9
+ class Series
10
+ include HappyMapper
11
+ tag 'Series'
12
+
13
+ element :id, String, :tag => "id"
14
+ element :actors, String, :tag => "Actors"
15
+ element :overview, String, :tag => "Overview"
16
+ element :seriesid, String, :tag => "SeriesID"
17
+ element :seriesname, String, :tag => "SeriesName"
18
+ element :genre, String, :tag => "Genre"
19
+ element :imdb, String, :tag => "IMDB_ID"
20
+ element :language, String, :tag => "Language"
21
+ element :network, String, :tag => "Network"
22
+ element :rating, String, :tag => "Rating"
23
+ element :zap2it, String, :tag => "zap2it_id"
24
+ end
25
+ class Episodes
26
+ include HappyMapper
27
+ tag 'Episode'
28
+
29
+ element :id, String, :tag => "id"
30
+ element :name, String, :tag => "EpisodeName"
31
+ element :director, String, :tag => "Director"
32
+ element :number, String, :tag => "EpisodeNumber"
33
+ element :name, String, :tag => "value"
34
+ element :overview, String, :tag => "Overview"
35
+ element :season, String, :tag => "SeasonNumber"
36
+ element :writer, String, :tag => "Writer"
37
+ element :banner, String, :tag => "filename"
38
+ element :airdate, String, :tag => "FirstAired"
39
+ end
40
+ class Banners
41
+ include HappyMapper
42
+ tag 'Banner'
43
+
44
+ element :id, String, :tag => "id"
45
+ element :path, String, :tag => "BannerPath"
46
+ element :type, String, :tag => "BannerType"
47
+ element :type2, String, :tag => "BannerType2"
48
+ element :language, String, :tag => "Language"
49
+ element :thumb, String, :tag => "ThumbnailPath"
50
+ element :vignette, String, :tag => "VignettePath"
51
+ end
52
+ class Actors
53
+ include HappyMapper
54
+ tag 'Actor'
55
+
56
+ element :id, String, :tag => "id"
57
+ element :image, String, :tag => "Image"
58
+ element :name, String, :tag => "Name"
59
+ element :role, String, :tag => "Role"
60
+ element :sortorder, String, :tag => "SortOrder"
61
+ end
62
+ end
@@ -0,0 +1,89 @@
1
+ =begin rdoc
2
+ Author: Phil Kates (mailto:me@philkates.com)
3
+ =end
4
+ require "rubygems"
5
+ require "httparty"
6
+ require "cgi"
7
+ require "uri"
8
+ require "net/http"
9
+ require "tvdbmapper"
10
+
11
+ =begin rdoc
12
+ Create a TVShow.new like this.
13
+ tvshow = TVShow.new(:series_name => "The Wire")
14
+ OR
15
+ tvshow = TVShow.new(:series_id => "79126")
16
+ =end
17
+ class TVShow
18
+ include HTTParty
19
+ format :xml
20
+ attr_accessor :mirror, :series_name, :series_id, :series, :actors, :episodes, :banners
21
+ def initialize(params)
22
+ @api_key = "BC7240CD299E99B5"
23
+ @series_name = params[:series_name]
24
+ @series_id = params[:series_id]
25
+ result = self.class.get("http://www.thetvdb.com/api/#{@api_key}/mirrors.xml")
26
+ @mirror = result["Mirrors"]["Mirror"]["mirrorpath"]
27
+ self.class.base_uri @mirror
28
+ end
29
+ def get_series_by_name # TODO : Find series by name?
30
+ res = self.class.get("/api/GetSeries.php?seriesname=" + CGI::escape(@series_name.to_s))
31
+ if res["Data"].to_s =~ /.*connection to localhost.*/
32
+ raise "TVDB API Down"
33
+ else
34
+ res = res["Data"]["Series"]
35
+ end
36
+ if res.is_a?(Hash)
37
+ @series_id = res["seriesid"]
38
+ return [res]
39
+ elsif res.is_a?(Array)
40
+ return res
41
+ else
42
+ raise "Unexpected Data Type Returned #{res.class}"
43
+ end
44
+ end
45
+ def get_series_as_zip(path)
46
+ check_series_id
47
+ if path.is_a? String
48
+ path = Pathname.new(path)
49
+ end
50
+ res = Net::HTTP.get URI.parse("http://zip.thetvdb.com/data/zip/en/#{@series_id}.zip")
51
+ file = File.open(path + "testing.zip", 'w')
52
+ file.write(res)
53
+ file.close
54
+
55
+ zipfile = Zip::ZipFile.open(path + "testing.zip")
56
+ zipfile.extract("en.xml", path + "en.xml")
57
+ zipfile.extract("actors.xml", path + "actors.xml")
58
+ zipfile.extract("banners.xml", path + "banners.xml")
59
+ zipfile.close
60
+
61
+ @series_xml = File.open(path + "en.xml", 'r').readlines.to_s
62
+ @actor_xml = File.open(path + "actors.xml", 'r').readlines.to_s
63
+ @banner_xml = File.open(path + "banners.xml", 'r').readlines.to_s
64
+
65
+ @series = TVDBMapper::Series.parse(@series_xml).first
66
+ @episodes = TVDBMapper::Episodes.parse(@series_xml)
67
+ @actors = TVDBMapper::Actors.parse(@actor_xml)
68
+ @banners = TVDBMapper::Banners.parse(@banner_xml)
69
+
70
+ FileUtils.rm(path + "en.xml")
71
+ FileUtils.rm(path + "actors.xml")
72
+ FileUtils.rm(path + "banners.xml")
73
+ FileUtils.rm(path + "testing.zip")
74
+ end
75
+ def find_by_episode(season, episode_number)
76
+ season = season.to_s
77
+ episode_number = episode_number.to_s
78
+ @episodes.select { |e| e.number == episode_number && e.season == season }.first
79
+ end
80
+ def get_episode_banner(image_path)
81
+ Net::HTTP.get URI.parse("http://images.thetvdb.com/banners/#{image_path}")
82
+ end
83
+ private
84
+ def check_series_id
85
+ if @series_id == nil
86
+ raise "series_id must not be nil"
87
+ end
88
+ end
89
+ end
metadata ADDED
@@ -0,0 +1,71 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: philk-tvdbparty
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Phil Kates
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-12-11 00:00:00 -08:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: httparty
17
+ version_requirement:
18
+ version_requirements: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 0.2.2
23
+ version:
24
+ - !ruby/object:Gem::Dependency
25
+ name: happymapper
26
+ version_requirement:
27
+ version_requirements: !ruby/object:Gem::Requirement
28
+ requirements:
29
+ - - ">="
30
+ - !ruby/object:Gem::Version
31
+ version: "0"
32
+ version:
33
+ description: TODO
34
+ email: me@philkates.com
35
+ executables: []
36
+
37
+ extensions: []
38
+
39
+ extra_rdoc_files: []
40
+
41
+ files:
42
+ - lib/tvdbmapper.rb
43
+ - lib/tvdbparty.rb
44
+ has_rdoc: true
45
+ homepage: http://github.com/philk/tvdbparty
46
+ post_install_message:
47
+ rdoc_options: []
48
+
49
+ require_paths:
50
+ - lib
51
+ required_ruby_version: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: "0"
56
+ version:
57
+ required_rubygems_version: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: "0"
62
+ version:
63
+ requirements: []
64
+
65
+ rubyforge_project:
66
+ rubygems_version: 1.2.0
67
+ signing_key:
68
+ specification_version: 2
69
+ summary: TODO
70
+ test_files: []
71
+