All pastes #334562 Raw Edit

Untitled

public text v1 · immutable
#334562 ·published 2007-01-31 18:30 UTC
rendered paste body
/** This class will download the data from the website.
 * 
 */
package wj;
import org.htmlparser.filters.*;
import org.htmlparser.*;
import org.htmlparser.util.*;
import java.io.*;
import java.net.*;

/**
 * @author chotchki
 * 
 */
public class DataScraper {
	private DateString generator;

	private Config config;

	private Storage storage;

	/**
	 * 
	 * @param currentDate
	 *            Date that you wished scraped
	 */
	public DataScraper(Config config) {
		this.config = config;
		this.generator = new DateString(this.config);
		this.storage = new Storage(this.config);
	}

	public Storage getData() {
		while (!this.generator.isToday()) {
			CustomCalendar day = this.generator.getDate();
			//System.out.println(day.getDateString());
			if(this.storage.checkDate(day)){
				this.generator.nextDay();
				continue;
			}
			double djiClose = 0;
			double nyseAdvancers = 0; 
			double nyseDecliners = 0;
			boolean empty = false;
			String pageText = "";
			try {
				URL connection = new URL(this.config.URL
						+ this.generator.getDate().getDateString());
				BufferedReader in = new BufferedReader(
						new InputStreamReader(
								connection.openStream()));
				String inputLine;
				while ((inputLine = in.readLine()) != null){
					pageText += inputLine;
				}
				in.close();
				//Parse out all the values from the page if any values fail
				//Then make sure the day is set as empty			        
				Parser parser = new Parser(pageText);
				djiClose = this.parseDOW(parser);
				Parser parser2 = new Parser(pageText);
				nyseAdvancers = this.parseNYSEA(parser2);
				Parser parser3 = new Parser(pageText);
				nyseDecliners = this.parseNYSED(parser3);
			}catch(Exception e){
				empty = true;
			}
			if(empty == true){
				this.storage.addEmptyDate(day);
			}
			else{
				this.storage.addDate(day, djiClose, nyseAdvancers, nyseDecliners);
			}
			this.storage.save();
			this.generator.nextDay();
		}
		return this.storage;
	}

	public double parseDOW(Parser parser) throws NumberFormatException {
		String closeDirty = "";
		try {
			// This grabs the closing value for the DOW Jones
			NodeList list = new NodeList();
			NodeFilter filter = new AndFilter(
					new TagNameFilter("TD"),
					new HasSiblingFilter(
							new HasChildFilter(
									new StringFilter(
											"Dow Jones"
									)
							)
					)
			);
			for (NodeIterator e = parser.elements(); e.hasMoreNodes();) {
				e.nextNode().collectInto(list, filter);
			}
			closeDirty = list.elementAt(7).toPlainTextString();

		} catch (Exception e) {
		}

		double closeClean = Double.parseDouble(closeDirty);
		return closeClean;
	}
	public double parseNYSEA(Parser parser) throws NumberFormatException {
		String closeDirty = "";
		try {
			// This grabs the closing value for the DOW Jones
			NodeList list = new NodeList();
			NodeFilter filter = 
				new AndFilter(
						new TagNameFilter("TD"),
						new HasSiblingFilter(
								new HasChildFilter(
										new StringFilter(
												"Advancers"
										)
								)
						)
				);
			for (NodeIterator e = parser.elements(); e.hasMoreNodes();) {
				e.nextNode().collectInto(list, filter);
			}
			closeDirty = list.elementAt(7).toPlainTextString();

		} catch (Exception e) {

		}

		double closeClean = Double.parseDouble(closeDirty);
		return closeClean;
	}
	public double parseNYSED(Parser parser) throws NumberFormatException {
		String closeDirty = "";
		try {
			NodeList list = new NodeList();
			NodeFilter filter = 
				new AndFilter(
						new TagNameFilter("TD"),
						new HasSiblingFilter(
								new HasChildFilter(
										new StringFilter(
												"Decliners"
										)
								)
						)
				);
			for (NodeIterator e = parser.elements(); e.hasMoreNodes();) {
				e.nextNode().collectInto(list, filter);
			}
			closeDirty = list.elementAt(6).toPlainTextString();

		} catch (Exception e) {
			e.printStackTrace();
		}

		double closeClean = Double.parseDouble(closeDirty);
		return closeClean;
	}
}