rtv 0.1.5 → 0.1.6

Sign up to get free protection for your applications and to get access to all the features.
data/README CHANGED
@@ -19,9 +19,12 @@ CONFIGURATION
19
19
 
20
20
  Folgende Optionen können in einer YAML Konfigurationsdatei $HOME/.rtv eingestellt werden:
21
21
 
22
- charset Ausgabe Charset, default UTF-8
23
- senderfilter Sender und -reihenfolge der anzuzeigenden Sender
24
- senderressource Sendergruppierung aus der Liste in doc/senderliste.txt
22
+ charset:string Ausgabe Charset, Voreinstellung UTF-8
23
+ senderfilter:string Sender und -reihenfolge der anzuzeigenden Sender
24
+ senderressource:string Sendergruppierung aus der Liste in doc/senderliste.txt
25
+ redundanz:true|false Zeigt überflüssige Daten an (true), Voreinstellung false
26
+ eine_pro_sender:true|false Zeigt eine Sendung pro Sender (true)
27
+ senderlimit:number maximale Ergebnismenge an Sendungen
25
28
 
26
29
  Eine Beispieldatei kann als Basis verwendet werden:
27
30
 
@@ -38,19 +41,21 @@ USAGE
38
41
  DATE Datum im Format DD.MM
39
42
  CHANNEL Sender aus der Liste in doc/senderliste.txt
40
43
  PATTERN Suchbegriff (darf kein Sendername sein, siehe b))
44
+ KEY:VALUE Schlüssel und Wert für Konfigurationsoptionen
41
45
  DESCRIPTION Beschreibung, feste Zeichenkette "-d"
42
46
  HELP Hilfe, feste Zeichenkette "help" (gibt diese Seite aus)
43
47
 
44
48
 
45
49
  EXAMPLES
46
50
 
47
- tv Aktuelle Sendungen für ausgewählte Sender
48
- tv 20 Heute 20 Uhr alle Sendungen für ausgewählte Sender
49
- tv 24.12. Alle Sendungen an Heilig Abend für ausgewählte Sender
50
- tv pro7 sat1 Aktuelle Sendungen von nur Pro7 und Sat.1
51
- tv simpsons Alle Sendungen über Die Simpsons für alle Sender
52
- tv -d Aktuelle Sendungen für ausgewählte Sender mit Beschreibung
53
- tv help Gibt diese Seite aus
51
+ tv Aktuelle Sendungen für ausgewählte Sender
52
+ tv 20 Heute 20 Uhr alle Sendungen für ausgewählte Sender
53
+ tv 24.12. Alle Sendungen an Heilig Abend für ausgewählte Sender
54
+ tv pro7 sat1 Aktuelle Sendungen von nur Pro7 und Sat.1
55
+ tv simpsons Alle Sendungen über Die Simpsons für alle Sender
56
+ tv redundanz:true Zeigt alle Infos an. (Nützlich für grep)
57
+ tv -d Aktuelle Sendungen für ausgewählte Sender mit Beschreibung
58
+ tv help Gibt diese Seite aus
54
59
 
55
60
  Beliebige sinnvolle Kombinationen in beliebiger Reihenfolge sind möglich:
56
61
  tv pro7 -d 20 11.07. sat1 - Alle Sendungen auf Pro7 und Sat.1 um 20 Uhr am 11.07. mit Beschreibung
@@ -0,0 +1,12 @@
1
+ ---
2
+ :senderfilter:
3
+ - pro7
4
+ - arte
5
+ - 3sat
6
+ - rtl2
7
+ - sat1
8
+ - vox
9
+ - rtl
10
+ - k1
11
+ :senderressource: sendergruppeId:1,3
12
+ :charset: UTF-8
data/lib/#rtv.rb# ADDED
@@ -0,0 +1,269 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rubygems'
4
+ require 'hpricot'
5
+ require 'open-uri'
6
+ require 'cgi'
7
+ require 'iconv'
8
+ require 'time'
9
+ require 'base64'
10
+
11
+ $KCODE = 'u'
12
+
13
+ Channel = %w{ard zdf rtl sat1 pro7 k1 rtl2 super vox arte tele5 3sat dvier br hr mdr n3 rbb swr wdr bralp tvb h1 orf1 orf2 atv sf1 sf2 prs dwtv extra fes mux ztk zdoku zinfo dsf euro mtv viva nick kika qvc tw1 teno cc bbc cnn euron n24 ntv blm dmax nl1 nl2 nl3 pspo1 dir1 gold heima aplan butv disco junio mgm plane scifi 13th hit24 disge foge blum blume arena axn kinow sat1c silve histo nasn toon pr1 pr2 pr3 pr4 disne prfc prff prn prser krimi}
14
+
15
+ module RTV
16
+ class Program
17
+ attr_reader :channel
18
+
19
+ def initialize
20
+ @channel = {}
21
+ end
22
+ def << show
23
+ @channel[show.channel] ||= []
24
+ @channel[show.channel] << show
25
+ end
26
+ end
27
+ class Show
28
+ attr_accessor :channel, :name, :time, :date, :desc, :showview, :options
29
+
30
+ Filler = "\t"
31
+
32
+ def to_s *lastshow
33
+ if @options[:redundanz]
34
+ self.to_a.compact.join(Filler)
35
+ else
36
+ lastshow = if lastshow.first.nil?
37
+ [()] * to_a.size
38
+ else
39
+ lastshow.first
40
+ end
41
+ self.to_a.zip(lastshow.to_a).map{|x,y| (x == y) ? (' ' * x.to_s.size) : x}.reject{|x| x.empty?}.join(Filler)
42
+ end
43
+ end
44
+
45
+ def to_a
46
+ tmp = [@channel, @date, @time, @name]
47
+ tmp << @desc if @options[:desc]
48
+ tmp
49
+ end
50
+ end
51
+ class Fetcher
52
+ attr_accessor :options, :config
53
+
54
+ def initialize
55
+ @options = {}
56
+ @shows = Program.new
57
+ end
58
+
59
+ def fetch
60
+ while search_results?(doc = get_hdoc)
61
+ extract_shows doc
62
+ @options[:offset] += 1
63
+ print "." if $DEBUG
64
+ end
65
+ puts if $DEBUG
66
+ return @shows
67
+ end
68
+
69
+ def extract_shows doc
70
+ if @options[:format] == 'search'
71
+ daten = (doc/"div[@id='titel-uebersicht']")
72
+ daten.each do |datum|
73
+ zeiten = datum.parent.parent.parent.next_sibling
74
+ unless zeiten.nil?
75
+ zeiten = zeiten.search("span.tv-sendung-uhrzeit")
76
+ else
77
+ puts "Keine Suchergebnisse!" if $DEBUG
78
+ exit
79
+ end
80
+ zeiten.each do |zeit|
81
+ show = Show.new
82
+ show.options = @config
83
+ show.time = zeit.innerText
84
+ show.desc, show.showview = time_to_desc_and_showview(zeit)
85
+ show.name = time_to_name(zeit)
86
+ show.channel = time_to_channel(zeit)
87
+ show.date = datum.innerText[/^\D*(.+) Suchergebnis/, 1]
88
+ add_show show
89
+ end
90
+ end
91
+ else
92
+ zeiten = (doc/"span.tv-sendung-uhrzeit")
93
+ zeiten.each do |zeit|
94
+ show = Show.new
95
+ show.options = @config
96
+ show.time = zeit.innerText
97
+ show.desc, show.showview = time_to_desc_and_showview(zeit)
98
+ show.name = time_to_name(zeit)
99
+ show.channel = time_to_channel(zeit)
100
+ add_show show
101
+ end
102
+ end
103
+ end
104
+
105
+ private
106
+ def add_show show
107
+ @shows << show
108
+ end
109
+
110
+ def get_hdoc
111
+ begin
112
+ uri = convert_to_url("http://www.klack.de/") + '?' + hsh_to_rqst(@options)
113
+ puts "URL: #{uri}" if $DEBUG
114
+ doc = Hpricot(open(uri))
115
+ rescue
116
+ puts "No Network Connection!"
117
+ exit
118
+ end
119
+ nur ein test ae öpseraf
120
+ end
121
+
122
+ def search_results? doc
123
+ (doc/"td.noresult").empty?
124
+ end
125
+
126
+ def hsh_to_rqst hsh
127
+ hsh.to_a.map{|x| x.map{|y| CGI.escape(y.to_s)}.join('=')}.join('&')
128
+ end
129
+
130
+ def time_to_name zeit
131
+ zeit.parent.next_sibling.next_sibling.at("a.tv-sendung-titel").innerText
132
+ end
133
+
134
+ def time_to_channel zeit
135
+ zeit.parent.parent.at("span.tv-sendung-info/a").attributes["href"][/channelId=([^&]+)/, 1].downcase
136
+ end
137
+
138
+ def time_to_desc_and_showview zeit
139
+ desc_showv = zeit.parent.parent.at("span.tv-sendung-info").innerText.strip.gsub(/[\t\r\n]+/, "\t")
140
+ desc = desc_showv.sub(/^\([^()]+\)\s+/, '').sub(/\s+Showview [0-9-]+/, '')
141
+ showview = desc_showv[/\s+Showview ([0-9-]+)/, 1]
142
+ [desc, showview]
143
+ end
144
+
145
+ def convert_to_url str
146
+ # entferne alle störenden Buchstaben und erstelle die URL
147
+ url = Base64.decode64("aHR0cDovL3d3dy50dnRvZGF5LmRlL3Byb2dyYW0yMDA3")
148
+ end
149
+ end
150
+
151
+ class Presenter
152
+ Source_charset = 'ISO-8859-1'
153
+
154
+ attr_accessor :config
155
+
156
+ def initialize charset = 'UTF-8'
157
+ @target_charset = charset
158
+ end
159
+
160
+ def show program
161
+ senderlimit = @config[:senderlimit]
162
+ @config[:senderfilter].each do |channel|
163
+ lastshow = nil
164
+ tmp = program.channel[channel]
165
+
166
+ unless tmp.nil?
167
+ tmp.each do |show|
168
+ return if (@config[:senderlimit] -= 1) < 1
169
+
170
+ puts Iconv.iconv(@target_charset, Source_charset, show.to_s(lastshow))
171
+
172
+ break if @config[:eine_pro_sender]
173
+ lastshow = show
174
+ end
175
+ end
176
+ end
177
+ end
178
+ end
179
+
180
+ class Switcher
181
+ attr_accessor :config
182
+
183
+ Usage = 'RTV - a command line ruby tv guide
184
+
185
+ USAGE
186
+
187
+ tv [ELEMENT] ...
188
+
189
+ ELEMENT kann folgende Werte enthalten:
190
+
191
+ a) TIME als Sendezeit im Format HH oder HH:MM (maximal eine TIME sinnvoll)
192
+ b) DATE als Datum im Format DD.MM
193
+ b) CHANNEL als Sender aus der Liste in doc/senderliste.txt
194
+ c) PATTERN als Suchbegriff (darf kein Sendername sein, siehe b))
195
+ d) DESCRIPTION als Beschreibung, feste Zeichenkette "-d"
196
+ e) HELP als Hilfe, feste Zeichenkette "help" (gibt diese Seite aus)
197
+
198
+
199
+ EXAMPLES
200
+
201
+ tv - Aktuelle Sendungen für ausgewählte Sender
202
+ tv 20 - Heute 20 Uhr alle Sendungen für ausgewählte Sender
203
+ tv 24.12. - Alle Sendungen an Heilig Abend für ausgewählte Sender
204
+ tv pro7 sat1 - Aktuelle Sendungen von nur Pro7 und Sat.1
205
+ tv simpsons - Alle Sendungen über Die Simpsons für alle Sender
206
+ tv -d - Aktuelle Sendungen für ausgewählte Sender mit Beschreibung
207
+
208
+ Beliebige sinnvolle Kombinationen in beliebiger Reihenfolge sind möglich:
209
+ tv pro7 -d 20 11.07. sat1 - Alle Sendungen auf Pro7 und Sat.1 um 20 Uhr am 11.07. mit Beschreibung'
210
+
211
+ def initialize
212
+ @uri_options = {}
213
+ end
214
+
215
+ def uri_options args
216
+ set_defaults
217
+
218
+ tmp_channel = @config[:senderfilter]
219
+ @config[:senderfilter] = []
220
+
221
+ args.each do |arg|
222
+ case arg.downcase
223
+
224
+ # Konfigurationenmodus
225
+ when /(\w+):(\w+)/
226
+ @config.update YAML.load("--- :" + $1 + ": " + $2)
227
+
228
+ # Hilfemodus
229
+ when "help"
230
+ puts Usage
231
+ exit
232
+
233
+ # Beschreibungmodus
234
+ when "-d"
235
+ @config[:desc] = true
236
+
237
+ # Datummodus
238
+ when /^\d{1,2}\.\d{1,2}\.$/
239
+ @uri_options[:date] = arg + Time.now.year.to_s
240
+
241
+ # Stundenmodus
242
+ when /^\d{1,2}(?:\d{2})?$/
243
+ @uri_options[:time] = arg
244
+
245
+ # Channelname oder -alias
246
+ when *Channel
247
+ @config[:senderfilter] << arg.downcase
248
+
249
+ # Suchmodus
250
+ else
251
+ @uri_options.update({:search => arg, :format => 'search', :time => 'all', :date => 'all', :slotIndex => 'all'})
252
+ @config[:senderfilter] = Channel
253
+ end
254
+ end
255
+
256
+ # when channels are specified, use them only
257
+ @config[:senderfilter] = tmp_channel if @config[:senderfilter].empty?
258
+
259
+ @uri_options
260
+ end
261
+
262
+ private
263
+ def set_defaults
264
+ # Haupt- und Regionalsender
265
+ @uri_options = {:date => 'now', :time => 'now', :format => 'genre', :channel => @config[:senderressource], :order => 'time', :offset => 0}
266
+ end
267
+ end
268
+ end
269
+
data/lib/rtv.rb CHANGED
@@ -108,9 +108,14 @@ module RTV
108
108
  end
109
109
 
110
110
  def get_hdoc
111
- uri = convert_to_url("http://www.klack.de/") + '?' + hsh_to_rqst(@options)
112
- puts "URL: #{uri}" if $DEBUG
113
- doc = Hpricot(open(uri))
111
+ begin
112
+ uri = convert_to_url("http://www.klack.de/") + '?' + hsh_to_rqst(@options)
113
+ puts "URL: #{uri}" if $DEBUG
114
+ doc = Hpricot(open(uri))
115
+ rescue
116
+ puts "No Network Connection!"
117
+ exit
118
+ end
114
119
  end
115
120
 
116
121
  def search_results? doc
@@ -178,29 +183,32 @@ module RTV
178
183
 
179
184
  USAGE
180
185
 
181
- tv [ELEMENT] ...
186
+ tv [ELEMENT] ...
182
187
 
183
- ELEMENT kann folgende Werte enthalten:
188
+ ELEMENT kann folgende Werte enthalten:
184
189
 
185
- a) TIME als Sendezeit im Format HH oder HH:MM (maximal eine TIME sinnvoll)
186
- b) DATE als Datum im Format DD.MM
187
- b) CHANNEL als Sender aus der Liste in doc/senderliste.txt
188
- c) PATTERN als Suchbegriff (darf kein Sendername sein, siehe b))
189
- d) DESCRIPTION als Beschreibung, feste Zeichenkette "-d"
190
- e) HELP als Hilfe, feste Zeichenkette "help" (gibt diese Seite aus)
190
+ TIME Sendezeit im Format HH oder HH:MM (maximal eine TIME sinnvoll)
191
+ DATE Datum im Format DD.MM
192
+ CHANNEL Sender aus der Liste in doc/senderliste.txt
193
+ PATTERN Suchbegriff (darf kein Sendername sein, siehe b))
194
+ KEY:VALUE Schlüssel und Wert für Konfigurationsoptionen
195
+ DESCRIPTION Beschreibung, feste Zeichenkette "-d"
196
+ HELP Hilfe, feste Zeichenkette "help" (gibt diese Seite aus)
191
197
 
192
198
 
193
199
  EXAMPLES
194
200
 
195
- tv - Aktuelle Sendungen für ausgewählte Sender
196
- tv 20 - Heute 20 Uhr alle Sendungen für ausgewählte Sender
197
- tv 24.12. - Alle Sendungen an Heilig Abend für ausgewählte Sender
198
- tv pro7 sat1 - Aktuelle Sendungen von nur Pro7 und Sat.1
199
- tv simpsons - Alle Sendungen über Die Simpsons für alle Sender
200
- tv -d - Aktuelle Sendungen für ausgewählte Sender mit Beschreibung
201
+ tv Aktuelle Sendungen für ausgewählte Sender
202
+ tv 20 Heute 20 Uhr alle Sendungen für ausgewählte Sender
203
+ tv 24.12. Alle Sendungen an Heilig Abend für ausgewählte Sender
204
+ tv pro7 sat1 Aktuelle Sendungen von nur Pro7 und Sat.1
205
+ tv simpsons Alle Sendungen über Die Simpsons für alle Sender
206
+ tv redundanz:true Zeigt alle Infos an. (Nützlich für grep)
207
+ tv -d Aktuelle Sendungen für ausgewählte Sender mit Beschreibung
208
+ tv help Gibt diese Seite aus
201
209
 
202
- Beliebige sinnvolle Kombinationen in beliebiger Reihenfolge sind möglich:
203
- tv pro7 -d 20 11.07. sat1 - Alle Sendungen auf Pro7 und Sat.1 um 20 Uhr am 11.07. mit Beschreibung'
210
+ Beliebige sinnvolle Kombinationen in beliebiger Reihenfolge sind möglich:
211
+ tv pro7 -d 20 11.07. sat1 - Alle Sendungen auf Pro7 und Sat.1 um 20 Uhr am 11.07. mit Beschreibung'
204
212
 
205
213
  def initialize
206
214
  @uri_options = {}
metadata CHANGED
@@ -3,13 +3,13 @@ rubygems_version: 0.9.4
3
3
  specification_version: 1
4
4
  name: rtv
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.1.5
7
- date: 2007-07-15 00:00:00 +02:00
8
- summary: RTV is a command line tv guide for german television. It features a flexible argument parsing for quick usage in your favorite shell so you don't have to remember the syntax. Query shows by name, date, time or channel! Get it now!
6
+ version: 0.1.6
7
+ date: 2007-07-16 00:00:00 +02:00
8
+ summary: RTV is a command line tv guide for german television.
9
9
  require_paths:
10
10
  - lib
11
11
  email: rretzbach@gmail.com
12
- homepage: http://rtv.rubyforge.org/
12
+ homepage: http://rubyforge.org/projects/rtv/1
13
13
  rubyforge_project:
14
14
  description:
15
15
  autorequire: rtv
@@ -29,9 +29,11 @@ post_install_message:
29
29
  authors:
30
30
  - Robert Retzbach
31
31
  files:
32
- - bin/tv.rb
32
+ - bin/rtv
33
+ - lib/#rtv.rb#
33
34
  - lib/rtv.rb
34
35
  - doc/senderliste.txt
36
+ - etc/config.yaml.example
35
37
  - README
36
38
  test_files: []
37
39
 
@@ -39,8 +41,8 @@ rdoc_options: []
39
41
 
40
42
  extra_rdoc_files:
41
43
  - README
42
- executables: []
43
-
44
+ executables:
45
+ - rtv
44
46
  extensions: []
45
47
 
46
48
  requirements: []
/data/bin/{tv.rb → rtv} RENAMED
File without changes