diff --git a/build.gradle b/build.gradle index 40101ed..dee2230 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ group = 'kinosearch' -version = '2.0.1' +version = '2.0.3' apply plugin: 'war' apply plugin: 'jetty' diff --git a/src/main/java/kinosearch/core/Tools.java b/src/main/java/kinosearch/core/Tools.java index 89d4f06..ce83fff 100644 --- a/src/main/java/kinosearch/core/Tools.java +++ b/src/main/java/kinosearch/core/Tools.java @@ -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 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+"$)"); + } } diff --git a/src/main/java/kinosearch/core/warez/Hdrezka.java b/src/main/java/kinosearch/core/warez/Hdrezka.java index 363a4ba..b41f3d1 100644 --- a/src/main/java/kinosearch/core/warez/Hdrezka.java +++ b/src/main/java/kinosearch/core/warez/Hdrezka.java @@ -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 outList) { + public void search(String nameKino, List 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)); } } diff --git a/src/main/java/kinosearch/core/warez/KinoWarez.java b/src/main/java/kinosearch/core/warez/KinoWarez.java index 5e735af..14c774d 100644 --- a/src/main/java/kinosearch/core/warez/KinoWarez.java +++ b/src/main/java/kinosearch/core/warez/KinoWarez.java @@ -5,6 +5,6 @@ import kinosearch.core.Kino; import java.util.List; public interface KinoWarez { - void search(String nameKino, List outList); + void search(String nameKino, List outList, boolean strong); void player(String page); } diff --git a/src/main/java/kinosearch/core/warez/Onlinelife.java b/src/main/java/kinosearch/core/warez/Onlinelife.java index e5759fb..b1c0e8c 100644 --- a/src/main/java/kinosearch/core/warez/Onlinelife.java +++ b/src/main/java/kinosearch/core/warez/Onlinelife.java @@ -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 outList) { + public void search(String nameKino, List 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)); } } diff --git a/src/main/java/kinosearch/webapp/servlets/IndexServlet.java b/src/main/java/kinosearch/webapp/servlets/IndexServlet.java index 26f00c1..ec57161 100644 --- a/src/main/java/kinosearch/webapp/servlets/IndexServlet.java +++ b/src/main/java/kinosearch/webapp/servlets/IndexServlet.java @@ -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 model) { + private void search(String search, Map model, boolean strong) { List list = Collections.synchronizedList(new LinkedList<>()); Set 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 diff --git a/src/test/java/test/core/warez/TestHdrezka.java b/src/test/java/test/core/warez/TestHdrezka.java index 2797e2f..6e73a26 100644 --- a/src/test/java/test/core/warez/TestHdrezka.java +++ b/src/test/java/test/core/warez/TestHdrezka.java @@ -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 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())); } + + } diff --git a/src/test/java/test/core/warez/TestOnlinelife.java b/src/test/java/test/core/warez/TestOnlinelife.java index 26f3ac0..ab92b8b 100644 --- a/src/test/java/test/core/warez/TestOnlinelife.java +++ b/src/test/java/test/core/warez/TestOnlinelife.java @@ -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 kinoList = new ArrayList<>(); String titleKino = "рик и морти"; - kinoWarez.search(titleKino, kinoList); + kinoWarez.search(titleKino, kinoList, strong); assertTrue(kinoList.size() > 0); diff --git a/webapp/WEB-INF/header.inc.html b/webapp/WEB-INF/header.inc.html index e82cd74..2eabdc2 100644 --- a/webapp/WEB-INF/header.inc.html +++ b/webapp/WEB-INF/header.inc.html @@ -23,6 +23,7 @@ + checked> Точное совпадение
О проекте | Написать отзыв diff --git a/webapp/css/style.css b/webapp/css/style.css index 33d9599..78fbbd9 100644 --- a/webapp/css/style.css +++ b/webapp/css/style.css @@ -27,4 +27,8 @@ body { hr { border-top-color: #d4d4d4; +} + +input.check-middle { + vertical-align: sub; } \ No newline at end of file