13
12
import freeguide.common.plugininterfaces.IProgress;
14
13
import freeguide.common.plugininterfaces.IStoragePipe;
15
import java.io.FileNotFoundException;
16
import java.io.IOException;
17
import java.io.InputStream;
19
import java.text.MessageFormat;
21
import java.util.ArrayList;
22
import java.util.Collection;
16
23
import java.util.Iterator;
24
import java.util.List;
17
25
import java.util.Map;
18
26
import java.util.Properties;
19
27
import java.util.TimeZone;
23
31
import javax.swing.JDialog;
34
* Grabber for tv.kulichki.net.
29
* @version $Revision: 1360 $
36
* @author Alex Buloichik
31
38
public class GrabberKulichki extends BaseModule implements IModuleGrabber
40
protected static final TimeZone TIME_ZONE_DEFAULT =
41
TimeZone.getTimeZone( "Europe/Moscow" );
42
protected static final String FILE_GROUPNAMES =
43
"resources/plugins/grabber/kulichki/groupnames.properties";
44
protected static final String FILE_TIMEZONES =
45
"resources/plugins/grabber/kulichki/timezones.properties";
46
protected static final String VALUE_ACCEPT_LANGUAGE = "ru";
47
protected static final String VALUE_ACCEPT_CHARSET = "windows-1251";
48
protected static final String URL_START = "http://tv.kulichki.net";
49
protected static final String URL_PACKET =
50
"http://tv.kulichki.net/cgi-bin/gpack.cgi";
51
protected static final String URL_DATA =
52
"http://tv.kulichki.net/andgon/cgi-bin/itv.cgi";
53
protected static final String PARAM_WEEK = "week";
54
protected static final String PARAM_PACKET = "pakets";
55
protected static final String PARAM_CHANNEL = "chanel";
56
protected static final String PARAM_DAY = "day";
57
protected static final String CHANNEL_PREFIX_ID = "kulichki";
58
protected static final String CHANNEL_PREFIX = "kulichki/";
59
protected static final String[] DAYS_LIST = "1,2,3,4,5,6,7".split( "," );
33
60
protected Properties TIME_ZONES;
34
protected Map GROUP_NAMES;
35
protected TimeZone TIME_ZONE_DEFAULT =
36
TimeZone.getTimeZone( "Europe/Moscow" );
37
protected KulichkiConfig config = new KulichkiConfig( );
61
protected Properties GROUP_NAMES;
62
protected KulichkiConfig config = new KulichkiConfig( i18n );
72
97
final TVChannelsSet result = new TVChannelsSet( );
74
result.add( new TVChannelsSet.Channel( "kulichki", "All" ) );
100
new TVChannelsSet.Channel(
101
CHANNEL_PREFIX_ID, i18n.getString( "MainChannelName" ) ) );
76
103
HttpBrowser browser = new HttpBrowser( );
78
browser.setHeader( "Accept-Language", "ru" );
106
HttpBrowser.HEADER_ACCEPT_LANGUAGE, VALUE_ACCEPT_LANGUAGE );
80
browser.setHeader( "Accept-Charset", "windows-1251" );
109
HttpBrowser.HEADER_ACCEPT_CHARSET, VALUE_ACCEPT_CHARSET );
82
111
HandlerPackets handlerPackets = new HandlerPackets( );
84
113
HandlerChannels handlerChanels = new HandlerChannels( );
86
browser.loadURL( "http://tv.kulichki.net" );
115
browser.loadURL( URL_START );
88
117
browser.parse( handlerPackets );
90
119
String[] weeks = handlerPackets.getWeeks( );
92
String[] packetIDs = handlerPackets.getPacketIDs( );
94
Map request = new TreeMap( );
96
request.put( "week", weeks[0] );
98
for( int j = 0; j < packetIDs.length; j++ )
121
final Collection packetIDs = handlerPackets.getPacketIDs( );
123
final Map<String, String> request = new TreeMap<String, String>( );
125
request.put( PARAM_WEEK, weeks[0] );
127
for( final Iterator itPa = packetIDs.iterator( ); itPa.hasNext( ); )
129
final String packetName = (String)itPa.next( );
101
131
new TVChannelsSet.Channel(
102
"kulichki/" + packetIDs[j],
103
(String)handlerPackets.packetList.get( packetIDs[j] ) ) );
105
request.put( "pakets", packetIDs[j] );
108
"http://tv.kulichki.net/cgi-bin/gpack.cgi", request, true );
132
CHANNEL_PREFIX + packetName,
133
(String)handlerPackets.packetList.get( packetName ) ) );
135
request.put( PARAM_PACKET, packetName );
137
browser.loadURL( URL_PACKET, request, true );
110
139
browser.parse( handlerChanels );
163
190
Map.Entry entry = (Map.Entry)it.next( );
164
191
storage.addChannel(
166
"kulichki/" + (String)entry.getKey( ),
193
CHANNEL_PREFIX + (String)entry.getKey( ),
167
194
(String)entry.getValue( ) ) );
170
197
HttpBrowser browser = new HttpBrowser( );
172
browser.setHeader( "Accept-Language", "ru" );
200
HttpBrowser.HEADER_ACCEPT_LANGUAGE, VALUE_ACCEPT_LANGUAGE );
174
browser.setHeader( "Accept-Charset", "windows-1251" );
203
HttpBrowser.HEADER_ACCEPT_CHARSET, VALUE_ACCEPT_CHARSET );
176
205
HandlerPackets handlerPackets = new HandlerPackets( );
178
207
HandlerChannels handlerChanels = new HandlerChannels( );
180
HandlerProg handlerProg = new HandlerProg( storage, logger );
182
logger.info( "Load initial page" );
184
browser.loadURL( "http://tv.kulichki.net" );
209
HandlerProg handlerProg = new HandlerProg( storage, logger, i18n );
211
logger.info( i18n.getString( "Logging.LoadStartPage" ) );
213
browser.loadURL( URL_START );
186
215
browser.parse( handlerPackets );
188
String[] weeks = handlerPackets.getWeeks( );
190
String[] packets = handlerPackets.getPacketIDs( );
217
final String[] weeks = handlerPackets.getWeeks( );
219
final List packetsList =
220
new ArrayList( handlerPackets.getPacketIDs( ) );
222
for( final Iterator it = packetsList.iterator( ); it.hasNext( ); )
224
final String packetName = (String)it.next( );
227
!config.channels.isSelected( CHANNEL_PREFIX + packetName )
228
&& !config.channels.isChildSelected(
229
CHANNEL_PREFIX + packetName ) )
235
final String[] packets =
236
(String[])packetsList.toArray( new String[packetsList.size( )] );
192
238
Map request = new TreeMap( );
194
Map requestChannels = new TreeMap( );
197
"day", new String[] { "1", "2", "3", "4", "5", "6", "7" } );
240
final Map<String, Object> requestChannels =
241
new TreeMap<String, Object>( );
243
requestChannels.put( PARAM_DAY, DAYS_LIST );
245
progress.setStepCount( weeks.length * packets.length );
246
progress.setStepNumber( 0 );
199
248
for( int i = 0; i < weeks.length; i++ )
201
request.put( "week", weeks[i] );
250
request.put( PARAM_WEEK, weeks[i] );
203
requestChannels.put( "week", weeks[i] );
252
requestChannels.put( PARAM_WEEK, weeks[i] );
205
254
for( int j = 0; j < packets.length; j++ )
208
!config.channels.isSelected( "kulichki/" + packets[j] )
209
&& !config.channels.isChildSelected(
210
"kulichki/" + packets[j] ) )
215
request.put( "pakets", packets[j] );
256
request.put( PARAM_PACKET, packets[j] );
217
258
handlerProg.setChannelIDprefix(
218
"kulichki/" + packets[j] + "/" );
259
CHANNEL_PREFIX + packets[j] + '/' );
220
261
String tzName = TIME_ZONES.getProperty( packets[j] );
231
"Unknown timezone for packet '" + packets[j]
232
+ "'. Will use Europe/Moscow timezone." );
272
MessageFormat.format(
273
i18n.getString( "Logging.UnknownTimeZone" ),
234
276
handlerProg.setTimeZone( TIME_ZONE_DEFAULT );
239
"Load week [" + ( i + 1 ) + "/" + weeks.length
240
+ "] packet [" + ( j + 1 ) + "/" + packets.length
241
+ "]: channel list" );
281
MessageFormat.format(
282
i18n.getString( "Logging.LoadList" ), i + 1,
283
weeks.length, j + 1, packets.length ) );
244
"http://tv.kulichki.net/cgi-bin/gpack.cgi", request, true );
285
browser.loadURL( URL_PACKET, request, true );
246
287
browser.parse( handlerChanels );
249
"Load week [" + ( i + 1 ) + "/" + weeks.length
250
+ "] packet [" + ( j + 1 ) + "/" + packets.length
251
+ "]: channel data" );
290
MessageFormat.format(
291
i18n.getString( "Logging.LoadData" ), i + 1,
292
weeks.length, j + 1, packets.length ) );
328
376
protected void loadGroupNames( )
330
GROUP_NAMES = new TreeMap( );
378
GROUP_NAMES = new Properties( );
380
final InputStream in =
381
GrabberKulichki.class.getClassLoader( )
382
.getResourceAsStream( FILE_GROUPNAMES );
334
LanguageHelper.loadProperties(
335
"resources/plugins/grabber/kulichki/groupnames.properties",
388
throw new FileNotFoundException( );
391
GROUP_NAMES.load( in );
338
catch( Exception ex )
394
catch( IOException ex )
340
396
Application.getInstance( ).getLogger( )