0
This commit is contained in:
2015-12-02 01:23:17 +00:00
parent 36144aa3d8
commit 70bfaf32a1
10 changed files with 76 additions and 13 deletions

View File

@@ -1,5 +1,5 @@
group = 'kinosearch'
version = '2.0.1'
version = '2.0.3'
apply plugin: 'war'
apply plugin: 'jetty'

View File

@@ -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+"$)");
}
}

View File

@@ -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));
}
}

View File

@@ -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);
}

View File

@@ -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));
}
}

View File

@@ -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

View File

@@ -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()));
}
}

View File

@@ -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);

View File

@@ -23,6 +23,7 @@
<button class="btn btn-primary" type="submit">Ищи!</button>
</span>
</div>
<input class="check-middle" type="checkbox" name="strong" value="1"<#if strong?? && strong = true> checked</#if>> Точное совпадение
</form>
<div class="text-center">
<a href="${basedir}/about.html">О проекте</a> | <a href="mailto:admin@dmitriymx.ru">Написать отзыв</a>

View File

@@ -27,4 +27,8 @@ body {
hr {
border-top-color: #d4d4d4;
}
input.check-middle {
vertical-align: sub;
}