StatusBasedFileWriterPlugin.java
上传用户:qing5858
上传日期:2015-10-27
资源大小:6056k
文件大小:5k
源码类别:

搜索引擎

开发平台:

Java

  1. package net.javacoding.jspider.mod.plugin.statusbasedfilewriter;
  2. import net.javacoding.jspider.api.event.EventVisitor;
  3. import net.javacoding.jspider.api.event.JSpiderEvent;
  4. import net.javacoding.jspider.api.event.engine.*;
  5. import net.javacoding.jspider.api.event.folder.FolderDiscoveredEvent;
  6. import net.javacoding.jspider.api.event.folder.FolderRelatedEvent;
  7. import net.javacoding.jspider.api.event.resource.*;
  8. import net.javacoding.jspider.api.event.site.*;
  9. import net.javacoding.jspider.api.model.FetchTriedResource;
  10. import net.javacoding.jspider.api.model.Resource;
  11. import net.javacoding.jspider.core.logging.Log;
  12. import net.javacoding.jspider.core.logging.LogFactory;
  13. import net.javacoding.jspider.core.util.config.ConfigurationFactory;
  14. import net.javacoding.jspider.spi.Plugin;
  15. import java.io.*;
  16. import java.util.*;
  17. /**
  18.  * $Id: StatusBasedFileWriterPlugin.java,v 1.10 2003/04/08 15:50:38 vanrogu Exp $
  19.  */
  20. public class StatusBasedFileWriterPlugin implements Plugin, EventVisitor {
  21.     public static final String MODULE_NAME = "Status based  Filewriter JSpider plugin";
  22.     public static final String MODULE_VERSION = "v1.0";
  23.     public static final String MODULE_DESCRIPTION = "A JSpider plugin that writes a report file per HTTP status";
  24.     public static final String MODULE_VENDOR = "http://www.javacoding.net";
  25.     protected Log log;
  26.     protected HashMap fileWriters;
  27.     public StatusBasedFileWriterPlugin ( ) {
  28.         log = LogFactory.getLog ( StatusBasedFileWriterPlugin.class );
  29.         fileWriters = new HashMap ( );
  30.         log.info("initialized." );
  31.     }
  32.     public void initialize() {
  33.     }
  34.     public void shutdown() {
  35.     }
  36.     public String getName() {
  37.         return MODULE_NAME;
  38.     }
  39.     public String getVersion() {
  40.         return MODULE_VERSION;
  41.     }
  42.     public String getDescription() {
  43.         return MODULE_DESCRIPTION;
  44.     }
  45.     public String getVendor() {
  46.         return MODULE_VENDOR;
  47.     }
  48.     public void notify(JSpiderEvent event) {
  49.         event.accept(this);
  50.     }
  51.     public void visit(JSpiderEvent event) {
  52.     }
  53.     public void visit(EngineRelatedEvent event) {
  54.     }
  55.     public void visit(SpideringStartedEvent event) {
  56.     }
  57.     public void visit(SpideringStoppedEvent event) {
  58.         Collection printWriters = fileWriters.values();
  59.         Iterator it = printWriters.iterator();
  60.         while ( it.hasNext() ) {
  61.             PrintWriter pw = (PrintWriter)it.next();
  62.             pw.close();
  63.         }
  64.     }
  65.     public void visit(FolderRelatedEvent event) {
  66.     }
  67.     public void visit(FolderDiscoveredEvent event) {
  68.     }
  69.     public void visit(ResourceRelatedEvent event) {
  70.     }
  71.     public void visit(EMailAddressDiscoveredEvent event) {
  72.     }
  73.     public void visit(EMailAddressReferenceDiscoveredEvent event) {
  74.     }
  75.     public void visit(MalformedURLFoundEvent event) {
  76.     }
  77.     public void visit(MalformedBaseURLFoundEvent event) {
  78.     }
  79.     public void visit(ResourceDiscoveredEvent event) {
  80.     }
  81.     public void visit(ResourceFetchedEvent event) {
  82.         FetchTriedResource resource = event.getResource();
  83.         int state = resource.getHttpStatus();
  84.         writeInFile ( state, resource );
  85.     }
  86.     public void visit(ResourceFetchErrorEvent event) {
  87.         FetchTriedResource resource = event.getResource();
  88.         int state = resource.getHttpStatus();
  89.         writeInFileWithReferer ( state, resource );
  90.     }
  91.     public void visit(ResourceForbiddenEvent event) {
  92.     }
  93.     public void visit(ResourceParsedEvent event) {
  94.     }
  95.     public void visit(ResourceIgnoredForFetchingEvent event) {
  96.     }
  97.     public void visit(ResourceIgnoredForParsingEvent event) {
  98.     }
  99.     public void visit(ResourceReferenceDiscoveredEvent event) {
  100.     }
  101.     public void visit(SiteRelatedEvent event) {
  102.     }
  103.     public void visit(SiteDiscoveredEvent event) {
  104.     }
  105.     public void visit(RobotsTXTMissingEvent event) {
  106.     }
  107.     public void visit(RobotsTXTFetchedEvent event) {
  108.     }
  109.     public void visit(UserAgentObeyedEvent event) {
  110.     }
  111.     protected void writeInFile ( int state, Resource resource ) {
  112.         PrintWriter pw = getFileWriter(state);
  113.         pw.println(resource.getURL());
  114.     }
  115.     protected void writeInFileWithReferer ( int state, Resource resource ) {
  116.         PrintWriter pw = getFileWriter(state);
  117.         pw.println(resource.getURL());
  118.         pw.println("  REFERED BY:");
  119.         Resource[] referers = resource.getReferers();
  120.         for (int i = 0; i < referers.length; i++) {
  121.             Resource referer = referers[i];
  122.             pw.println("  " + referer.getURL() );
  123.         }
  124.     }
  125.     protected PrintWriter getFileWriter ( int state ) {
  126.         try {
  127.             Integer idObject = new Integer ( state );
  128.             PrintWriter retVal = (PrintWriter) fileWriters.get( ( idObject ));
  129.             if ( retVal == null ) {
  130.                 log.info("creating file for status '" + state + "'" );
  131.                 retVal = new PrintWriter ( new FileOutputStream (new File(ConfigurationFactory.getConfiguration().getDefaultOutputFolder(), state + ".out")));
  132.                 log.debug("opened file for status '" + state + "'" );
  133.                 fileWriters.put(idObject, retVal);
  134.             }
  135.             return retVal;
  136.         } catch (IOException e) {
  137.             log.error("i/o exception writing file for state " + state, e);
  138.         }
  139.         return null;
  140.     }
  141. }