import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Date;
-import java.util.EnumMap;
import java.util.List;
import java.util.Properties;
import java.util.regex.Matcher;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.wamblee.conditions.Condition;
import org.wamblee.crawler.Action;
import org.wamblee.crawler.Configuration;
import org.wamblee.crawler.Crawler;
import org.wamblee.crawler.PageException;
import org.wamblee.crawler.impl.ConfigurationParser;
import org.wamblee.crawler.impl.CrawlerImpl;
-import org.wamblee.crawler.kiss.Program.RecordingResult;
/**
* The KiSS crawler for automatic recording of interesting TV shows.
// client.getHostConfiguration().setProxy("127.0.0.1", 3128);
Crawler crawler = createCrawler(aCrawlerConfig, os, client);
+ InputStream programConfigFile = new FileInputStream(new File(
+ aProgramConfig));
+ List<ProgramFilter> programFilters = new ProgramConfigurationParser()
+ .parse(programConfigFile);
Page page = getStartPage(aStartUrl, crawler);
TVGuide guide = createGuide(page);
PrintVisitor printer = new PrintVisitor(System.out);
guide.accept(printer);
-
- InputStream programConfigFile = new FileInputStream(new File(
- aProgramConfig));
- Condition<Program> programCondition = new ProgramConfigurationParser()
- .parse(programConfigFile);
- recordInterestingShows(programCondition, guide);
+ processResults(programFilters, guide);
} finally {
os.flush();
os.close();
* @throws MessagingException
* In case of problems sending a summary mail.
*/
- private void recordInterestingShows(Condition<Program> aProgramCondition,
+ private void processResults(List<ProgramFilter> aProgramCondition,
TVGuide aGuide) throws MessagingException {
- MatchVisitor matcher = new MatchVisitor(aProgramCondition);
- aGuide.accept(matcher);
- List<Program> programs = matcher.getMatches();
- EnumMap<RecordingResult, List<Program>> messages = new EnumMap<RecordingResult, List<Program>>(
- RecordingResult.class);
- for (RecordingResult result: RecordingResult.values()) {
- messages.put(result, new ArrayList<Program>());
- }
- for (Program program : programs) {
- try {
- Program.RecordingResult result = program.record();
- messages.get(result).add(program);
- } catch (PageException e) {
- LOG.info("Attempt to record " + program + " failed.");
- messages.get(RecordingResult.ERROR).add(program);
+ ProgramActionExecutor executor = new ProgramActionExecutor();
+ for (ProgramFilter filter : aProgramCondition) {
+ List<Program> programs = filter.apply(aGuide);
+ ProgramAction action = filter.getAction();
+ for (Program program: programs) {
+ action.execute(program, executor);
}
}
- String msg = "Summary of KiSS crawler: \n\n\n";
-
-
- for (RecordingResult result: RecordingResult.values()) {
- if ( messages.get(result).size() > 0 ) {
- msg += result.getDescription() + "\n\n";
- for (Program program: messages.get(result)) {
- msg += program + "\n";
- }
- }
- }
- if ( programs.size() == 0 ) {
- msg += "No suitable programs found";
- }
-
+ executor.commit();
+ String msg = executor.getReport();
System.out.println(msg);
sendMail(msg);
}
Channel channel = createChannel(action.getName(), action
.execute().getAction("right-now").execute());
channels.add(channel);
- if ( SystemProperties.isDebugMode() ) {
- break; // Only one channel is crawled.
+ if (SystemProperties.isDebugMode()) {
+ break; // Only one channel is crawled.
}
} catch (PageException e) {
LOG.error("Could not create channel information for '"
.getText().trim();
} catch (PageException e) {
LOG
- .warn("Program details coul dnot be determined for '"
- + action.getName() + "'");
+ .warn("Program details could not be determined for '"
+ + action.getName() + "'", e);
}
}
Program program = new Program(aChannel, action.getName(),
description, keywords, interval, action);
- LOG.debug("Got program " + program);
+ LOG.info("Got program " + program);
programs.add(program);
}
}