0

Изменение алгоритма выдачи списка кино

This commit is contained in:
2016-03-26 16:50:04 +03:00
parent be54401bf6
commit 987a22b545
7 changed files with 28 additions and 11 deletions

View File

@@ -13,6 +13,10 @@ public class Kino {
return name; return name;
} }
public void setName(String name) {
this.name = name;
}
public String getUrl() { public String getUrl() {
return url; return url;
} }

View File

@@ -8,6 +8,8 @@ import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element; import org.jsoup.nodes.Element;
import org.jsoup.select.Elements; import org.jsoup.select.Elements;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@@ -22,12 +24,12 @@ public class Hdrezka implements KinoWarez {
} }
@Override @Override
public void search(String nameKino, List<Kino> outList, boolean strong) { public List<Kino> search(String nameKino, boolean strong) {
Browser browser = Tools.createBrowser(); Browser browser = Tools.createBrowser();
browser.setEncoding("UTF-8"); browser.setEncoding("UTF-8");
String html = browser.get(DOMAIN + "/?do=search&subaction=search&q=" + Tools.SafeUrlEncode(nameKino, "UTF-8")); String html = browser.get(DOMAIN + "/?do=search&subaction=search&q=" + Tools.SafeUrlEncode(nameKino, "UTF-8"));
if (html.isEmpty()) return; if (html.isEmpty()) return Collections.emptyList();
Document document = Jsoup.parse(html); Document document = Jsoup.parse(html);
Pattern pattern = null; Pattern pattern = null;
@@ -36,6 +38,7 @@ public class Hdrezka implements KinoWarez {
pattern = Tools.getStrongPattern(nk); pattern = Tools.getStrongPattern(nk);
} }
List<Kino> outList = new ArrayList<>();
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) {
Element childElement = element.child(0); Element childElement = element.child(0);
@@ -53,6 +56,8 @@ public class Hdrezka implements KinoWarez {
outList.add(new Kino(name, url)); outList.add(new Kino(name, url));
} }
return outList;
} }
@Override @Override

View File

@@ -6,6 +6,6 @@ import java.util.List;
public interface KinoWarez { public interface KinoWarez {
String getName(); String getName();
void search(String nameKino, List<Kino> outList, boolean strong); List<Kino> search(String nameKino, boolean strong);
String player(String page); String player(String page);
} }

View File

@@ -12,6 +12,8 @@ import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element; import org.jsoup.nodes.Element;
import org.jsoup.select.Elements; import org.jsoup.select.Elements;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@@ -26,13 +28,13 @@ public class Onlinelife implements KinoWarez {
} }
@Override @Override
public void search(String nameKino, List<Kino> outList, boolean strong) { public List<Kino> search(String nameKino, boolean strong) {
Browser browser = Tools.createBrowser(); Browser browser = Tools.createBrowser();
browser.setEncoding("windows-1251"); browser.setEncoding("windows-1251");
String postData = "do=search&subaction=search&mode=simple&story=" + Tools.SafeUrlEncode(nameKino, "windows-1251"); String postData = "do=search&subaction=search&mode=simple&story=" + Tools.SafeUrlEncode(nameKino, "windows-1251");
String html = browser.post(DOMAIN + "/?do=search", postData); String html = browser.post(DOMAIN + "/?do=search", postData);
if (html.isEmpty()) return; if (html.isEmpty()) return Collections.emptyList();
Document document = Jsoup.parse(html); Document document = Jsoup.parse(html);
Pattern pattern = null; Pattern pattern = null;
@@ -43,8 +45,9 @@ public class Onlinelife implements KinoWarez {
// ничего не найдено? // ничего не найдено?
Elements elements = document.getElementsByClass("info"); Elements elements = document.getElementsByClass("info");
if (elements.size() > 0) return; if (elements.size() > 0) return Collections.emptyList();
List<Kino> outList = new ArrayList<>();
elements = document.getElementsByClass("custom-poster"); elements = document.getElementsByClass("custom-poster");
for (Element element : elements) { for (Element element : elements) {
Element childElement = element.child(0); Element childElement = element.child(0);
@@ -61,6 +64,8 @@ public class Onlinelife implements KinoWarez {
name = name.replaceAll("\\[.+", "").trim(); name = name.replaceAll("\\[.+", "").trim();
outList.add(new Kino(name, url)); outList.add(new Kino(name, url));
} }
return outList;
} }
@Override @Override

View File

@@ -53,7 +53,12 @@ public class IndexServlet extends HttpServlet {
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, strong); List<Kino> outList = kinoWarez.search(search, strong);
for (Kino kino : outList) {
kino.setName("[" + kinoWarez.getName() + "] " + kino.getName());
}
list.addAll(outList);
}).start(); }).start();
} }

View File

@@ -23,10 +23,9 @@ public class TestHdrezka {
private void search(boolean strong) { private void search(boolean strong) {
KinoWarez kinoWarez = new Hdrezka(); KinoWarez kinoWarez = new Hdrezka();
List<Kino> kinoList = new ArrayList<>();
String titleKino = "рик и морти"; String titleKino = "рик и морти";
kinoWarez.search(titleKino, kinoList, strong); List<Kino> kinoList = kinoWarez.search(titleKino, strong);
assertTrue(kinoList.size() > 0); assertTrue(kinoList.size() > 0);

View File

@@ -23,10 +23,9 @@ public class TestOnlinelife {
private void search(boolean strong) { private void search(boolean strong) {
KinoWarez kinoWarez = new Onlinelife(); KinoWarez kinoWarez = new Onlinelife();
List<Kino> kinoList = new ArrayList<>();
String titleKino = "рик и морти"; String titleKino = "рик и морти";
kinoWarez.search(titleKino, kinoList, strong); List<Kino> kinoList = kinoWarez.search(titleKino, strong);
assertTrue(kinoList.size() > 0); assertTrue(kinoList.size() > 0);