Class: XMLTV::UpcGrabber
Constant Summary
collapse
- Days_to_grab =
%w{ today } + Date::DAYNAMES.map{|x| x.downcase}
- Cattrans =
{ 'drama' => 'Drama',
'educatie' => 'Educational',
'erotiek' => 'Adult',
'kids/jeugd' => 'Children',
'kunst/cultuur' => 'Arts/Culture',
'nieuws' => 'News',
'show/spelshow' => 'Game',
'speelfilm' => 'Movies',
'sport' => 'Sports',
'vrijetijd' => 'Educational' }
Constants inherited
from Grabber
Grabber::Dag, Grabber::MythTV, Grabber::Vandaag
Instance Attribute Summary
Attributes inherited from Grabber
#all_channels, #channel_list, #chnbasedir, #config, #config_file_name, #generator, #lang, #myname, #reject_file_name, #spooldir
Instance Method Summary
collapse
Methods inherited from Grabber
#add_channels_to_config, #cachefile, #channel_name, #check_argv, #check_channel, #clean_cache_dir, #clean_spool_dir, #config_channels, #date_stats, #delete_channels_from_config, #do_list, #do_options, #dump, #fetch, #fix_times, #get_channels, #initialize, #list_all, #list_config, #load_cachefile, #load_channel_file, #load_config_file, #outputfile, #printline, #proghash, #reject, #report, #run, #save, #save_config, #save_object, #version
Constructor Details
This class inherits a constructor from XMLTV::Grabber
Instance Method Details
#base_url ⇒ Object
32
33
34
|
# File 'lib/xmltv/sites/upc.rb', line 32
def base_url
'http://www.upclive.nl'
end
|
#channel_display(chan_id) ⇒ Object
72
73
74
|
# File 'lib/xmltv/sites/upc.rb', line 72
def channel_display(chan_id)
all_channels[chan_id][0]
end
|
#clean_cache(cache) ⇒ Object
62
63
64
65
66
67
68
69
70
|
# File 'lib/xmltv/sites/upc.rb', line 62
def clean_cache(cache)
count = 0
cache.delete_if do |dt, en|
rsl = (Date.parse(dt) < Vandaag)
count += 1 if rsl
rsl
end
count
end
|
#day_url(chan_id, day) ⇒ Object
75
76
77
|
# File 'lib/xmltv/sites/upc.rb', line 75
def day_url(chan_id, day)
"#{base_url}#{all_channels[chan_id][2]}#{day}_all"
end
|
#fetch_all_channels ⇒ Object
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
# File 'lib/xmltv/sites/upc.rb', line 36
def fetch_all_channels
channels = Hash.new
catch(:ready) do
1.upto 200 do |pagenr|
www = "#{base_url}/Televisie/TV_gids/Zenders/?channels=All&theme=All&page=#{pagenr}"
STDERR.puts(www) if XmltvOptions.verbose
page = fetch(www)
chns = page.search('div.epg_listings_bar4c') + page.search('div.epg_listings_bar4cend')
chns.each do |chn|
if chn.at('h5 a').nil?
throw :ready
end
url = REXML::Text.read_with_substitution(chn.at('h5 a')['href']).gsub('nowandnext','')
name = URI.unescape(url[/channels=(.*)&/, 1])
tekst = chn.at('div.right')
zender = tekst.inner_text[/Zendernummer\s+([0-9]+)/, 1]
packet = tekst.at('a.epg_underline').inner_text.split[-1]
packet = '' if packet == 'Pack'
channels[zender] = [name, packet, url]
end
end
end
save_object(channels, channel_list)
channels
end
|
#grab_channel(chan_id) ⇒ Object
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
# File 'lib/xmltv/sites/upc.rb', line 79
def grab_channel(chan_id)
@all_days = load_cachefile(chan_id)
@all_days.delete(Date.today.to_s) progs = 0
Days_to_grab.each_with_index do |day, dchan_id|
date = Date.upcdate(dchan_id == 0 ? day : Date::Dagen[dchan_id - 1])
next if @all_days.has_key?(date.to_s)
url = day_url(chan_id, day)
page = fetch(url)
begin
datum = Date.dutch(page.at('//div.epg_listings_bar1//span').inner_text)
rescue NoMethodError
save(url, page)
raise BadChannelError.new
end
if day == 'today' && datum != Date.today
raise "#{day} #{datum} Upc is gek geworden"
end
noshift = nil
programs = Array.new
page.at('div.ch_ci2_epg_center').search('/div').each do |programme|
case programme['class']
when 'epg_header_4'
noshift = ( programme.inner_text.strip.downcase == 'ochtend')
when 'listing_visible'
programs << (program = Hash.new)
program['noshift'] = noshift
program['title'] = programme.at('div.col7').inner_text.strip
program['times'] = programme.at('div.col8').inner_text.gsub(/\s/,'')
program['category'] = programme.at('div.col9').inner_text.strip
desc = ''
programme.at('div.info_color').each_child do |node|
break if node.class != Hpricot::Text
desc << node.to_s.strip
end
program['desc'] = desc
end
end
@all_days[datum.to_s] = programs
progs += programs.size
end
save_object( @all_days , cachefile(chan_id))
progs
end
|
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
|
# File 'lib/xmltv/sites/upc.rb', line 125
def transform(chan_id)
progdata_array = Array.new
@all_days.each_pair do |datum, programs|
jaar, maand, dag = datum.split('-').map{|x| x.to_i}
programs.each do |entry|
progdata = proghash(entry, chan_id)
startuur, startmin, stopuur, stopmin = entry['times'].scan(/\d+/).map{|x| x.to_i}
shift = startuur < 8 && entry['noshift'] == false ? Dag : 0
progdata['start'] = start = Time.local(jaar, maand, dag, startuur, startmin) + shift
progdata['stop'] = stop = Time.local(jaar, maand, dag, stopuur, stopmin)
if stop < start && stopuur <= 10
progdata['stop'] += Dag
end
date_stats(chan_id, progdata['start'])
if progdata['stop'] < progdata['start']
reject(myname, day_url(chan_id, 'today'), entry, progdata)
next
end
date_stats(chan_id, progdata['start'])
progdata['category'] = Cattrans[entry['category'].gsub(/\s+/,'').downcase] || 'onbekend'
progdata_array << progdata
end
end
progdata_array
end
|