tv-dot-com 0.3

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.
@@ -0,0 +1,5 @@
1
+ == 1.0.0 / 2007-02-10
2
+
3
+ * 1 major enhancement
4
+ * Birthday!
5
+
@@ -0,0 +1,7 @@
1
+ History.txt
2
+ Manifest.txt
3
+ README.txt
4
+ Rakefile
5
+ bin/tv_dot_com
6
+ lib/tv_dot_com.rb
7
+ test/test_tv_dot_com.rb
@@ -0,0 +1,33 @@
1
+ TvDotCom
2
+ by Doug Alcorn <doug@lathi.net>
3
+ http://tv-dot-com.rubyforge.org/
4
+
5
+ == DESCRIPTION:
6
+
7
+ TV Show and Episode classes scraped from TV.com and Epguide.com useful for fetching meta data on TV Shows.
8
+
9
+ == FEATURES/PROBLEMS:
10
+
11
+ * Show names must be in the format as listed in the url portion of epguides.com
12
+ * Doesn't work well for shows that aren't listed on epguides.com
13
+ * Only as good as the data on epguides.com and tv.com
14
+
15
+ == SYNOPSIS:
16
+
17
+ FIX (code sample of usage)
18
+
19
+ == REQUIREMENTS:
20
+
21
+ * Hpricot
22
+
23
+ == INSTALL:
24
+
25
+ * sudo gem install tv_dot_com
26
+
27
+ == LICENSE:
28
+
29
+ (The Ruby License)
30
+
31
+ Copyright (c) 2007 Doug Alcorn <doug@lathi.net>
32
+
33
+ See LICENSE.txt or COPYING.txt
@@ -0,0 +1,15 @@
1
+ # -*- ruby -*-
2
+
3
+ require 'rubygems'
4
+ require 'hoe'
5
+ require './lib/tv_dot_com.rb'
6
+
7
+ Hoe.new('tv-dot-com', TvDotCom::VERSION) do |p|
8
+ p.rubyforge_name = 'tv-dot-com'
9
+ p.summary = 'TV Show and Episode classes scraped from TV.com and Epguide.com useful for fetching meta data on TV Shows.'
10
+ # p.description = p.paragraphs_of('README.txt', 2..5).join("\n\n")
11
+ # p.url = p.paragraphs_of('README.txt', 0).first.split(/\n/)[1..-1]
12
+ p.changes = p.paragraphs_of('History.txt', 0..1).join("\n\n")
13
+ end
14
+
15
+ # vim: syntax=Ruby
File without changes
@@ -0,0 +1,140 @@
1
+ require 'rubygems'
2
+ require 'hpricot'
3
+ require 'date'
4
+ require 'open-uri'
5
+ require 'breakpoint'
6
+
7
+ module TvDotCom
8
+ VERSION = '0.3'
9
+
10
+ class Show
11
+ attr_reader :url
12
+ attr_reader :request
13
+ attr_reader :raw_guide
14
+
15
+ def initialize(url)
16
+ @request = url
17
+ @doc = Hpricot(open(@url = Show.guides_url(url)))
18
+ end
19
+
20
+ # the name of the show
21
+ def name
22
+ @name ||= @doc.search("//h2[@class='mb-10']").first.inner_html.sub(/ Episode Guide/, '')
23
+ end
24
+
25
+ # loads all the episodes for this show and selects the Episode by
26
+ # the season number, and episode number within that season
27
+ def find_episode_by_season_and_number(season,number)
28
+ seasons[season.to_i - 1].episodes[number.to_i - 1]
29
+ end
30
+
31
+ # returns the unprocessed raw html of the episode guide
32
+ def raw_guide
33
+ @guide ||= Hpricot(open("http://epguides.com/#{@request}/"))/"pre"
34
+ end
35
+
36
+ def self.guides_url(name)
37
+ if name.match(/^http:\/\/(.*?)\.tv\.com/)
38
+ name
39
+ else
40
+ "http://www.tv.com/show/#{find_show_id(name)}/episode_guide.html&printable=1"
41
+ end
42
+ end
43
+
44
+ def self.find_show_id(name)
45
+ search = name.gsub(/([A-Z])/) { |s| '+' + ('%c' % s[0]).downcase }.gsub(/_/, '+').gsub(/'/,'').gsub(/[^+a-z0-9]/,'+').gsub(/\++/,'+')
46
+ begin
47
+ (Hpricot(open("http://www.tv.com/search.php?type=11&stype=program&qs=#{search}&tag=filter;tv_shows"))/"table[@id='search-results'] span[@class='f-18'] a").first.attributes['href'].match(/show\/(\d+)\/summary/)[1] rescue
48
+ raise "Can't find show id for #{name}"
49
+ end
50
+ end
51
+
52
+ def show_id
53
+ @show_id ||= self.class.find_show_id(name)
54
+ end
55
+
56
+ def show_url
57
+ "http://www.tv.com/show/#{show_id}/summary.html"
58
+ end
59
+
60
+ def episode_list_url(season=1)
61
+ "http://www.tv.com/show/#{show_id}/episode_listings.html?season=#{season}&tag=nav_bar;2"
62
+ end
63
+
64
+ def number_of_seasons
65
+ @number_of_seasons ||= (Hpricot(open(episode_list_url))/"div[@id='season-dropdown'] option").size || 2 - 1
66
+ @number_of_seasons = 1 if @number_of_seasons < 1
67
+ @number_of_seasons
68
+ end
69
+
70
+ def seasons
71
+ @seasons ||= (1..number_of_seasons).collect do |i|
72
+ Season.new(self, i)
73
+ end
74
+ end
75
+
76
+ end
77
+
78
+ class Season
79
+ attr_reader :number, :show
80
+
81
+ def initialize(show, newnumber)
82
+ @show = show
83
+ @number = newnumber
84
+ end
85
+
86
+ def episode_list
87
+ @episode_list ||= Hpricot(open(show.episode_list_url(number)))
88
+ end
89
+
90
+ def number_of_episodes
91
+ (episode_list/"div[@class='table-styled'] table tr").size - 1
92
+ end
93
+
94
+ def episodes
95
+ rows = episode_list/"div[@class='table-styled'] table tr"
96
+ rows.shift
97
+ rows.collect { |row| Episode.new(@show, self, row)}
98
+ end
99
+
100
+ end
101
+
102
+ class Episode
103
+ attr_reader :show, :season
104
+
105
+ def initialize(show, season, raw_html)
106
+ @show = show
107
+ @season = season
108
+ @raw_html = raw_html
109
+ end
110
+
111
+ def title
112
+ title_link_elem.inner_html
113
+ end
114
+
115
+ def number
116
+ (@raw_html/"td[@class='first f-bold ta-c']").inner_html.match(/\s*(\S*)\s*/)[1]
117
+ end
118
+
119
+ def production_number
120
+ (@raw_html/"td[@class='f-666 f-11 ta-c']").inner_html.match(/\s*(\S*)\s*/)[1]
121
+ end
122
+
123
+ def season_number
124
+ @season.number
125
+ end
126
+
127
+ def url
128
+ title_link_elem.attributes["href"]
129
+ end
130
+
131
+ def first_aired
132
+ Date.parse((@raw_html/"td[@class='ta-c']:empty").inner_html.match(/\d+\/\d+\/\d+/)[0])
133
+ end
134
+
135
+ def title_link_elem
136
+ (@raw_html/"a[@href*=summary]").first
137
+ end
138
+
139
+ end
140
+ end
File without changes
metadata ADDED
@@ -0,0 +1,60 @@
1
+ --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.9.0
3
+ specification_version: 1
4
+ name: tv-dot-com
5
+ version: !ruby/object:Gem::Version
6
+ version: "0.3"
7
+ date: 2007-04-29 00:00:00 -04:00
8
+ summary: TV Show and Episode classes scraped from TV.com and Epguide.com useful for fetching meta data on TV Shows.
9
+ require_paths:
10
+ - lib
11
+ email: ryand-ruby@zenspider.com
12
+ homepage: http://www.zenspider.com/ZSS/Products/tv-dot-com/
13
+ rubyforge_project: tv-dot-com
14
+ description: The author was too lazy to write a description
15
+ autorequire:
16
+ default_executable:
17
+ bindir: bin
18
+ has_rdoc: true
19
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
20
+ requirements:
21
+ - - ">"
22
+ - !ruby/object:Gem::Version
23
+ version: 0.0.0
24
+ version:
25
+ platform: ruby
26
+ signing_key:
27
+ cert_chain:
28
+ post_install_message:
29
+ authors:
30
+ - Ryan Davis
31
+ files:
32
+ - History.txt
33
+ - Manifest.txt
34
+ - README.txt
35
+ - Rakefile
36
+ - bin/tv_dot_com
37
+ - lib/tv_dot_com.rb
38
+ - test/test_tv_dot_com.rb
39
+ test_files:
40
+ - test/test_tv_dot_com.rb
41
+ rdoc_options: []
42
+
43
+ extra_rdoc_files: []
44
+
45
+ executables:
46
+ - tv_dot_com
47
+ extensions: []
48
+
49
+ requirements: []
50
+
51
+ dependencies:
52
+ - !ruby/object:Gem::Dependency
53
+ name: hoe
54
+ version_requirement:
55
+ version_requirements: !ruby/object:Gem::Version::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: 1.1.7
60
+ version: