From 17d583bbf8de6216e15e6384ada4839aaf206647 Mon Sep 17 00:00:00 2001 From: dengyuhan <464958567@qq.com> Date: Fri, 9 Mar 2018 13:36:35 +0800 Subject: [PATCH 01/10] =?UTF-8?q?=E5=9F=BA=E6=9C=AC=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 87 ++++++++++++ .../magnetw/controller/BaseController.java | 32 +++++ .../magnetw/controller/MagnetWController.java | 131 +++++++++++++++++ .../dyhdyh/magnetw/filter/EncodingFilter.java | 75 ++++++++++ .../com/dyhdyh/magnetw/model/MagnetInfo.java | 66 +++++++++ .../com/dyhdyh/magnetw/model/MagnetRule.java | 35 +++++ .../magnetw/service/MagnetWService.java | 132 ++++++++++++++++++ .../com/dyhdyh/magnetw/util/GsonUtil.java | 19 +++ src/main/resources/ehcache.xml | 44 ++++++ src/main/resources/rule.json | 95 +++++++++++++ .../webapp/WEB-INF/dispatcher-servlet.xml | 40 ++++++ src/main/webapp/WEB-INF/views/error.jsp | 17 +++ .../webapp/WEB-INF/views/search_result.jsp | 127 +++++++++++++++++ src/main/webapp/WEB-INF/web.xml | 73 ++++++++++ src/main/webapp/index.jsp | 5 + src/main/webapp/resources/css/base.css | 11 ++ .../webapp/resources/css/search_result.css | 34 +++++ src/main/webapp/resources/js/search_result.js | 94 +++++++++++++ target/classes/ehcache.xml | 44 ++++++ target/classes/rule.json | 95 +++++++++++++ target/magnetw/META-INF/MANIFEST.MF | 5 + target/magnetw/WEB-INF/classes/ehcache.xml | 44 ++++++ target/magnetw/WEB-INF/classes/rule.json | 95 +++++++++++++ target/magnetw/WEB-INF/dispatcher-servlet.xml | 40 ++++++ target/magnetw/WEB-INF/views/error.jsp | 17 +++ .../magnetw/WEB-INF/views/search_result.jsp | 127 +++++++++++++++++ target/magnetw/WEB-INF/web.xml | 73 ++++++++++ target/magnetw/index.jsp | 5 + target/magnetw/resources/css/base.css | 11 ++ .../magnetw/resources/css/search_result.css | 34 +++++ target/magnetw/resources/js/search_result.js | 94 +++++++++++++ 31 files changed, 1801 insertions(+) create mode 100644 pom.xml create mode 100644 src/main/java/com/dyhdyh/magnetw/controller/BaseController.java create mode 100644 src/main/java/com/dyhdyh/magnetw/controller/MagnetWController.java create mode 100644 src/main/java/com/dyhdyh/magnetw/filter/EncodingFilter.java create mode 100644 src/main/java/com/dyhdyh/magnetw/model/MagnetInfo.java create mode 100644 src/main/java/com/dyhdyh/magnetw/model/MagnetRule.java create mode 100644 src/main/java/com/dyhdyh/magnetw/service/MagnetWService.java create mode 100644 src/main/java/com/dyhdyh/magnetw/util/GsonUtil.java create mode 100644 src/main/resources/ehcache.xml create mode 100644 src/main/resources/rule.json create mode 100644 src/main/webapp/WEB-INF/dispatcher-servlet.xml create mode 100644 src/main/webapp/WEB-INF/views/error.jsp create mode 100644 src/main/webapp/WEB-INF/views/search_result.jsp create mode 100644 src/main/webapp/WEB-INF/web.xml create mode 100644 src/main/webapp/index.jsp create mode 100644 src/main/webapp/resources/css/base.css create mode 100644 src/main/webapp/resources/css/search_result.css create mode 100644 src/main/webapp/resources/js/search_result.js create mode 100644 target/classes/ehcache.xml create mode 100644 target/classes/rule.json create mode 100644 target/magnetw/META-INF/MANIFEST.MF create mode 100644 target/magnetw/WEB-INF/classes/ehcache.xml create mode 100644 target/magnetw/WEB-INF/classes/rule.json create mode 100644 target/magnetw/WEB-INF/dispatcher-servlet.xml create mode 100644 target/magnetw/WEB-INF/views/error.jsp create mode 100644 target/magnetw/WEB-INF/views/search_result.jsp create mode 100644 target/magnetw/WEB-INF/web.xml create mode 100644 target/magnetw/index.jsp create mode 100644 target/magnetw/resources/css/base.css create mode 100644 target/magnetw/resources/css/search_result.css create mode 100644 target/magnetw/resources/js/search_result.js diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..4e852fb --- /dev/null +++ b/pom.xml @@ -0,0 +1,87 @@ + + 4.0.0 + com.dyhdyh + magnetw + war + 1.0.0 + magnetW + http://maven.apache.org + + + + org.jsoup + jsoup + 1.11.2 + + + net.sourceforge.htmlcleaner + htmlcleaner + 2.21 + + + + + com.google.code.gson + gson + 2.8.2 + + + + + javax.servlet.jsp.jstl + jstl-api + 1.2 + + + + javax.el + javax.el-api + 3.0.0 + + + taglibs + standard + 1.1.2 + + + + + + org.springframework + spring-web + 4.3.1.RELEASE + + + org.springframework + spring-webmvc + 4.3.1.RELEASE + + + org.springframework + spring-context-support + 4.3.1.RELEASE + + + + + net.sf.ehcache + ehcache + 2.10.4 + + + + magnetw + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.6 + 1.6 + + + + + diff --git a/src/main/java/com/dyhdyh/magnetw/controller/BaseController.java b/src/main/java/com/dyhdyh/magnetw/controller/BaseController.java new file mode 100644 index 0000000..5c981d8 --- /dev/null +++ b/src/main/java/com/dyhdyh/magnetw/controller/BaseController.java @@ -0,0 +1,32 @@ +package com.dyhdyh.magnetw.controller; + +import org.springframework.ui.Model; +import org.springframework.util.StringUtils; + +import java.net.SocketTimeoutException; + +/** + * author dengyuhan + * created 2018/3/7 14:19 + */ +public class BaseController { + + protected String error(Model model, Throwable e) { + return error(model, null, e); + } + + protected String error(Model model, String message, Throwable e) { + String defaultMessage = "未知错误"; + if (e != null) { + e.printStackTrace(); + if (e instanceof SocketTimeoutException) { + defaultMessage = "请求超时"; + } + } + if (StringUtils.isEmpty(message)) { + message = defaultMessage; + } + model.addAttribute("error_message", message); + return "error"; + } +} diff --git a/src/main/java/com/dyhdyh/magnetw/controller/MagnetWController.java b/src/main/java/com/dyhdyh/magnetw/controller/MagnetWController.java new file mode 100644 index 0000000..7a19ff3 --- /dev/null +++ b/src/main/java/com/dyhdyh/magnetw/controller/MagnetWController.java @@ -0,0 +1,131 @@ +package com.dyhdyh.magnetw.controller; + +import com.dyhdyh.magnetw.model.MagnetInfo; +import com.dyhdyh.magnetw.model.MagnetRule; +import com.dyhdyh.magnetw.service.MagnetWService; +import com.dyhdyh.magnetw.util.GsonUtil; +import com.google.gson.reflect.TypeToken; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.util.StringUtils; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.io.InputStream; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import javax.servlet.http.HttpServletRequest; + +/** + * author dengyuhan + * created 2018/3/6 16:03 + */ +@Controller +@RequestMapping("") +public class MagnetWController extends BaseController { + + @Autowired + MagnetWService magnetWService; + + private Map magnetRuleMap; + private List sites; + + + /** + * 搜索 + * + * @param model + * @param site + * @param keyword + * @param page + * @return + */ + @RequestMapping(value = {"/", "search"}, method = RequestMethod.GET) + public String submitSearchMagnet(Model model, @RequestParam(required = false) String site, @RequestParam(required = false) String keyword, @RequestParam(required = false) Integer page) { + try { + List siteNames = getSiteNames(); + if (StringUtils.isEmpty(site)) { + site = siteNames.get(0); + } + int newPage = magnetWService.transformPage(page); + //model.addAttribute("title", String.format("%s - %s", site, keyword)); + model.addAttribute("current_site", site); + model.addAttribute("keyword", keyword); + model.addAttribute("current_page", newPage); + model.addAttribute("site_list", siteNames); + return "search_result"; + } catch (Exception e) { + return error(model, e); + } + } + + + /** + * @param model + * @param site + * @param keyword + * @param page + * @return + */ + @RequestMapping(value = "search-json", method = {RequestMethod.GET, RequestMethod.POST}) + @ResponseBody + public List submitSearchMagnetJson(Model model, HttpServletRequest request, @RequestParam(required = false) String site, @RequestParam(required = false) String keyword, @RequestParam(required = false) Integer page) { + try { + List siteNames = getSiteNames(); + if (StringUtils.isEmpty(site)) { + site = siteNames.get(0); + } + List infos = null; + int newPage = magnetWService.transformPage(page); + if (!StringUtils.isEmpty(keyword)) { + MagnetRule rule = getMagnetRule().get(site); + infos = magnetWService.parser(rule, keyword, newPage); + } + return infos; + } catch (Exception e) { + error(model, e); + return new ArrayList(); + } + + + } + + /** + * 网站的筛选规则 + * + * @return + */ + private Map getMagnetRule() { + if (magnetRuleMap == null) { + magnetRuleMap = new LinkedHashMap(); + + InputStream inputStream = getClass().getResourceAsStream("/rule.json"); + List rules = GsonUtil.fromJson(inputStream, new TypeToken>() { + }); + for (MagnetRule rule : rules) { + magnetRuleMap.put(rule.getSite(), rule); + } + } + return magnetRuleMap; + } + + + private List getSiteNames() { + if (sites == null) { + sites = new ArrayList(); + Set> entries = getMagnetRule().entrySet(); + for (Map.Entry entry : entries) { + sites.add(entry.getKey()); + } + } + return sites; + } +} diff --git a/src/main/java/com/dyhdyh/magnetw/filter/EncodingFilter.java b/src/main/java/com/dyhdyh/magnetw/filter/EncodingFilter.java new file mode 100644 index 0000000..c845787 --- /dev/null +++ b/src/main/java/com/dyhdyh/magnetw/filter/EncodingFilter.java @@ -0,0 +1,75 @@ +package com.dyhdyh.magnetw.filter; + +import org.springframework.cglib.proxy.InvocationHandler; +import org.springframework.cglib.proxy.Proxy; +import org.springframework.web.filter.OncePerRequestFilter; + +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.lang.reflect.Method; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * author dengyuhan + * created 2018/3/8 18:05 + */ +public class EncodingFilter extends OncePerRequestFilter { + private String encoding; + + public void setEncoding(String encoding) { + this.encoding = encoding; + } + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) + throws ServletException, IOException { + // 设置请求响应字符编码 + request.setCharacterEncoding(encoding); + response.setCharacterEncoding(encoding); + + // 传递给目标servlet或jsp的实际上是动态代理的对象,而不是原始的HttpServletRequest对象 + request = (HttpServletRequest) Proxy.newProxyInstance(request.getClass().getClassLoader(), request.getClass().getInterfaces(), new MyInvacationHandler(request)); + chain.doFilter(request, response); + } + + class MyInvacationHandler implements InvocationHandler { + private HttpServletRequest request; + MyInvacationHandler(HttpServletRequest request){ + this.request=request; + } + + @Override + public Object invoke(Object proxy, Method method, Object[] args) throws Throwable{ + if (method.getName().equals("getParameter")) { + String value = request.getParameter((String) args[0]); + try { + if (value != null) { + value = new String(value.getBytes("ISO-8859-1"), encoding); + } + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + return value; + } else if (method.getName().equals("getParameterValues")) { + String[] values = request.getParameterValues((String) args[0]); + if (values != null) { + for (int i = 0; i < values.length; i++) { + try { + values[i] = new String(values[i].getBytes("ISO-8859-1"), encoding); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } + } + return values; + } else { + return method.invoke(request, args); + } + } + + } +} \ No newline at end of file diff --git a/src/main/java/com/dyhdyh/magnetw/model/MagnetInfo.java b/src/main/java/com/dyhdyh/magnetw/model/MagnetInfo.java new file mode 100644 index 0000000..5a6d01c --- /dev/null +++ b/src/main/java/com/dyhdyh/magnetw/model/MagnetInfo.java @@ -0,0 +1,66 @@ +package com.dyhdyh.magnetw.model; + +import java.io.Serializable; + +/** + * author dengyuhan + * created 2018/3/7 11:29 + */ +public class MagnetInfo implements Serializable{ + + private String group; + private String magnet; + private String name; + private String size; + private String count; + + private String resolution;//清晰度 + + public String getResolution() { + return resolution; + } + + public void setResolution(String resolution) { + this.resolution = resolution; + } + + public String getGroup() { + return group; + } + + public void setGroup(String group) { + this.group = group; + } + + public String getMagnet() { + return magnet; + } + + public void setMagnet(String magnet) { + this.magnet = magnet; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getSize() { + return size; + } + + public void setSize(String size) { + this.size = size; + } + + public String getCount() { + return count; + } + + public void setCount(String count) { + this.count = count; + } +} diff --git a/src/main/java/com/dyhdyh/magnetw/model/MagnetRule.java b/src/main/java/com/dyhdyh/magnetw/model/MagnetRule.java new file mode 100644 index 0000000..052b708 --- /dev/null +++ b/src/main/java/com/dyhdyh/magnetw/model/MagnetRule.java @@ -0,0 +1,35 @@ +package com.dyhdyh.magnetw.model; + +/** + * author dengyuhan + * created 2018/3/7 11:52 + */ +public class MagnetRule extends MagnetInfo{ + private String source; + private String site; + private String waiting; + + public String getSource() { + return source; + } + + public void setSource(String source) { + this.source = source; + } + + public String getSite() { + return site; + } + + public void setSite(String site) { + this.site = site; + } + + public String getWaiting() { + return waiting; + } + + public void setWaiting(String waiting) { + this.waiting = waiting; + } +} diff --git a/src/main/java/com/dyhdyh/magnetw/service/MagnetWService.java b/src/main/java/com/dyhdyh/magnetw/service/MagnetWService.java new file mode 100644 index 0000000..81c9e14 --- /dev/null +++ b/src/main/java/com/dyhdyh/magnetw/service/MagnetWService.java @@ -0,0 +1,132 @@ +package com.dyhdyh.magnetw.service; + +import com.dyhdyh.magnetw.model.MagnetInfo; +import com.dyhdyh.magnetw.model.MagnetRule; + +import org.htmlcleaner.CleanerProperties; +import org.htmlcleaner.DomSerializer; +import org.htmlcleaner.HtmlCleaner; +import org.jsoup.Jsoup; +import org.springframework.cache.annotation.Cacheable; +import org.springframework.stereotype.Service; +import org.w3c.dom.Document; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Pattern; + +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.xpath.XPath; +import javax.xml.xpath.XPathConstants; +import javax.xml.xpath.XPathExpressionException; +import javax.xml.xpath.XPathFactory; + +/** + * author dengyuhan + * created 2018/3/6 16:04 + */ +@Service +public class MagnetWService { + @Cacheable(value = "magnetList", key = "T(String).format('%s-%s-%d',#rule.source,#keyword,#page)") + public List parser(MagnetRule rule, String keyword, int page) throws IOException, XPathExpressionException, ParserConfigurationException { + return parser(rule.getSource(), keyword, page, rule.getGroup(), rule.getMagnet(), rule.getName(), rule.getSize(), rule.getCount()); + } + + @Cacheable(value = "magnetList", key = "T(String).format('%s-%s-%d',#url,#keyword,#page)") + public List parser(String url, String keyword, int page, String group, String magnet, String name, String size, String count) throws IOException, XPathExpressionException, ParserConfigurationException { + String newUrl = transformUrl(url, keyword, page); + String html = Jsoup.connect(newUrl).get().body().html(); + XPath xPath = XPathFactory.newInstance().newXPath(); + Document dom = new DomSerializer(new CleanerProperties()).createDOM(new HtmlCleaner().clean(html)); + + NodeList result = (NodeList) xPath.evaluate(group, dom, XPathConstants.NODESET); + List infos = new ArrayList(); + for (int i = 0; i < result.getLength(); i++) { + Node node = result.item(i); + if (node != null) { + MagnetInfo info = new MagnetInfo(); + Node magnetNote = (Node) xPath.evaluate(magnet, node, XPathConstants.NODE); + //磁力链 + String magnetValue = magnetNote.getNodeValue(); + info.setMagnet(transformMagnet(magnetValue)); + //名称 + String nameValue = ((Node) xPath.evaluate(name, node, XPathConstants.NODE)).getTextContent(); + info.setName(nameValue); + //大小 + String sizeValue = ((Node) xPath.evaluate(size, node, XPathConstants.NODE)).getTextContent(); + info.setSize(sizeValue); + //时间 + String countValue = ((Node) xPath.evaluate(count, node, XPathConstants.NODE)).getTextContent(); + info.setCount(countValue); + //一些加工的额外信息 + String resolution = transformResolution(nameValue); + info.setResolution(resolution); + + infos.add(info); + } + } + return infos; + } + + + public int transformPage(Integer page) { + return page == null || page <= 0 ? 1 : page; + } + + /** + * 数据源链接转换 + * + * @param url + * @param keyword + * @param page + * @return + */ + private String transformUrl(String url, String keyword, int page) { + return url.replaceFirst("XXX", keyword) + .replaceFirst("PPP", String.valueOf(page)); + } + + /** + * 磁力链转换 + * + * @param url + * @return + */ + private String transformMagnet(String url) { + String regex = "magnet:?[^\\\"]+"; + boolean matches = Pattern.matches(regex, url); + if (matches) { + return url; + } else { + String newMagnet; + try { + int startIndex = url.lastIndexOf("/") + 1; + int htmlIndex = url.lastIndexOf(".html"); + newMagnet = url.substring(startIndex, htmlIndex); + } catch (Exception e) { + e.printStackTrace(); + newMagnet = url; + } + return String.format("magnet:?xt=urn:btih:%s", newMagnet); + } + } + + + private String transformResolution(String name) { + String regex720 = ".*(1280|720p|720P).*"; + String regex1080 = ".*(1920|1080p|1080P).*"; + boolean matches720 = Pattern.matches(regex720, name); + if (matches720) { + return "720P"; + } + boolean matches1080 = Pattern.matches(regex1080, name); + if (matches1080) { + return "1080P"; + } + return ""; + } + +} diff --git a/src/main/java/com/dyhdyh/magnetw/util/GsonUtil.java b/src/main/java/com/dyhdyh/magnetw/util/GsonUtil.java new file mode 100644 index 0000000..8c72b06 --- /dev/null +++ b/src/main/java/com/dyhdyh/magnetw/util/GsonUtil.java @@ -0,0 +1,19 @@ +package com.dyhdyh.magnetw.util; + +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; + +import java.io.InputStream; +import java.io.InputStreamReader; + +/** + * author dengyuhan + * created 2018/3/7 14:00 + */ +public class GsonUtil { + private static Gson gson = new Gson(); + + public static T fromJson(InputStream inputStream, TypeToken token) { + return gson.fromJson(new InputStreamReader(inputStream), token.getType()); + } +} diff --git a/src/main/resources/ehcache.xml b/src/main/resources/ehcache.xml new file mode 100644 index 0000000..b04d194 --- /dev/null +++ b/src/main/resources/ehcache.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/rule.json b/src/main/resources/rule.json new file mode 100644 index 0000000..6d8ebe7 --- /dev/null +++ b/src/main/resources/rule.json @@ -0,0 +1,95 @@ + [ + { + "site":"AOYOSO", + "waiting":"0", + "group":"//div[@class='col-md-8']//div[@class='panel panel-default']", + "magnet":".//a//@href", + "name":".//a", + "size":".//table//tr//td[2]", + "count":".//table//tr//td[1]", + "source":"http://www.aoyoso.com/search/XXX_ctime_PPP.html" + }, + { + "site":"磁力吧", + "waiting":"0", + "group":"//div[@class='search-item']", + "magnet":".//a//@href", + "name":".//a", + "size":".//span[3]//b", + "count":".//span[2]//b", + "source":"http://www.ciliba.org/s/XXX_rel_PPP.html" + }, + { + "site":"种子搜", + "waiting":"0", + "group":"//table[@class='table table-bordered table-striped']", + "magnet":".//a//@href", + "name":".//tbody//a", + "size":".//tbody//tr//td[2]//strong", + "count":".//tbody//tr//td[1]//strong", + "source":"http://www.zhongziso.com/list/XXX/PPP" + }, + { + "site":"SOBT", + "waiting":"0", + "group":"//div[@class='search-list col-md-8']//div[@class='search-item']", + "magnet":".//a//@href", + "name":".//a[@target='_blank']", + "size":".//div[@class='item-bar']//span[2]//b", + "count":".//div[@class='item-bar']//span[1]//b", + "source":"http://www.sobt5.org/q/XXX_PPP.html" + }, + { + "site":"BT岛", + "waiting":"0", + "group":"//ul[@class='mlist']//li", + "magnet":".//a//@href", + "name":".//a[@target='_blank']", + "size":".//dt//span[1]", + "count":".//dt//span[2]", + "source":"http://www.btdao5.com/list/XXX-s1d-PPP.html" + }, + { + "site":"bt177", + "waiting":"0", + "group":"//li", + "magnet":".//a//@href", + "name":".//a", + "size":".//span[1]", + "count":".//span[2]", + "source":"http://www.bt177.net/word/XXX_PPP.html" + }, + { + "site":"zhongzidi", + "waiting":"0", + "group":"//div[@class='panel-body']//ul", + "magnet":".//dl[2]/a[1]//@href", + "name":".//a", + "size":".//dl[1]/dd[2]", + "count":".//dl[1]/dd[3]", + "source":"https://m.zhongzidi.com/list/XXX/PPP" + + }, + { + "site":"cililiana", + "waiting":"0", + "group":"//ul[@class='mlist']//li", + "magnet":".//div[2]/a[1]//@href", + "name":".//div[1]/a", + "size":".//dl/dt/span[1]", + "count":".//dl/dt/span[3]", + "source":"http://cililiana.com/list/XXX/PPP.html" + + }, + { + "site":"屌丝搜", + "waiting":"0", + "group":"//ul[@class='mlist']//li", + "magnet":".//div[2]/a[1]//@href", + "name":".//div[1]/a", + "size":".//dl/dt/span[1]", + "count":".//dl/dt/span[3]", + "source":"http://www.diaosisou.org/list/XXX/PPP" + + } + ] diff --git a/src/main/webapp/WEB-INF/dispatcher-servlet.xml b/src/main/webapp/WEB-INF/dispatcher-servlet.xml new file mode 100644 index 0000000..2381d10 --- /dev/null +++ b/src/main/webapp/WEB-INF/dispatcher-servlet.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/webapp/WEB-INF/views/error.jsp b/src/main/webapp/WEB-INF/views/error.jsp new file mode 100644 index 0000000..1522c26 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/error.jsp @@ -0,0 +1,17 @@ +<%-- + Created by IntelliJ IDEA. + User: dengyuhan + Date: 2018/3/7 + Time: 14:18 + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@ page isELIgnored="false" %> + + + 出错了 + + +${error_message} + + diff --git a/src/main/webapp/WEB-INF/views/search_result.jsp b/src/main/webapp/WEB-INF/views/search_result.jsp new file mode 100644 index 0000000..d3e69a2 --- /dev/null +++ b/src/main/webapp/WEB-INF/views/search_result.jsp @@ -0,0 +1,127 @@ +<%-- + Created by IntelliJ IDEA. + User: dengyuhan + Date: 2018/3/7 + Time: 14:18 + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@ page isELIgnored="false" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> + + + <%----%> + + ${keyword} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${site} + + + + + ${site} + + + + + + + + + 加载中... + + + + + <%-- + + + --%> + + + + 点击加载更多 + + + + + +<%-- + + + + ${info.name} + ${info.size} + ${info.resolution} + ${info.count} + + + + + + + + + + + + 上一页 + + ${current_page} + 下一页 + + + +--%> + + + + + + + + diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..345591b --- /dev/null +++ b/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,73 @@ + + + + + + + contextConfigLocation + /WEB-INF/dispatcher-servlet.xml + + + org.springframework.web.context.ContextLoaderListener + + + dispatcher + org.springframework.web.servlet.DispatcherServlet + 1 + + + dispatcher + / + + + + search + + + + characterEncodingFilter + org.springframework.web.filter.CharacterEncodingFilter + + encoding + UTF-8 + + + forceEncoding + true + + + + characterEncodingFilter + /* + + diff --git a/src/main/webapp/index.jsp b/src/main/webapp/index.jsp new file mode 100644 index 0000000..c38169b --- /dev/null +++ b/src/main/webapp/index.jsp @@ -0,0 +1,5 @@ + + +Hello World! + + diff --git a/src/main/webapp/resources/css/base.css b/src/main/webapp/resources/css/base.css new file mode 100644 index 0000000..f9a9beb --- /dev/null +++ b/src/main/webapp/resources/css/base.css @@ -0,0 +1,11 @@ +.container-margin-top { + margin-top: 3%; +} + +.td-center { + text-align: center; +} + +.no-padding { + padding: 0px; +} \ No newline at end of file diff --git a/src/main/webapp/resources/css/search_result.css b/src/main/webapp/resources/css/search_result.css new file mode 100644 index 0000000..4f4f5f6 --- /dev/null +++ b/src/main/webapp/resources/css/search_result.css @@ -0,0 +1,34 @@ +.search_form { +} + +.search_result_pager { + float: right +} + +.td-count { + width: 10%; +} + +.td-page-action { + cursor: pointer; +} + +.td-page-number { + margin-left: 10px; + margin-right: 10px; +} +.search_site{ + margin-top: 1.5%; + margin-bottom: 1.5%; +} + +#tr_load_more{ + cursor: pointer; +} + +.container-margin-bottom { + margin-bottom: 1.5%; +} +.loader div{ + background-color: #D32F2F; +} \ No newline at end of file diff --git a/src/main/webapp/resources/js/search_result.js b/src/main/webapp/resources/js/search_result.js new file mode 100644 index 0000000..6824c91 --- /dev/null +++ b/src/main/webapp/resources/js/search_result.js @@ -0,0 +1,94 @@ +var keyword = getQueryString("keyword"); +var site = getQueryString("site"); +var page = getQueryString("page"); + +$(document).ready(function () { + + $("#btn_search").click(function () { + requestSearchPage() + }); + + $("input[name='site']").change(function () { + requestSearchPage() + }); + + console.log(keyword) + if (keyword != '') { + requestSearchInit(); + } +}); + +var lastRequest = null; + +function requestSearchPage() { + var from_keyword = $('#keyword').val(); + var form_site = $("input[name='site']:checked").val(); + $('#form_keyword').val(from_keyword); + $('#form_page').val(1); + $('#form_site').val(form_site); + + $('#form_search').submit(); +} + +function requestSearchInit() { + $('#table_content').find("tr[name='content']").remove(); + $('#div_loading').show(); + page = 1; + requestSearch(); +} + +function requestSearch(stopLoading) { + if (lastRequest !== null) { + lastRequest.abort(); + } + lastRequest = $.ajax({ + type: 'get', + url: 'search-json', + data: {site: site, keyword: keyword, page: page}, + dataType: 'json', + success: function (reponse) { + lastRequest = null; + if (stopLoading != undefined) { + stopLoading(); + } + $('#div_loading').hide(); + if (reponse.length > 0) { + $("#div_btn_request_page").show(); + } else { + $("#div_btn_request_page").hide(); + } + page = page + 1; + for (var i = 0; i < reponse.length; i++) { + var html = "" + + "" + reponse[i].name + "" + + "" + + reponse[i].size + "" + + "" + + reponse[i].resolution + "" + + "" + + reponse[i].count + "" + + "" + $("#tr_placeholder").before(html); + } + }, + error: function (xhr, type) { + lastRequest = null; + if (stopLoading != undefined) { + stopLoading(); + } + alert('出错了'); + } + }); +} + +function getQueryString(name) { + var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); + var r = window.location.search.substr(1).match(reg); + var context = ""; + if (r != null) + context = r[2]; + reg = null; + r = null; + var str = context == null || context == "" || context == "undefined" ? "" : context; + return decodeURI(str); +} diff --git a/target/classes/ehcache.xml b/target/classes/ehcache.xml new file mode 100644 index 0000000..b04d194 --- /dev/null +++ b/target/classes/ehcache.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/target/classes/rule.json b/target/classes/rule.json new file mode 100644 index 0000000..6d8ebe7 --- /dev/null +++ b/target/classes/rule.json @@ -0,0 +1,95 @@ + [ + { + "site":"AOYOSO", + "waiting":"0", + "group":"//div[@class='col-md-8']//div[@class='panel panel-default']", + "magnet":".//a//@href", + "name":".//a", + "size":".//table//tr//td[2]", + "count":".//table//tr//td[1]", + "source":"http://www.aoyoso.com/search/XXX_ctime_PPP.html" + }, + { + "site":"磁力吧", + "waiting":"0", + "group":"//div[@class='search-item']", + "magnet":".//a//@href", + "name":".//a", + "size":".//span[3]//b", + "count":".//span[2]//b", + "source":"http://www.ciliba.org/s/XXX_rel_PPP.html" + }, + { + "site":"种子搜", + "waiting":"0", + "group":"//table[@class='table table-bordered table-striped']", + "magnet":".//a//@href", + "name":".//tbody//a", + "size":".//tbody//tr//td[2]//strong", + "count":".//tbody//tr//td[1]//strong", + "source":"http://www.zhongziso.com/list/XXX/PPP" + }, + { + "site":"SOBT", + "waiting":"0", + "group":"//div[@class='search-list col-md-8']//div[@class='search-item']", + "magnet":".//a//@href", + "name":".//a[@target='_blank']", + "size":".//div[@class='item-bar']//span[2]//b", + "count":".//div[@class='item-bar']//span[1]//b", + "source":"http://www.sobt5.org/q/XXX_PPP.html" + }, + { + "site":"BT岛", + "waiting":"0", + "group":"//ul[@class='mlist']//li", + "magnet":".//a//@href", + "name":".//a[@target='_blank']", + "size":".//dt//span[1]", + "count":".//dt//span[2]", + "source":"http://www.btdao5.com/list/XXX-s1d-PPP.html" + }, + { + "site":"bt177", + "waiting":"0", + "group":"//li", + "magnet":".//a//@href", + "name":".//a", + "size":".//span[1]", + "count":".//span[2]", + "source":"http://www.bt177.net/word/XXX_PPP.html" + }, + { + "site":"zhongzidi", + "waiting":"0", + "group":"//div[@class='panel-body']//ul", + "magnet":".//dl[2]/a[1]//@href", + "name":".//a", + "size":".//dl[1]/dd[2]", + "count":".//dl[1]/dd[3]", + "source":"https://m.zhongzidi.com/list/XXX/PPP" + + }, + { + "site":"cililiana", + "waiting":"0", + "group":"//ul[@class='mlist']//li", + "magnet":".//div[2]/a[1]//@href", + "name":".//div[1]/a", + "size":".//dl/dt/span[1]", + "count":".//dl/dt/span[3]", + "source":"http://cililiana.com/list/XXX/PPP.html" + + }, + { + "site":"屌丝搜", + "waiting":"0", + "group":"//ul[@class='mlist']//li", + "magnet":".//div[2]/a[1]//@href", + "name":".//div[1]/a", + "size":".//dl/dt/span[1]", + "count":".//dl/dt/span[3]", + "source":"http://www.diaosisou.org/list/XXX/PPP" + + } + ] diff --git a/target/magnetw/META-INF/MANIFEST.MF b/target/magnetw/META-INF/MANIFEST.MF new file mode 100644 index 0000000..82551b4 --- /dev/null +++ b/target/magnetw/META-INF/MANIFEST.MF @@ -0,0 +1,5 @@ +Manifest-Version: 1.0 +Built-By: dengyuhan +Created-By: IntelliJ IDEA +Build-Jdk: 1.8.0_101 + diff --git a/target/magnetw/WEB-INF/classes/ehcache.xml b/target/magnetw/WEB-INF/classes/ehcache.xml new file mode 100644 index 0000000..b04d194 --- /dev/null +++ b/target/magnetw/WEB-INF/classes/ehcache.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/target/magnetw/WEB-INF/classes/rule.json b/target/magnetw/WEB-INF/classes/rule.json new file mode 100644 index 0000000..6d8ebe7 --- /dev/null +++ b/target/magnetw/WEB-INF/classes/rule.json @@ -0,0 +1,95 @@ + [ + { + "site":"AOYOSO", + "waiting":"0", + "group":"//div[@class='col-md-8']//div[@class='panel panel-default']", + "magnet":".//a//@href", + "name":".//a", + "size":".//table//tr//td[2]", + "count":".//table//tr//td[1]", + "source":"http://www.aoyoso.com/search/XXX_ctime_PPP.html" + }, + { + "site":"磁力吧", + "waiting":"0", + "group":"//div[@class='search-item']", + "magnet":".//a//@href", + "name":".//a", + "size":".//span[3]//b", + "count":".//span[2]//b", + "source":"http://www.ciliba.org/s/XXX_rel_PPP.html" + }, + { + "site":"种子搜", + "waiting":"0", + "group":"//table[@class='table table-bordered table-striped']", + "magnet":".//a//@href", + "name":".//tbody//a", + "size":".//tbody//tr//td[2]//strong", + "count":".//tbody//tr//td[1]//strong", + "source":"http://www.zhongziso.com/list/XXX/PPP" + }, + { + "site":"SOBT", + "waiting":"0", + "group":"//div[@class='search-list col-md-8']//div[@class='search-item']", + "magnet":".//a//@href", + "name":".//a[@target='_blank']", + "size":".//div[@class='item-bar']//span[2]//b", + "count":".//div[@class='item-bar']//span[1]//b", + "source":"http://www.sobt5.org/q/XXX_PPP.html" + }, + { + "site":"BT岛", + "waiting":"0", + "group":"//ul[@class='mlist']//li", + "magnet":".//a//@href", + "name":".//a[@target='_blank']", + "size":".//dt//span[1]", + "count":".//dt//span[2]", + "source":"http://www.btdao5.com/list/XXX-s1d-PPP.html" + }, + { + "site":"bt177", + "waiting":"0", + "group":"//li", + "magnet":".//a//@href", + "name":".//a", + "size":".//span[1]", + "count":".//span[2]", + "source":"http://www.bt177.net/word/XXX_PPP.html" + }, + { + "site":"zhongzidi", + "waiting":"0", + "group":"//div[@class='panel-body']//ul", + "magnet":".//dl[2]/a[1]//@href", + "name":".//a", + "size":".//dl[1]/dd[2]", + "count":".//dl[1]/dd[3]", + "source":"https://m.zhongzidi.com/list/XXX/PPP" + + }, + { + "site":"cililiana", + "waiting":"0", + "group":"//ul[@class='mlist']//li", + "magnet":".//div[2]/a[1]//@href", + "name":".//div[1]/a", + "size":".//dl/dt/span[1]", + "count":".//dl/dt/span[3]", + "source":"http://cililiana.com/list/XXX/PPP.html" + + }, + { + "site":"屌丝搜", + "waiting":"0", + "group":"//ul[@class='mlist']//li", + "magnet":".//div[2]/a[1]//@href", + "name":".//div[1]/a", + "size":".//dl/dt/span[1]", + "count":".//dl/dt/span[3]", + "source":"http://www.diaosisou.org/list/XXX/PPP" + + } + ] diff --git a/target/magnetw/WEB-INF/dispatcher-servlet.xml b/target/magnetw/WEB-INF/dispatcher-servlet.xml new file mode 100644 index 0000000..2381d10 --- /dev/null +++ b/target/magnetw/WEB-INF/dispatcher-servlet.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/target/magnetw/WEB-INF/views/error.jsp b/target/magnetw/WEB-INF/views/error.jsp new file mode 100644 index 0000000..1522c26 --- /dev/null +++ b/target/magnetw/WEB-INF/views/error.jsp @@ -0,0 +1,17 @@ +<%-- + Created by IntelliJ IDEA. + User: dengyuhan + Date: 2018/3/7 + Time: 14:18 + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@ page isELIgnored="false" %> + + + 出错了 + + +${error_message} + + diff --git a/target/magnetw/WEB-INF/views/search_result.jsp b/target/magnetw/WEB-INF/views/search_result.jsp new file mode 100644 index 0000000..d3e69a2 --- /dev/null +++ b/target/magnetw/WEB-INF/views/search_result.jsp @@ -0,0 +1,127 @@ +<%-- + Created by IntelliJ IDEA. + User: dengyuhan + Date: 2018/3/7 + Time: 14:18 + To change this template use File | Settings | File Templates. +--%> +<%@ page contentType="text/html;charset=UTF-8" language="java" %> +<%@ page isELIgnored="false" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> +<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %> + + + <%----%> + + ${keyword} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${site} + + + + + ${site} + + + + + + + + + 加载中... + + + + + <%-- + + + --%> + + + + 点击加载更多 + + + + + +<%-- + + + + ${info.name} + ${info.size} + ${info.resolution} + ${info.count} + + + + + + + + + + + + 上一页 + + ${current_page} + 下一页 + + + +--%> + + + + + + + + diff --git a/target/magnetw/WEB-INF/web.xml b/target/magnetw/WEB-INF/web.xml new file mode 100644 index 0000000..345591b --- /dev/null +++ b/target/magnetw/WEB-INF/web.xml @@ -0,0 +1,73 @@ + + + + + + + contextConfigLocation + /WEB-INF/dispatcher-servlet.xml + + + org.springframework.web.context.ContextLoaderListener + + + dispatcher + org.springframework.web.servlet.DispatcherServlet + 1 + + + dispatcher + / + + + + search + + + + characterEncodingFilter + org.springframework.web.filter.CharacterEncodingFilter + + encoding + UTF-8 + + + forceEncoding + true + + + + characterEncodingFilter + /* + + diff --git a/target/magnetw/index.jsp b/target/magnetw/index.jsp new file mode 100644 index 0000000..c38169b --- /dev/null +++ b/target/magnetw/index.jsp @@ -0,0 +1,5 @@ + + +Hello World! + + diff --git a/target/magnetw/resources/css/base.css b/target/magnetw/resources/css/base.css new file mode 100644 index 0000000..f9a9beb --- /dev/null +++ b/target/magnetw/resources/css/base.css @@ -0,0 +1,11 @@ +.container-margin-top { + margin-top: 3%; +} + +.td-center { + text-align: center; +} + +.no-padding { + padding: 0px; +} \ No newline at end of file diff --git a/target/magnetw/resources/css/search_result.css b/target/magnetw/resources/css/search_result.css new file mode 100644 index 0000000..4f4f5f6 --- /dev/null +++ b/target/magnetw/resources/css/search_result.css @@ -0,0 +1,34 @@ +.search_form { +} + +.search_result_pager { + float: right +} + +.td-count { + width: 10%; +} + +.td-page-action { + cursor: pointer; +} + +.td-page-number { + margin-left: 10px; + margin-right: 10px; +} +.search_site{ + margin-top: 1.5%; + margin-bottom: 1.5%; +} + +#tr_load_more{ + cursor: pointer; +} + +.container-margin-bottom { + margin-bottom: 1.5%; +} +.loader div{ + background-color: #D32F2F; +} \ No newline at end of file diff --git a/target/magnetw/resources/js/search_result.js b/target/magnetw/resources/js/search_result.js new file mode 100644 index 0000000..6824c91 --- /dev/null +++ b/target/magnetw/resources/js/search_result.js @@ -0,0 +1,94 @@ +var keyword = getQueryString("keyword"); +var site = getQueryString("site"); +var page = getQueryString("page"); + +$(document).ready(function () { + + $("#btn_search").click(function () { + requestSearchPage() + }); + + $("input[name='site']").change(function () { + requestSearchPage() + }); + + console.log(keyword) + if (keyword != '') { + requestSearchInit(); + } +}); + +var lastRequest = null; + +function requestSearchPage() { + var from_keyword = $('#keyword').val(); + var form_site = $("input[name='site']:checked").val(); + $('#form_keyword').val(from_keyword); + $('#form_page').val(1); + $('#form_site').val(form_site); + + $('#form_search').submit(); +} + +function requestSearchInit() { + $('#table_content').find("tr[name='content']").remove(); + $('#div_loading').show(); + page = 1; + requestSearch(); +} + +function requestSearch(stopLoading) { + if (lastRequest !== null) { + lastRequest.abort(); + } + lastRequest = $.ajax({ + type: 'get', + url: 'search-json', + data: {site: site, keyword: keyword, page: page}, + dataType: 'json', + success: function (reponse) { + lastRequest = null; + if (stopLoading != undefined) { + stopLoading(); + } + $('#div_loading').hide(); + if (reponse.length > 0) { + $("#div_btn_request_page").show(); + } else { + $("#div_btn_request_page").hide(); + } + page = page + 1; + for (var i = 0; i < reponse.length; i++) { + var html = "" + + "" + reponse[i].name + "" + + "" + + reponse[i].size + "" + + "" + + reponse[i].resolution + "" + + "" + + reponse[i].count + "" + + "" + $("#tr_placeholder").before(html); + } + }, + error: function (xhr, type) { + lastRequest = null; + if (stopLoading != undefined) { + stopLoading(); + } + alert('出错了'); + } + }); +} + +function getQueryString(name) { + var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); + var r = window.location.search.substr(1).match(reg); + var context = ""; + if (r != null) + context = r[2]; + reg = null; + r = null; + var str = context == null || context == "" || context == "undefined" ? "" : context; + return decodeURI(str); +} From 387f443fb116708fdbe1c8356bc70dc7805ec120 Mon Sep 17 00:00:00 2001 From: dengyuhan <464958567@qq.com> Date: Fri, 9 Mar 2018 16:31:12 +0800 Subject: [PATCH 02/10] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=8F=96=E9=93=BE?= =?UTF-8?q?=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../magnetw/WEB-INF}/classes/ehcache.xml | 0 .../magnetw/WEB-INF}/classes/rule.json | 0 .../magnetw/service/MagnetWService.java | 16 ++- src/main/resources/ehcache.xml | 2 + .../webapp/WEB-INF/views/search_result.jsp | 101 ++++++++------ .../webapp/resources/css/search_result.css | 21 ++- src/main/webapp/resources/js/search_result.js | 12 ++ target/magnetw/META-INF/MANIFEST.MF | 5 - target/magnetw/WEB-INF/classes/ehcache.xml | 44 ------ target/magnetw/WEB-INF/classes/rule.json | 95 ------------- target/magnetw/WEB-INF/dispatcher-servlet.xml | 40 ------ target/magnetw/WEB-INF/views/error.jsp | 17 --- .../magnetw/WEB-INF/views/search_result.jsp | 127 ------------------ target/magnetw/WEB-INF/web.xml | 73 ---------- target/magnetw/index.jsp | 5 - target/magnetw/resources/css/base.css | 11 -- .../magnetw/resources/css/search_result.css | 34 ----- target/magnetw/resources/js/search_result.js | 94 ------------- 18 files changed, 104 insertions(+), 593 deletions(-) rename {target => out/artifacts/magnetw/WEB-INF}/classes/ehcache.xml (100%) rename {target => out/artifacts/magnetw/WEB-INF}/classes/rule.json (100%) delete mode 100644 target/magnetw/META-INF/MANIFEST.MF delete mode 100644 target/magnetw/WEB-INF/classes/ehcache.xml delete mode 100644 target/magnetw/WEB-INF/classes/rule.json delete mode 100644 target/magnetw/WEB-INF/dispatcher-servlet.xml delete mode 100644 target/magnetw/WEB-INF/views/error.jsp delete mode 100644 target/magnetw/WEB-INF/views/search_result.jsp delete mode 100644 target/magnetw/WEB-INF/web.xml delete mode 100644 target/magnetw/index.jsp delete mode 100644 target/magnetw/resources/css/base.css delete mode 100644 target/magnetw/resources/css/search_result.css delete mode 100644 target/magnetw/resources/js/search_result.js diff --git a/target/classes/ehcache.xml b/out/artifacts/magnetw/WEB-INF/classes/ehcache.xml similarity index 100% rename from target/classes/ehcache.xml rename to out/artifacts/magnetw/WEB-INF/classes/ehcache.xml diff --git a/target/classes/rule.json b/out/artifacts/magnetw/WEB-INF/classes/rule.json similarity index 100% rename from target/classes/rule.json rename to out/artifacts/magnetw/WEB-INF/classes/rule.json diff --git a/src/main/java/com/dyhdyh/magnetw/service/MagnetWService.java b/src/main/java/com/dyhdyh/magnetw/service/MagnetWService.java index 81c9e14..972b396 100644 --- a/src/main/java/com/dyhdyh/magnetw/service/MagnetWService.java +++ b/src/main/java/com/dyhdyh/magnetw/service/MagnetWService.java @@ -101,11 +101,23 @@ private String transformMagnet(String url) { if (matches) { return url; } else { + System.out.println(url); String newMagnet; try { - int startIndex = url.lastIndexOf("/") + 1; + StringBuffer sb = new StringBuffer(url); int htmlIndex = url.lastIndexOf(".html"); - newMagnet = url.substring(startIndex, htmlIndex); + if (htmlIndex != -1) { + sb.delete(htmlIndex, sb.length()); + } + int paramIndex = url.indexOf("&"); + if (paramIndex != -1) { + sb.delete(paramIndex, sb.length()); + } + if (sb.length() >= 40) { + newMagnet = sb.substring(sb.length() - 40, sb.length()); + } else { + newMagnet = url; + } } catch (Exception e) { e.printStackTrace(); newMagnet = url; diff --git a/src/main/resources/ehcache.xml b/src/main/resources/ehcache.xml index b04d194..8a2f0ee 100644 --- a/src/main/resources/ehcache.xml +++ b/src/main/resources/ehcache.xml @@ -15,6 +15,8 @@ diff --git a/src/main/webapp/WEB-INF/views/search_result.jsp b/src/main/webapp/WEB-INF/views/search_result.jsp index d3e69a2..9be46d1 100644 --- a/src/main/webapp/WEB-INF/views/search_result.jsp +++ b/src/main/webapp/WEB-INF/views/search_result.jsp @@ -14,6 +14,8 @@ <%----%> ${keyword} + @@ -29,54 +31,61 @@ - - - - - - + + + + + + + + + + - - + + + + + + ${site} + + + + + ${site} + + + + - - - - - - ${site} - - - - - ${site} - - - - - - - - - 加载中... + + + 加载中... + + + + + <%-- + + + --%> + + + + 点击加载更多 + + - - - - <%-- - - - --%> - - - 点击加载更多 - + + @@ -123,5 +132,11 @@ } }); + + + + +