From 4852cbe5aa01d6272abe5263714c95ca4fee444e Mon Sep 17 00:00:00 2001 From: Vyacheslav Boyko Date: Mon, 14 Jan 2019 11:02:45 +0300 Subject: [PATCH] task for movie search creation moved into ApiFactory --- .../java/ru/bvn13/imdbspider/ImdbSpider.java | 24 +------------ .../imdbspider/spider/api/ApiFactory.java | 4 +++ .../spider/api/v1_0/ApiFactory_1_0.java | 34 +++++++++++++++++++ 3 files changed, 39 insertions(+), 23 deletions(-) diff --git a/core/src/main/java/ru/bvn13/imdbspider/ImdbSpider.java b/core/src/main/java/ru/bvn13/imdbspider/ImdbSpider.java index 1555005..12672e3 100644 --- a/core/src/main/java/ru/bvn13/imdbspider/ImdbSpider.java +++ b/core/src/main/java/ru/bvn13/imdbspider/ImdbSpider.java @@ -1,10 +1,8 @@ package ru.bvn13.imdbspider; import ru.bvn13.imdbspider.exceptions.ImdbSpiderException; -import ru.bvn13.imdbspider.exceptions.api.DataTypeNotSupportedException; import ru.bvn13.imdbspider.imdb.MovieDataType; import ru.bvn13.imdbspider.imdb.MovieList; -import ru.bvn13.imdbspider.imdb.MovieListDataType; import ru.bvn13.imdbspider.spider.api.v1_0.ApiFactory_1_0; import ru.bvn13.imdbspider.spider.composer.ImdbObjectComposerFactory; import ru.bvn13.imdbspider.spider.composer.MovieListComposer; @@ -12,11 +10,8 @@ import ru.bvn13.imdbspider.spider.tasker.Manager; import ru.bvn13.imdbspider.spider.tasker.Task; 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.EnumSet; import java.util.List; import java.util.concurrent.ExecutionException; @@ -26,8 +21,6 @@ import java.util.concurrent.ExecutionException; */ public class ImdbSpider { - private static final String URL_SEARCH_TITLE = "https://www.imdb.com/find?ref_=nv_sr_fn&q={{title}}&s=tt"; - private Manager manager; private ApiFactory apiFactory; @@ -56,22 +49,7 @@ public class ImdbSpider { public MovieList searchMovieByTitle(String title, int maxCount, EnumSet dataTypes) throws ImdbSpiderException { - apiFactory.setMovieDataTypeSet(dataTypes); - - String url = URL_SEARCH_TITLE.replace("{{title}}", URLEncoder.encode(title, Charset.forName("utf-8"))); - - List tasks = new ArrayList<>(); - - try { - Task t1 = apiFactory.taskByDataType(MovieListDataType.ELEMENTS); - t1.setUrl(url); - if (maxCount > 0) { - t1.setRestrictionByCount(maxCount); - } - tasks.add(t1); - } catch (DataTypeNotSupportedException e) { - throw e; - } + List tasks = apiFactory.createTasksForSearchMovieByTitle(title, maxCount, dataTypes); LocalDateTime dateStart = LocalDateTime.now(); try { diff --git a/core/src/main/java/ru/bvn13/imdbspider/spider/api/ApiFactory.java b/core/src/main/java/ru/bvn13/imdbspider/spider/api/ApiFactory.java index 9d2f9f5..a711aa7 100644 --- a/core/src/main/java/ru/bvn13/imdbspider/spider/api/ApiFactory.java +++ b/core/src/main/java/ru/bvn13/imdbspider/spider/api/ApiFactory.java @@ -1,5 +1,6 @@ package ru.bvn13.imdbspider.spider.api; +import ru.bvn13.imdbspider.exceptions.ImdbSpiderException; import ru.bvn13.imdbspider.exceptions.api.DataTypeNotSupportedException; import ru.bvn13.imdbspider.imdb.DataType; import ru.bvn13.imdbspider.imdb.ImdbObject; @@ -7,12 +8,15 @@ import ru.bvn13.imdbspider.imdb.MovieDataType; import ru.bvn13.imdbspider.spider.tasker.Task; import java.util.EnumSet; +import java.util.List; /** * @author boyko_vn at 09.01.2019 */ public interface ApiFactory { + List createTasksForSearchMovieByTitle(String title, int maxCount, EnumSet dataTypes) throws ImdbSpiderException; + Task taskByDataType(DataType dataType) throws DataTypeNotSupportedException; void fillUpImdbObject(ImdbObject imdbObject, Task task); 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 bd5c35a..2d10808 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 @@ -1,13 +1,21 @@ package ru.bvn13.imdbspider.spider.api.v1_0; import org.jsoup.nodes.Element; +import ru.bvn13.imdbspider.exceptions.ImdbSpiderException; import ru.bvn13.imdbspider.exceptions.api.DataTypeNotSupportedException; import ru.bvn13.imdbspider.imdb.*; import ru.bvn13.imdbspider.spider.api.ApiFactory; +import ru.bvn13.imdbspider.spider.composer.MovieListComposer; import ru.bvn13.imdbspider.spider.tasker.Task; +import java.net.URLEncoder; +import java.nio.charset.Charset; +import java.time.Duration; +import java.time.LocalDateTime; +import java.util.ArrayList; import java.util.EnumSet; import java.util.List; +import java.util.concurrent.ExecutionException; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -18,11 +26,37 @@ public class ApiFactory_1_0 implements ApiFactory { private static final String URL_MAIN = "https://www.imdb.com"; + private static final String URL_SEARCH_TITLE = "https://www.imdb.com/find?ref_=nv_sr_fn&q={{title}}&s=tt"; + private final Pattern PATTERN_MOVIE_ID_FROM_MOVIELIST = Pattern.compile("/title/tt(\\d+)/.*"); private EnumSet defaultMovieDataTypeSet = EnumSet.of(MovieDataType.ID, MovieDataType.TITLE, MovieDataType.YEAR); private EnumSet movieDataTypeSet; + @Override + public List createTasksForSearchMovieByTitle(String title, int maxCount, EnumSet dataTypes) throws ImdbSpiderException { + + setMovieDataTypeSet(dataTypes); + + String url = URL_SEARCH_TITLE.replace("{{title}}", URLEncoder.encode(title, Charset.forName("utf-8"))); + + List tasks = new ArrayList<>(); + + try { + Task t1 = taskByDataType(MovieListDataType.ELEMENTS); + t1.setUrl(url); + if (maxCount > 0) { + t1.setRestrictionByCount(maxCount); + } + tasks.add(t1); + } catch (DataTypeNotSupportedException e) { + throw e; + } + + return tasks; + + } + @Override public Task taskByDataType(DataType dataType) throws DataTypeNotSupportedException { if (dataType instanceof MovieDataType) {