View Javadoc
1   package us.codecraft.webmagic.pipeline;
2   
3   import com.alibaba.fastjson.JSON;
4   import org.apache.commons.codec.digest.DigestUtils;
5   import org.slf4j.Logger;
6   import org.slf4j.LoggerFactory;
7   import us.codecraft.webmagic.ResultItems;
8   import us.codecraft.webmagic.Task;
9   import us.codecraft.webmagic.utils.FilePersistentBase;
10  
11  import java.io.FileWriter;
12  import java.io.IOException;
13  import java.io.PrintWriter;
14  
15  /**
16   * Store results to files in JSON format.<br>
17   *
18   * @author code4crafter@gmail.com <br>
19   * @since 0.2.0
20   */
21  public class JsonFilePipeline extends FilePersistentBase implements Pipeline {
22  
23      private Logger logger = LoggerFactory.getLogger(getClass());
24  
25      /**
26       * new JsonFilePageModelPipeline with default path "/data/webmagic/"
27       */
28      public JsonFilePipeline() {
29          setPath("/data/webmagic");
30      }
31  
32      public JsonFilePipeline(String path) {
33          setPath(path);
34      }
35  
36      @Override
37      public void process(ResultItems resultItems, Task task) {
38          String path = this.path + PATH_SEPERATOR + task.getUUID() + PATH_SEPERATOR;
39          try {
40              PrintWriter printWriter = new PrintWriter(new FileWriter(getFile(path + DigestUtils.md5Hex(resultItems.getRequest().getUrl()) + ".json")));
41              printWriter.write(JSON.toJSONString(resultItems.getAll()));
42              printWriter.close();
43          } catch (IOException e) {
44              logger.warn("write file error", e);
45          }
46      }
47  }