task for movie search creation moved into ApiFactory

master
Vyacheslav Boyko 2019-01-14 11:02:45 +03:00
parent 96880149dc
commit 4852cbe5aa
3 changed files with 39 additions and 23 deletions

View File

@ -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<MovieDataType> dataTypes) throws ImdbSpiderException {
apiFactory.setMovieDataTypeSet(dataTypes);
String url = URL_SEARCH_TITLE.replace("{{title}}", URLEncoder.encode(title, Charset.forName("utf-8")));
List<Task> 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<Task> tasks = apiFactory.createTasksForSearchMovieByTitle(title, maxCount, dataTypes);
LocalDateTime dateStart = LocalDateTime.now();
try {

View File

@ -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<Task> createTasksForSearchMovieByTitle(String title, int maxCount, EnumSet<MovieDataType> dataTypes) throws ImdbSpiderException;
Task taskByDataType(DataType dataType) throws DataTypeNotSupportedException;
void fillUpImdbObject(ImdbObject imdbObject, Task task);

View File

@ -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<MovieDataType> defaultMovieDataTypeSet = EnumSet.of(MovieDataType.ID, MovieDataType.TITLE, MovieDataType.YEAR);
private EnumSet<MovieDataType> movieDataTypeSet;
@Override
public List<Task> createTasksForSearchMovieByTitle(String title, int maxCount, EnumSet<MovieDataType> dataTypes) throws ImdbSpiderException {
setMovieDataTypeSet(dataTypes);
String url = URL_SEARCH_TITLE.replace("{{title}}", URLEncoder.encode(title, Charset.forName("utf-8")));
List<Task> 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) {