close #1
This commit is contained in:
@@ -10,9 +10,10 @@ import java.io.UnsupportedEncodingException;
|
||||
import java.net.URLEncoder;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class Tools {
|
||||
public static final String VERSION = "2.0.1-SNAPSHOT";
|
||||
public static final String VERSION = "2.0.3";
|
||||
private static Set<KinoWarez> kinoWarezSet;
|
||||
|
||||
public static Browser createBrowser() {
|
||||
@@ -57,4 +58,8 @@ public class Tools {
|
||||
} catch (InterruptedException ignore) {
|
||||
}
|
||||
}
|
||||
|
||||
public static Pattern getStrongPattern(String name) {
|
||||
return Pattern.compile("(^"+name+"[\\s:])|(\\s"+name+"[\\s:])|(\\s"+name+"$)|(^"+name+"$)");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,12 +9,14 @@ import org.jsoup.nodes.Element;
|
||||
import org.jsoup.select.Elements;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class Hdrezka implements KinoWarez {
|
||||
private static final String DOMAIN = "http://hdrezka.me";
|
||||
|
||||
@Override
|
||||
public void search(String nameKino, List<Kino> outList) {
|
||||
public void search(String nameKino, List<Kino> outList, boolean strong) {
|
||||
Browser browser = Tools.createBrowser();
|
||||
browser.setEncoding("UTF-8");
|
||||
|
||||
@@ -22,6 +24,11 @@ public class Hdrezka implements KinoWarez {
|
||||
if (html.isEmpty()) return;
|
||||
|
||||
Document document = Jsoup.parse(html);
|
||||
Pattern pattern = null;
|
||||
if (strong) {
|
||||
String nk = nameKino.toLowerCase();
|
||||
pattern = Tools.getStrongPattern(nk);
|
||||
}
|
||||
|
||||
Elements elements = document.getElementsByClass("b-content__inline_item-cover");
|
||||
for (Element element : elements) {
|
||||
@@ -31,6 +38,13 @@ public class Hdrezka implements KinoWarez {
|
||||
childElement = childElement.child(0);
|
||||
String name = childElement.attr("alt");
|
||||
|
||||
if (strong) {
|
||||
Matcher matcher = pattern.matcher(name.toLowerCase());
|
||||
if (!matcher.find()) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
outList.add(new Kino("[HDREZKA] " + name, url));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,6 +5,6 @@ import kinosearch.core.Kino;
|
||||
import java.util.List;
|
||||
|
||||
public interface KinoWarez {
|
||||
void search(String nameKino, List<Kino> outList);
|
||||
void search(String nameKino, List<Kino> outList, boolean strong);
|
||||
void player(String page);
|
||||
}
|
||||
|
||||
@@ -9,12 +9,14 @@ import org.jsoup.nodes.Element;
|
||||
import org.jsoup.select.Elements;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class Onlinelife implements KinoWarez {
|
||||
private static final String DOMAIN = "http://www.online-life.cc";
|
||||
|
||||
@Override
|
||||
public void search(String nameKino, List<Kino> outList) {
|
||||
public void search(String nameKino, List<Kino> outList, boolean strong) {
|
||||
Browser browser = Tools.createBrowser();
|
||||
browser.setEncoding("windows-1251");
|
||||
|
||||
@@ -23,6 +25,11 @@ public class Onlinelife implements KinoWarez {
|
||||
if (html.isEmpty()) return;
|
||||
|
||||
Document document = Jsoup.parse(html);
|
||||
Pattern pattern = null;
|
||||
if (strong) {
|
||||
String nk = nameKino.toLowerCase();
|
||||
pattern = Tools.getStrongPattern(nk);
|
||||
}
|
||||
|
||||
// ничего не найдено?
|
||||
Elements elements = document.getElementsByClass("info");
|
||||
@@ -34,6 +41,13 @@ public class Onlinelife implements KinoWarez {
|
||||
String name = childElement.text();
|
||||
String url = childElement.attr("href");
|
||||
|
||||
if (strong) {
|
||||
Matcher matcher = pattern.matcher(name.toLowerCase());
|
||||
if (!matcher.find()) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
outList.add(new Kino("[OnlineLife] "+name, url));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -33,7 +33,11 @@ public class IndexServlet extends HttpServlet {
|
||||
model.put("rutext", "Поиск кино по пиратским кинотеатрам");
|
||||
|
||||
if (request.getParameter("search") != null && !request.getParameter("search").trim().isEmpty()) {
|
||||
search(request.getParameter("search"), model);
|
||||
boolean strong = false;
|
||||
if (request.getParameter("strong") != null && request.getParameter("strong").equals("1")) {
|
||||
strong = true;
|
||||
}
|
||||
search(request.getParameter("search"), model, strong);
|
||||
}
|
||||
|
||||
response.setCharacterEncoding("UTF-8");
|
||||
@@ -45,14 +49,14 @@ public class IndexServlet extends HttpServlet {
|
||||
}
|
||||
}
|
||||
|
||||
private void search(String search, Map<String, Object> model) {
|
||||
private void search(String search, Map<String, Object> model, boolean strong) {
|
||||
List<Kino> list = Collections.synchronizedList(new LinkedList<>());
|
||||
Set<KinoWarez> kinoWarezSet = Tools.getKinoWarezSet();
|
||||
|
||||
ThreadGroup threadGroup = new ThreadGroup("");
|
||||
for (KinoWarez kinoWarez : kinoWarezSet) { //TODO на будущее надо ограничить количество одновременных потоков
|
||||
new Thread(threadGroup, () -> {
|
||||
kinoWarez.search(search, list);
|
||||
kinoWarez.search(search, list, strong);
|
||||
}).start();
|
||||
}
|
||||
|
||||
@@ -65,6 +69,7 @@ public class IndexServlet extends HttpServlet {
|
||||
|
||||
model.put("searchtext", search);
|
||||
model.put("resultsearch", list);
|
||||
model.put("strong", strong);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -12,17 +12,28 @@ import static org.junit.Assert.assertTrue;
|
||||
|
||||
public class TestHdrezka {
|
||||
@Test
|
||||
public void test() {
|
||||
public void testNormal() {
|
||||
search(false);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testStrong() {
|
||||
search(true);
|
||||
}
|
||||
|
||||
private void search(boolean strong) {
|
||||
KinoWarez kinoWarez = new Hdrezka();
|
||||
List<Kino> kinoList = new ArrayList<>();
|
||||
|
||||
String titleKino = "рик и морти";
|
||||
kinoWarez.search(titleKino, kinoList);
|
||||
kinoWarez.search(titleKino, kinoList, strong);
|
||||
|
||||
assertTrue(kinoList.size() > 0);
|
||||
|
||||
Kino kino = kinoList.get(0);
|
||||
System.out.printf("\"%s\" (%s)", kino.getName(), kino.getUrl()); //DEBUG
|
||||
// System.out.printf("\"%s\" (%s)", kino.getName(), kino.getUrl()); //DEBUG
|
||||
assertTrue(kino.getName().toLowerCase().contains(titleKino.toLowerCase()));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -12,12 +12,21 @@ import static org.junit.Assert.*;
|
||||
|
||||
public class TestOnlinelife {
|
||||
@Test
|
||||
public void test() {
|
||||
public void testNormal() {
|
||||
search(false);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testStrong() {
|
||||
search(true);
|
||||
}
|
||||
|
||||
private void search(boolean strong) {
|
||||
KinoWarez kinoWarez = new Onlinelife();
|
||||
List<Kino> kinoList = new ArrayList<>();
|
||||
|
||||
String titleKino = "рик и морти";
|
||||
kinoWarez.search(titleKino, kinoList);
|
||||
kinoWarez.search(titleKino, kinoList, strong);
|
||||
|
||||
assertTrue(kinoList.size() > 0);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user