Skip to content
This repository has been archived by the owner on Apr 10, 2022. It is now read-only.

new #54

Open
wants to merge 10 commits into
base: master
Choose a base branch
from
Open

new #54

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,4 @@

# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*
target
16 changes: 15 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,15 @@
# magnetW
## Demo
#### [直接体验](http://bt.xiandan.in)

## 截屏
![](screenshots.gif)

## 其它版本
#### Mac版:[magnetX](https://github.com/youusername/magnetX)

## 快速搭建
#### 进入[releases](https://github.com/dengyuhan/magnetW/releases)下载编译好的war包,发布到tomcat即可


## 免责声明
#### 仅用于技术交流学习,禁止商用,对此工具的非法使用概不负责。
94 changes: 94 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.dyhdyh</groupId>
<artifactId>magnetw</artifactId>
<packaging>war</packaging>
<version>1.0.1</version>
<name>magnetW</name>
<url>http://maven.apache.org</url>
<dependencies>

<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.11.2</version>
</dependency>
<dependency>
<groupId>net.sourceforge.htmlcleaner</groupId>
<artifactId>htmlcleaner</artifactId>
<version>2.21</version>
</dependency>


<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.2</version>
</dependency>

<!--jstl-->
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>

<!-- jsp -->
<dependency>
<groupId>javax.el</groupId>
<artifactId>javax.el-api</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>


<!--spring-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.3.1.RELEASE</version>
</dependency>


<!--缓存-->
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>2.10.4</version>
</dependency>
</dependencies>
<build>
<finalName>magnetw</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
Binary file added screenshots.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
44 changes: 44 additions & 0 deletions src/main/java/com/dyhdyh/magnetw/controller/BaseController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package com.dyhdyh.magnetw.controller;

import org.apache.log4j.Logger;
import org.springframework.ui.Model;
import org.springframework.util.StringUtils;

import java.net.SocketTimeoutException;
import java.net.URLDecoder;

import javax.servlet.http.HttpServletRequest;

/**
* author dengyuhan
* created 2018/3/7 14:19
*/
public class BaseController {
private Logger logger = Logger.getLogger(getClass());

protected void logger(HttpServletRequest request) {
String queryString = request.getQueryString();
if (!StringUtils.isEmpty(queryString)) {
logger.info(request.getRequestURL() + "?" + URLDecoder.decode(queryString));
}
}

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";
}
}
133 changes: 133 additions & 0 deletions src/main/java/com/dyhdyh/magnetw/controller/MagnetWController.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
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<String, MagnetRule> magnetRuleMap;
private List<String> sites;


/**
* 搜索
*
* @param model
* @param site
* @param keyword
* @param page
* @return
*/
@RequestMapping(value = {"/", "search"}, method = RequestMethod.GET)
public String submitSearchMagnet(Model model, HttpServletRequest request, @RequestParam(required = false) String site, @RequestParam(required = false) String keyword, @RequestParam(required = false) Integer page) {
logger(request);
try {
List<String> 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<MagnetInfo> submitSearchMagnetJson(Model model, HttpServletRequest request, @RequestParam(required = false) String site, @RequestParam(required = false) String keyword, @RequestParam(required = false) Integer page) {
logger(request);
try {
List<String> siteNames = getSiteNames();
if (StringUtils.isEmpty(site)) {
site = siteNames.get(0);
}
List<MagnetInfo> 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<MagnetInfo>();
}


}

/**
* 网站的筛选规则
*
* @return
*/
private Map<String, MagnetRule> getMagnetRule() {
if (magnetRuleMap == null) {
magnetRuleMap = new LinkedHashMap<String, MagnetRule>();

InputStream inputStream = getClass().getResourceAsStream("/rule.json");
List<MagnetRule> rules = GsonUtil.fromJson(inputStream, new TypeToken<List<MagnetRule>>() {
});
for (MagnetRule rule : rules) {
magnetRuleMap.put(rule.getSite(), rule);
}
}
return magnetRuleMap;
}


private List<String> getSiteNames() {
if (sites == null) {
sites = new ArrayList<String>();
Set<Map.Entry<String, MagnetRule>> entries = getMagnetRule().entrySet();
for (Map.Entry<String, MagnetRule> entry : entries) {
sites.add(entry.getKey());
}
}
return sites;
}
}
75 changes: 75 additions & 0 deletions src/main/java/com/dyhdyh/magnetw/filter/EncodingFilter.java
Original file line number Diff line number Diff line change
@@ -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);
}
}

}
}
Loading