All pastes #820348 Raw Edit

INFOParsing.java NFO

public text v1 · immutable
·published 2007-12-17 14:20 UTC
rendered paste body
/* This file is part of DrFTPD, Distributed FTP Daemon.
 *
 * Auteur : k2r
 * Email : k2r.contact@gmail.com
 *
 */

package net.k2rmods.plugins.irc.imdb;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import net.sf.drftpd.FileExistsException;
import net.sf.drftpd.event.Event;
import net.sf.drftpd.util.ReplacerUtils;

import org.apache.log4j.Logger;
import org.drftpd.plugins.SiteBot;
import org.drftpd.remotefile.LinkedRemoteFile;
import org.drftpd.remotefile.LinkedRemoteFileInterface;
import org.tanesha.replacer.ReplacerEnvironment;

public class INFOParsing extends Thread {

	private static final Logger logger = Logger.getLogger(INFOParsing.class);

	private String _INFOurl;
	private LinkedRemoteFileInterface _link;
	private SiteBot _irc;
	private String _channel;

	private String _title = "N/A";
	private String _director = "N/A";
	private String _genre = "N/A";
	private String _plot = "N/A";
	private String _votes = "N/A";
	private String _rating = "N/A";
	private String _year = "N/A";
	private String _url = "N/A";

	public INFOParsing(LinkedRemoteFile link, NFOFile nfo, SiteBot bot,
			String channel) {
		_link = link;
		_irc = bot;
		_INFOurl = nfo.getURL();
		_channel = channel;
	}

	public void run() {

		boolean isFind = false;

		if (_INFOurl != null && _INFOurl.indexOf("imdb") != -1) {
			getInfoIMDB(_INFOurl);
			isFind = true;
		}
		if(isFind == false && _INFOurl != null) {
                     getInfoSIMPLE(_INFOurl);
              }
	}

	public String getGenre() { return _genre; }
	public String getPlot() { return _plot; }
	public String getRating() { return _rating; }
	public String getTitle() { return _title; }
	public String getVotes() { return _votes; }
	public String getYear() { return _year; }
	public String getURL() { return _url; }
	public String getDirector() { return _director; }

	private void getInfoIMDB(String urlString) {

		try {
			URL url = new URL(urlString);
			URLConnection urlConn = url.openConnection();

			if (!(urlConn.getContent() instanceof InputStream))
				return;

			String data = "";
			BufferedReader in = null;
			String line;

			try {
				in = new BufferedReader(new InputStreamReader(urlConn.getInputStream()));
				while ((line = in.readLine()) != null)
					data = data + line + "\n";
			} finally {
				in.close();
			}

			_url = urlString;
			_director = parseData(data, ">Directed by", "</a>");
			_title = parseData(data, "<h1><strong class=\"title\">", "<small>");
			_genre = parseData(data, "<b class=\"ch\">Genre:</b>", "<br><br>");
			_genre = _genre.replaceAll("\\(more\\)", "").trim();
			_plot = parseData(data, "<b class=\"ch\">Plot Outline:</b>",
					"<a href=\"");
			if (_plot.equals("N/A"))
				_plot = parseData(data, "<b class=\"ch\">Plot summary:</b>",
						"<a href=\"");
			_rating = parseData(data, "<b class=\"ch\">User Rating:</b>",
					"</b>");
			_rating = _rating.equals("N/A") || _rating.indexOf("/") < 0 ? "N/A"
					: _rating.substring(0, _rating.indexOf("/"));
			_votes = parseData(data, "<b class=\"ch\">User Rating:</b>",
					"<br><br>");
			_votes = _votes.indexOf("(") < 0 || _votes.indexOf("votes") < 0 ? "N/A"
					: _votes.substring(_votes.indexOf("(") + 1,
							_votes.indexOf("votes")).trim();
			_year = parseData(data, "<a href=\"/Sections/Years/", "</a>")
					.substring(6);

		} catch (MalformedURLException e) {
			logger.error("IMDB malformed URL Exception");
		} catch (IOException e) {
			logger.error("IMDB Exception : "+e.getMessage());
		}

		String RepInfos = "[IMDB]-" + _genre + "_Score_" + _rating + "_With_"
				+ _votes + "_Screens-[IMDB]";
		if (RepInfos.indexOf(" / ") != -1)
			RepInfos = RepInfos.replaceAll(" / ", ".");
		try {
			_link.createDirectory("IMDB", "IMDB", RepInfos);
		} catch (FileExistsException e) {}

		_irc.say(_channel, ReplacerUtils.jprintf("imdb.announce.1", getEnv(),
				INFOParsing.class));
		_irc.say(_channel, ReplacerUtils.jprintf("imdb.announce.2", getEnv(),
				INFOParsing.class));
		_irc.say(_channel, ReplacerUtils.jprintf("imdb.announce.3", getEnv(),
				INFOParsing.class));

	}

	private void getInfoSIMPLE(String urlString) {
		_url = urlString;
		_irc.say(_channel, ReplacerUtils.jprintf("simple.announce", getEnv(),
				INFOParsing.class));
	}

	public ReplacerEnvironment getEnv() {
		ReplacerEnvironment env = new ReplacerEnvironment(SiteBot.GLOBAL_ENV);
		env.add("rlz", _link.getName());
		env.add("director", getDirector());
		env.add("title", getTitle());
		env.add("genre", getGenre());
		env.add("plot", getPlot());
		env.add("rating", getRating());
		env.add("votes", getVotes());
		env.add("year", getYear());
		env.add("url", getURL());
		return env;
	}

	private String parseData(String data, String startText, String endText) {
		int start, end;
		start = data.indexOf(startText);
		if (start > 0) {
			start = start + startText.length();
			end = data.indexOf(endText, start);
			return htmlToString(data.substring(start, end)).trim();
		}
		return "N/A";
	}

	private String htmlToString(String input) {
		String str = input.replaceAll("\n", "");
		while (str.indexOf("<") != -1) {
			int startPos = str.indexOf("<");
			int endPos = str.indexOf(">", startPos);
			if (endPos > startPos) {
				String beforeTag = str.substring(0, startPos);
				String afterTag = str.substring(endPos + 1);
				str = beforeTag + afterTag;
			}
		}

		String mbChar;
		String mbs = "&#(\\d+);";
		StringBuffer sb = new StringBuffer();
		Pattern pat = Pattern.compile(mbs);
		Matcher mat = pat.matcher(str);

		while (mat.find()) {
			mbChar = getMbCharStr(mat.group(1));
			mat.appendReplacement(sb, mbChar);
		}
		mat.appendTail(sb);
		return new String(sb);
	}

	private String getMbCharStr(String digits) {
		char[] cha = new char[1];

		try {
			int val = Integer.parseInt(digits);
			char ch = (char) val;
			cha[0] = ch;
		} catch (Exception e) {
			System.err.println("Error from getMbCharStr:");
			e.printStackTrace(System.err);
		}
		return new String(cha);
	}

	public void actionPerformed(Event event) {
		if ("RELOAD".equals(event.getCommand())) {
			return;
		}
	}
}