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;
}
}
}