diff --git a/core/pom.xml b/core/pom.xml index 026ac2f..5ae3454 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -5,7 +5,7 @@ parent ru.bvn13.imdbspider - 1.0-SNAPSHOT + 0.0.1 4.0.0 diff --git a/core/src/main/java/ru/bvn13/imdbspider/ImdbSpider.java b/core/src/main/java/ru/bvn13/imdbspider/ImdbSpider.java index e624ce6..cd3ccf0 100644 --- a/core/src/main/java/ru/bvn13/imdbspider/ImdbSpider.java +++ b/core/src/main/java/ru/bvn13/imdbspider/ImdbSpider.java @@ -14,7 +14,10 @@ import ru.bvn13.imdbspider.spider.api.ApiFactory; import java.net.URLEncoder; import java.nio.charset.Charset; +import java.time.Duration; +import java.time.LocalDateTime; import java.util.ArrayList; +import java.util.Date; import java.util.EnumSet; import java.util.List; import java.util.concurrent.ExecutionException; @@ -45,7 +48,7 @@ public class ImdbSpider { } public MovieList searchMovieByTitle(String title) throws ImdbSpiderException { - return searchMovieByTitle(title, 10); + return searchMovieByTitle(title, 0); } public MovieList searchMovieByTitle(String title, int maxCount) throws ImdbSpiderException { @@ -61,16 +64,23 @@ public class ImdbSpider { try { Task t1 = apiFactory.taskByDataType(MovieListDataType.ELEMENTS); t1.setUrl(url); + if (maxCount > 0) { + t1.setRestrictionByCount(maxCount); + } tasks.add(t1); } catch (DataTypeNotSupportedException e) { throw e; } + LocalDateTime dateStart = LocalDateTime.now(); try { manager.processTasks(tasks); } catch (ExecutionException | InterruptedException e) { throw new ImdbSpiderException("Error has been occurred!", e); } + LocalDateTime dateEnd = LocalDateTime.now(); + Duration diff = Duration.between(dateStart, dateEnd); + System.out.println("TIME SPENT: "+(diff.toMillis())+" msec"); MovieListComposer movieListComposer = (MovieListComposer) imdbObjectComposerFactory.getComposer(MovieList.class); diff --git a/core/src/main/java/ru/bvn13/imdbspider/spider/api/v1_0/ApiFactory_1_0.java b/core/src/main/java/ru/bvn13/imdbspider/spider/api/v1_0/ApiFactory_1_0.java index 2cb2c7b..f8839b5 100644 --- a/core/src/main/java/ru/bvn13/imdbspider/spider/api/v1_0/ApiFactory_1_0.java +++ b/core/src/main/java/ru/bvn13/imdbspider/spider/api/v1_0/ApiFactory_1_0.java @@ -93,7 +93,14 @@ public class ApiFactory_1_0 implements ApiFactory { t.setCssSelector("#main > div > div.findSection > table > tbody > tr > td.result_text"); t.setResultType(List.class); t.setPostprocess((task, s) -> { + int count = 0; for (Element element : task.getCssSelectorResult()) { + count++; + if (task.getRestrictionByCount() != null) { + if (count > task.getRestrictionByCount()) { + break; + } + } Element link = element.select("a").first(); if (!defaultMovieDataType.contains(MovieDataType.ID)) { defaultMovieDataType.add(MovieDataType.ID); diff --git a/core/src/main/java/ru/bvn13/imdbspider/spider/tasker/Task.java b/core/src/main/java/ru/bvn13/imdbspider/spider/tasker/Task.java index 6e71d42..d9ebeec 100644 --- a/core/src/main/java/ru/bvn13/imdbspider/spider/tasker/Task.java +++ b/core/src/main/java/ru/bvn13/imdbspider/spider/tasker/Task.java @@ -19,6 +19,8 @@ public class Task { private String cssSelector; private Elements cssSelectorResult; + private Integer restrictionByCount; + private Class resultType; private Object result; @@ -143,4 +145,13 @@ public class Task { this.parentTask = parentTask; return this; } + + public Integer getRestrictionByCount() { + return restrictionByCount; + } + + public Task setRestrictionByCount(Integer restrictionByCount) { + this.restrictionByCount = restrictionByCount; + return this; + } } diff --git a/pom.xml b/pom.xml index 86856f6..08ddda6 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ ru.bvn13.imdbspider parent - 1.0-SNAPSHOT + 0.0.1 core runner diff --git a/runner/pom.xml b/runner/pom.xml index 1aee796..fc6f1a5 100644 --- a/runner/pom.xml +++ b/runner/pom.xml @@ -5,7 +5,7 @@ parent ru.bvn13.imdbspider - 1.0-SNAPSHOT + 0.0.1 4.0.0 @@ -25,7 +25,7 @@ ru.bvn13.imdbspider imdb-spider-core - 1.0-SNAPSHOT + 0.0.1 compile