mirror of https://github.com/bvn13/imdb-spider.git
task for movie search creation moved into ApiFactory
parent
96880149dc
commit
4852cbe5aa
|
@ -1,10 +1,8 @@
|
||||||
package ru.bvn13.imdbspider;
|
package ru.bvn13.imdbspider;
|
||||||
|
|
||||||
import ru.bvn13.imdbspider.exceptions.ImdbSpiderException;
|
import ru.bvn13.imdbspider.exceptions.ImdbSpiderException;
|
||||||
import ru.bvn13.imdbspider.exceptions.api.DataTypeNotSupportedException;
|
|
||||||
import ru.bvn13.imdbspider.imdb.MovieDataType;
|
import ru.bvn13.imdbspider.imdb.MovieDataType;
|
||||||
import ru.bvn13.imdbspider.imdb.MovieList;
|
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.api.v1_0.ApiFactory_1_0;
|
||||||
import ru.bvn13.imdbspider.spider.composer.ImdbObjectComposerFactory;
|
import ru.bvn13.imdbspider.spider.composer.ImdbObjectComposerFactory;
|
||||||
import ru.bvn13.imdbspider.spider.composer.MovieListComposer;
|
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.tasker.Task;
|
||||||
import ru.bvn13.imdbspider.spider.api.ApiFactory;
|
import ru.bvn13.imdbspider.spider.api.ApiFactory;
|
||||||
|
|
||||||
import java.net.URLEncoder;
|
|
||||||
import java.nio.charset.Charset;
|
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.EnumSet;
|
import java.util.EnumSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
|
@ -26,8 +21,6 @@ import java.util.concurrent.ExecutionException;
|
||||||
*/
|
*/
|
||||||
public class ImdbSpider {
|
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 Manager manager;
|
||||||
|
|
||||||
private ApiFactory apiFactory;
|
private ApiFactory apiFactory;
|
||||||
|
@ -56,22 +49,7 @@ public class ImdbSpider {
|
||||||
|
|
||||||
public MovieList searchMovieByTitle(String title, int maxCount, EnumSet<MovieDataType> dataTypes) throws ImdbSpiderException {
|
public MovieList searchMovieByTitle(String title, int maxCount, EnumSet<MovieDataType> dataTypes) throws ImdbSpiderException {
|
||||||
|
|
||||||
apiFactory.setMovieDataTypeSet(dataTypes);
|
List<Task> tasks = apiFactory.createTasksForSearchMovieByTitle(title, maxCount, 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;
|
|
||||||
}
|
|
||||||
|
|
||||||
LocalDateTime dateStart = LocalDateTime.now();
|
LocalDateTime dateStart = LocalDateTime.now();
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package ru.bvn13.imdbspider.spider.api;
|
package ru.bvn13.imdbspider.spider.api;
|
||||||
|
|
||||||
|
import ru.bvn13.imdbspider.exceptions.ImdbSpiderException;
|
||||||
import ru.bvn13.imdbspider.exceptions.api.DataTypeNotSupportedException;
|
import ru.bvn13.imdbspider.exceptions.api.DataTypeNotSupportedException;
|
||||||
import ru.bvn13.imdbspider.imdb.DataType;
|
import ru.bvn13.imdbspider.imdb.DataType;
|
||||||
import ru.bvn13.imdbspider.imdb.ImdbObject;
|
import ru.bvn13.imdbspider.imdb.ImdbObject;
|
||||||
|
@ -7,12 +8,15 @@ import ru.bvn13.imdbspider.imdb.MovieDataType;
|
||||||
import ru.bvn13.imdbspider.spider.tasker.Task;
|
import ru.bvn13.imdbspider.spider.tasker.Task;
|
||||||
|
|
||||||
import java.util.EnumSet;
|
import java.util.EnumSet;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author boyko_vn at 09.01.2019
|
* @author boyko_vn at 09.01.2019
|
||||||
*/
|
*/
|
||||||
public interface ApiFactory {
|
public interface ApiFactory {
|
||||||
|
|
||||||
|
List<Task> createTasksForSearchMovieByTitle(String title, int maxCount, EnumSet<MovieDataType> dataTypes) throws ImdbSpiderException;
|
||||||
|
|
||||||
Task taskByDataType(DataType dataType) throws DataTypeNotSupportedException;
|
Task taskByDataType(DataType dataType) throws DataTypeNotSupportedException;
|
||||||
|
|
||||||
void fillUpImdbObject(ImdbObject imdbObject, Task task);
|
void fillUpImdbObject(ImdbObject imdbObject, Task task);
|
||||||
|
|
|
@ -1,13 +1,21 @@
|
||||||
package ru.bvn13.imdbspider.spider.api.v1_0;
|
package ru.bvn13.imdbspider.spider.api.v1_0;
|
||||||
|
|
||||||
import org.jsoup.nodes.Element;
|
import org.jsoup.nodes.Element;
|
||||||
|
import ru.bvn13.imdbspider.exceptions.ImdbSpiderException;
|
||||||
import ru.bvn13.imdbspider.exceptions.api.DataTypeNotSupportedException;
|
import ru.bvn13.imdbspider.exceptions.api.DataTypeNotSupportedException;
|
||||||
import ru.bvn13.imdbspider.imdb.*;
|
import ru.bvn13.imdbspider.imdb.*;
|
||||||
import ru.bvn13.imdbspider.spider.api.ApiFactory;
|
import ru.bvn13.imdbspider.spider.api.ApiFactory;
|
||||||
|
import ru.bvn13.imdbspider.spider.composer.MovieListComposer;
|
||||||
import ru.bvn13.imdbspider.spider.tasker.Task;
|
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.EnumSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.concurrent.ExecutionException;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
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_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 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> defaultMovieDataTypeSet = EnumSet.of(MovieDataType.ID, MovieDataType.TITLE, MovieDataType.YEAR);
|
||||||
private EnumSet<MovieDataType> movieDataTypeSet;
|
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
|
@Override
|
||||||
public Task taskByDataType(DataType dataType) throws DataTypeNotSupportedException {
|
public Task taskByDataType(DataType dataType) throws DataTypeNotSupportedException {
|
||||||
if (dataType instanceof MovieDataType) {
|
if (dataType instanceof MovieDataType) {
|
||||||
|
|
Loading…
Reference in New Issue