0

Новый кинотеатр

This commit is contained in:
2017-04-02 03:26:30 +03:00
parent 78fba0f79b
commit b4a94e3dad
7 changed files with 101 additions and 2 deletions

View File

@@ -5,9 +5,12 @@
package kinosearch.kinosearch3.browser; package kinosearch.kinosearch3.browser;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
import org.apache.http.HttpMessage;
import org.apache.http.HttpResponse; import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient; import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.client.HttpClients;
import java.io.IOException; import java.io.IOException;
@@ -37,7 +40,26 @@ public class ApacheBrowser implements Browser {
return result; return result;
} }
private void setup_headers(HttpGet request) { @Override
public String post(String url, String data) {
HttpClient client = HttpClients.createDefault();
HttpPost request = new HttpPost(url);
setup_headers(request);
request.addHeader("Content-Type", "application/x-www-form-urlencoded");
String result = "";
try {
request.setEntity(new StringEntity(data));
HttpResponse response = client.execute(request);
result = IOUtils.toString(response.getEntity().getContent(), encoding);
} catch (IOException ignore) {
// ignore
}
return result;
}
private void setup_headers(HttpMessage request) {
request.addHeader("Connection", "close"); request.addHeader("Connection", "close");
request.addHeader("Accept-Encoding", "deflate"); request.addHeader("Accept-Encoding", "deflate");
request.addHeader("User-Agent", "Mozilla/5.0 (Linux; Android 4.2.2; GT-I9505 Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.59 Mobile Safari/537.36"); request.addHeader("User-Agent", "Mozilla/5.0 (Linux; Android 4.2.2; GT-I9505 Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.59 Mobile Safari/537.36");

View File

@@ -7,4 +7,5 @@ package kinosearch.kinosearch3.browser;
public interface Browser { public interface Browser {
void setEncoding(String encoding); void setEncoding(String encoding);
String get(String url); String get(String url);
String post(String url, String data);
} }

View File

@@ -31,6 +31,11 @@ public class ScannerImpl implements ScannerCinema {
} }
} }
@Override
public String getName() {
return "OnlineLife";
}
@Override @Override
public void run() { public void run() {
int lastPage = getLastPage(); int lastPage = getLastPage();

View File

@@ -0,0 +1,61 @@
/*
* DmitriyMX <dimon550@gmail.com>
* 2017-04-02
*/
package kinosearch.kinosearch3.cinema.seasonvar;
import kinosearch.kinosearch3.browser.Browser;
import kinosearch.kinosearch3.spider.FileDownloader;
import kinosearch.kinosearch3.spider.ScannerCinema;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
public class ScannerImpl implements ScannerCinema {
private Logger logger = LoggerFactory.getLogger(ScannerImpl.class);
private final FileDownloader fileDownloader;
private final Browser browser;
private final File saveTo;
private int i = 1;
public ScannerImpl(FileDownloader fileDownloader, Browser browser, File saveTo) {
this.fileDownloader = fileDownloader;
this.browser = browser;
this.saveTo = saveTo;
if (!this.saveTo.mkdirs() && !this.saveTo.exists()) {
throw new IllegalStateException(String.format("dir not found: '%s'", this.saveTo.getAbsolutePath()));
}
}
@Override
public String getName() {
return "Seasonvar";
}
@Override
public void run() {
String html = browser.get("http://seasonvar.ru/");
Document document = Jsoup.parse(html);
Elements elements = document.getElementsByClass("betterT");
elements.stream()
.filter(element -> element.tagName().equals("div"))
.map(element -> element.children().get(0))
.forEach(element -> {
logger.info("element #{}", i++);
String str = element.attr("href");
str = str.substring(1, str.lastIndexOf("."));
String str2 = element.attr("data");
str2 = browser.get("http://seasonvar.ru"+str2);
Document doc = Jsoup.parse(str2);
str2 = doc.getElementsByTag("img").get(0).attr("src");
this.fileDownloader.addFile(str2, new File(this.saveTo, str+".jpg"));
});
}
}

View File

@@ -5,5 +5,6 @@
package kinosearch.kinosearch3.spider; package kinosearch.kinosearch3.spider;
public interface ScannerCinema { public interface ScannerCinema {
String getName();
void run(); void run();
} }

View File

@@ -18,6 +18,8 @@ public class Spider {
void start() { void start() {
fileDownloader.start(); fileDownloader.start();
scanners.forEach(ScannerCinema::run); for (ScannerCinema scanner : scanners) {
(new Thread(scanner::run, "Scanner " + scanner.getName())).start();
}
} }
} }

View File

@@ -23,10 +23,17 @@
<constructor-arg name="saveToDir" value="file:R:/onlinelife"/> <constructor-arg name="saveToDir" value="file:R:/onlinelife"/>
</bean> </bean>
<bean id="seasonvarScanner" class="kinosearch.kinosearch3.cinema.seasonvar.ScannerImpl">
<constructor-arg name="fileDownloader" ref="fileDownloader"/>
<constructor-arg name="browser" ref="browser"/>
<constructor-arg name="saveTo" value="file:R:/seasonvar"/>
</bean>
<bean id="spider" class="kinosearch.kinosearch3.spider.Spider"> <bean id="spider" class="kinosearch.kinosearch3.spider.Spider">
<constructor-arg name="scanners"> <constructor-arg name="scanners">
<list> <list>
<ref bean="onlinelifeScanner"/> <ref bean="onlinelifeScanner"/>
<ref bean="seasonvarScanner"/>
</list> </list>
</constructor-arg> </constructor-arg>
<constructor-arg name="fileDownloader" ref="fileDownloader"/> <constructor-arg name="fileDownloader" ref="fileDownloader"/>