close #1
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
group = 'kinosearch'
|
group = 'kinosearch'
|
||||||
version = '2.0.1'
|
version = '2.0.3'
|
||||||
|
|
||||||
apply plugin: 'war'
|
apply plugin: 'war'
|
||||||
apply plugin: 'jetty'
|
apply plugin: 'jetty'
|
||||||
|
|||||||
@@ -10,9 +10,10 @@ import java.io.UnsupportedEncodingException;
|
|||||||
import java.net.URLEncoder;
|
import java.net.URLEncoder;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
public class Tools {
|
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;
|
private static Set<KinoWarez> kinoWarezSet;
|
||||||
|
|
||||||
public static Browser createBrowser() {
|
public static Browser createBrowser() {
|
||||||
@@ -57,4 +58,8 @@ public class Tools {
|
|||||||
} catch (InterruptedException ignore) {
|
} 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 org.jsoup.select.Elements;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
public class Hdrezka implements KinoWarez {
|
public class Hdrezka implements KinoWarez {
|
||||||
private static final String DOMAIN = "http://hdrezka.me";
|
private static final String DOMAIN = "http://hdrezka.me";
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void search(String nameKino, List<Kino> outList) {
|
public void search(String nameKino, List<Kino> outList, boolean strong) {
|
||||||
Browser browser = Tools.createBrowser();
|
Browser browser = Tools.createBrowser();
|
||||||
browser.setEncoding("UTF-8");
|
browser.setEncoding("UTF-8");
|
||||||
|
|
||||||
@@ -22,6 +24,11 @@ public class Hdrezka implements KinoWarez {
|
|||||||
if (html.isEmpty()) return;
|
if (html.isEmpty()) return;
|
||||||
|
|
||||||
Document document = Jsoup.parse(html);
|
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");
|
Elements elements = document.getElementsByClass("b-content__inline_item-cover");
|
||||||
for (Element element : elements) {
|
for (Element element : elements) {
|
||||||
@@ -31,6 +38,13 @@ public class Hdrezka implements KinoWarez {
|
|||||||
childElement = childElement.child(0);
|
childElement = childElement.child(0);
|
||||||
String name = childElement.attr("alt");
|
String name = childElement.attr("alt");
|
||||||
|
|
||||||
|
if (strong) {
|
||||||
|
Matcher matcher = pattern.matcher(name.toLowerCase());
|
||||||
|
if (!matcher.find()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
outList.add(new Kino("[HDREZKA] " + name, url));
|
outList.add(new Kino("[HDREZKA] " + name, url));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,6 @@ import kinosearch.core.Kino;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public interface KinoWarez {
|
public interface KinoWarez {
|
||||||
void search(String nameKino, List<Kino> outList);
|
void search(String nameKino, List<Kino> outList, boolean strong);
|
||||||
void player(String page);
|
void player(String page);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,12 +9,14 @@ import org.jsoup.nodes.Element;
|
|||||||
import org.jsoup.select.Elements;
|
import org.jsoup.select.Elements;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
public class Onlinelife implements KinoWarez {
|
public class Onlinelife implements KinoWarez {
|
||||||
private static final String DOMAIN = "http://www.online-life.cc";
|
private static final String DOMAIN = "http://www.online-life.cc";
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void search(String nameKino, List<Kino> outList) {
|
public void search(String nameKino, List<Kino> outList, boolean strong) {
|
||||||
Browser browser = Tools.createBrowser();
|
Browser browser = Tools.createBrowser();
|
||||||
browser.setEncoding("windows-1251");
|
browser.setEncoding("windows-1251");
|
||||||
|
|
||||||
@@ -23,6 +25,11 @@ public class Onlinelife implements KinoWarez {
|
|||||||
if (html.isEmpty()) return;
|
if (html.isEmpty()) return;
|
||||||
|
|
||||||
Document document = Jsoup.parse(html);
|
Document document = Jsoup.parse(html);
|
||||||
|
Pattern pattern = null;
|
||||||
|
if (strong) {
|
||||||
|
String nk = nameKino.toLowerCase();
|
||||||
|
pattern = Tools.getStrongPattern(nk);
|
||||||
|
}
|
||||||
|
|
||||||
// ничего не найдено?
|
// ничего не найдено?
|
||||||
Elements elements = document.getElementsByClass("info");
|
Elements elements = document.getElementsByClass("info");
|
||||||
@@ -34,6 +41,13 @@ public class Onlinelife implements KinoWarez {
|
|||||||
String name = childElement.text();
|
String name = childElement.text();
|
||||||
String url = childElement.attr("href");
|
String url = childElement.attr("href");
|
||||||
|
|
||||||
|
if (strong) {
|
||||||
|
Matcher matcher = pattern.matcher(name.toLowerCase());
|
||||||
|
if (!matcher.find()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
outList.add(new Kino("[OnlineLife] "+name, url));
|
outList.add(new Kino("[OnlineLife] "+name, url));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,7 +33,11 @@ public class IndexServlet extends HttpServlet {
|
|||||||
model.put("rutext", "Поиск кино по пиратским кинотеатрам");
|
model.put("rutext", "Поиск кино по пиратским кинотеатрам");
|
||||||
|
|
||||||
if (request.getParameter("search") != null && !request.getParameter("search").trim().isEmpty()) {
|
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");
|
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<>());
|
List<Kino> list = Collections.synchronizedList(new LinkedList<>());
|
||||||
Set<KinoWarez> kinoWarezSet = Tools.getKinoWarezSet();
|
Set<KinoWarez> kinoWarezSet = Tools.getKinoWarezSet();
|
||||||
|
|
||||||
ThreadGroup threadGroup = new ThreadGroup("");
|
ThreadGroup threadGroup = new ThreadGroup("");
|
||||||
for (KinoWarez kinoWarez : kinoWarezSet) { //TODO на будущее надо ограничить количество одновременных потоков
|
for (KinoWarez kinoWarez : kinoWarezSet) { //TODO на будущее надо ограничить количество одновременных потоков
|
||||||
new Thread(threadGroup, () -> {
|
new Thread(threadGroup, () -> {
|
||||||
kinoWarez.search(search, list);
|
kinoWarez.search(search, list, strong);
|
||||||
}).start();
|
}).start();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -65,6 +69,7 @@ public class IndexServlet extends HttpServlet {
|
|||||||
|
|
||||||
model.put("searchtext", search);
|
model.put("searchtext", search);
|
||||||
model.put("resultsearch", list);
|
model.put("resultsearch", list);
|
||||||
|
model.put("strong", strong);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -12,17 +12,28 @@ import static org.junit.Assert.assertTrue;
|
|||||||
|
|
||||||
public class TestHdrezka {
|
public class TestHdrezka {
|
||||||
@Test
|
@Test
|
||||||
public void test() {
|
public void testNormal() {
|
||||||
|
search(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testStrong() {
|
||||||
|
search(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void search(boolean strong) {
|
||||||
KinoWarez kinoWarez = new Hdrezka();
|
KinoWarez kinoWarez = new Hdrezka();
|
||||||
List<Kino> kinoList = new ArrayList<>();
|
List<Kino> kinoList = new ArrayList<>();
|
||||||
|
|
||||||
String titleKino = "рик и морти";
|
String titleKino = "рик и морти";
|
||||||
kinoWarez.search(titleKino, kinoList);
|
kinoWarez.search(titleKino, kinoList, strong);
|
||||||
|
|
||||||
assertTrue(kinoList.size() > 0);
|
assertTrue(kinoList.size() > 0);
|
||||||
|
|
||||||
Kino kino = kinoList.get(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()));
|
assertTrue(kino.getName().toLowerCase().contains(titleKino.toLowerCase()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,12 +12,21 @@ import static org.junit.Assert.*;
|
|||||||
|
|
||||||
public class TestOnlinelife {
|
public class TestOnlinelife {
|
||||||
@Test
|
@Test
|
||||||
public void test() {
|
public void testNormal() {
|
||||||
|
search(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testStrong() {
|
||||||
|
search(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void search(boolean strong) {
|
||||||
KinoWarez kinoWarez = new Onlinelife();
|
KinoWarez kinoWarez = new Onlinelife();
|
||||||
List<Kino> kinoList = new ArrayList<>();
|
List<Kino> kinoList = new ArrayList<>();
|
||||||
|
|
||||||
String titleKino = "рик и морти";
|
String titleKino = "рик и морти";
|
||||||
kinoWarez.search(titleKino, kinoList);
|
kinoWarez.search(titleKino, kinoList, strong);
|
||||||
|
|
||||||
assertTrue(kinoList.size() > 0);
|
assertTrue(kinoList.size() > 0);
|
||||||
|
|
||||||
|
|||||||
@@ -23,6 +23,7 @@
|
|||||||
<button class="btn btn-primary" type="submit">Ищи!</button>
|
<button class="btn btn-primary" type="submit">Ищи!</button>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
<input class="check-middle" type="checkbox" name="strong" value="1"<#if strong?? && strong = true> checked</#if>> Точное совпадение
|
||||||
</form>
|
</form>
|
||||||
<div class="text-center">
|
<div class="text-center">
|
||||||
<a href="${basedir}/about.html">О проекте</a> | <a href="mailto:admin@dmitriymx.ru">Написать отзыв</a>
|
<a href="${basedir}/about.html">О проекте</a> | <a href="mailto:admin@dmitriymx.ru">Написать отзыв</a>
|
||||||
|
|||||||
@@ -28,3 +28,7 @@ body {
|
|||||||
hr {
|
hr {
|
||||||
border-top-color: #d4d4d4;
|
border-top-color: #d4d4d4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
input.check-middle {
|
||||||
|
vertical-align: sub;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user