package polly.linkexpander.core.grabbers;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.regex.Matcher;
import de.skuzzle.polly.sdk.eventlistener.MessageEvent;
import de.skuzzle.polly.sdk.httpv2.html.HTMLTools;
public abstract class AbstractHttpRequestGrabber implements LinkGrabber {
private String findCharset(String contentType) {
for (String param : contentType.replace(" ", "").split(";")) { //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
if (param.startsWith("charset=")) { //$NON-NLS-1$
return param.split("=", 2)[1]; //$NON-NLS-1$
}
}
return "UTF-8"; //$NON-NLS-1$
}
@Override
public String processMatch(MessageEvent matched, Matcher matcher) {
String grabbed = matched.getMessage();
URLConnection c = null;
BufferedReader r = null;
try {
final URL url = new URL(this.getLink(grabbed, matcher));
c = url.openConnection();
c.setDoInput(true);
final String charset = this.findCharset(c.getHeaderField("Content-Type")); //$NON-NLS-1$
r = new BufferedReader(new InputStreamReader(c.getInputStream(), charset));
String line = null;
while ((line = r.readLine()) != null) {
final String processed = this.processResponseLine(
HTMLTools.unescape(line));
if (processed != null) {
return processed;
}
}
} catch (IOException e) {
return null;
} finally {
if (r != null) {
try {
r.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return null;
}
public abstract String processResponseLine(String line);
}