package cn.newgxu.bbs.domain;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
/**
* 这个类是用来在后台(不像ajax前端获取)加载远程获取的数据用的,
* 包含几个简单的可选的属性(不是每个属性都必须要),
* 用于在页面显示相关的属性,标题,url,内容,以及时间等等
* (以后如果需要什么其他的属性自己添加就是了)
*
* @since 2012-04-24
* @author longkai
*/
public class RemoteContent {
private String title;
private String url;
private String content;
private Date time;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getUrl() {
return url;
}
public void setTime(Date time) {
this.time = time;
}
public String getContent() {
return content;
}
public void setUrl(String url) {
this.url = url;
}
public Date getTime() {
return time;
}
public void setContent(String content) {
this.content = content;
}
/**
* 这个是回去远程数据的方法。
* @param path 从指定的url中获取结果信息。
* @param charset 对获取的数据进行转码。
* @return 返回转换后获取的数据的字符串。
* @version 1.1@2012-04-24
* @author longkai
*/
public static String getRemoteResult(String path, String charset) {
StringBuffer sbf = new StringBuffer();
BufferedReader br = null;
try {
URL url = new URL(path);
sbf = new StringBuffer();
String line = null;
// 读取信息
InputStream inputStream = url.openStream();
br = new BufferedReader(new InputStreamReader(inputStream, charset));
while ((line = br.readLine()) != null) {
sbf.append(line);
}
} catch (MalformedURLException e) {
e.printStackTrace();
return null;
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return null;
} catch (IOException e) {
e.printStackTrace();
return null;
} finally {
try {
if (br != null)
br.close();
br = null;
} catch (IOException e) {
e.printStackTrace();
}
}
return sbf.toString();
}
/**
* 获取新闻网首页的祝福墙。
* @return 祝福墙内容list。
* @throws Exception
* @version 1.0@2012-04-24
* @author longkai
*/
public static List<RemoteContent> getWishesList() throws Exception {
String str = getRemoteResult(
"http://210.36.16.163/API/GET.php?action=wish&sort=add_time&desc=1&count=4", "gbk");
List<RemoteContent> remoteContents = null;
if (!validate(str)) {
return new ArrayList<RemoteContent>(0);
}
// 使用json-simple解析JSON
JSONParser parser = new JSONParser();
JSONArray a = (JSONArray) parser.parse(str);
RemoteContent remoteContent = null;
remoteContents = new ArrayList<RemoteContent>();
for (int i = 0; i < a.size(); i++) {
JSONObject obj = (JSONObject) a.get(i);
remoteContent = new RemoteContent();
remoteContent.setContent(obj.get("content").toString());
remoteContent.setTitle(obj.get("name").toString());
remoteContents.add(remoteContent);
}
return remoteContents;
}
/**
* 获取新闻网首页的校园通告栏。
* @return 校园通告的list。
* @throws Exception
* @version 1.0@2012-04-24
* @author longkai
*/
public static List<RemoteContent> getNoticeList() throws Exception {
String str = getRemoteResult(
"http://www.newgxu.cn/API/GET.php?action=notice&sort=noticeid&desc=1&count=7", "gbk");
List<RemoteContent> remoteContents = null;
if (!validate(str)) {
return new ArrayList<RemoteContent>(0);
}
// 使用json-simple解析JSON
JSONParser parser = new JSONParser();
JSONArray a = (JSONArray) parser.parse(str);
remoteContents = new ArrayList<RemoteContent>();
RemoteContent remoteContent = null;
for (int i = 0; i < a.size(); i++) {
JSONObject obj = (JSONObject) a.get(i);
remoteContent = new RemoteContent();
remoteContent.setTitle(obj.get("title").toString());
remoteContent.setUrl("//www.newgxu.cn/html/notices/"
+ obj.get("noticeid") + ".html");
remoteContents.add(remoteContent);
}
return remoteContents;
}
/**
* 获取失物招领的捡到物品列表信息。
* @return 捡到物品的list。
* @throws Exception
* @version 1.0@2012-04-04
* @author longkai
*/
public static List<RemoteContent> getFindList() throws Exception {
String str = getRemoteResult(
"http://210.36.16.167/find/GET.php?action=lost_find&desc=1&count=7", "utf8");
List<RemoteContent> remoteContents = null;
if (!validate(str)) {
return new ArrayList<RemoteContent>(0);
}
// 使用json-simple解析JSON
JSONParser parser = new JSONParser();
JSONArray a = (JSONArray) parser.parse(str);
remoteContents = new ArrayList<RemoteContent>();
RemoteContent remoteContent = null;
for (int i = 0; i < a.size(); i++) {
JSONObject obj = (JSONObject) a.get(i);
remoteContent = new RemoteContent();
remoteContent.setTitle(obj.get("find_name").toString());
remoteContent.setUrl("//t.newgxu.cn/find/find_detail.php?find_id="
+ obj.get("find_id"));
try {
remoteContent.setTime(Timestamp.valueOf(obj.get(
"find_release_time").toString()));
} catch (Exception e) {
e.printStackTrace();
remoteContent.setTime(new Date());
}
remoteContents.add(remoteContent);
}
return remoteContents;
}
/**
* 获取失物招领的丢失物品列表信息。
* @return 丢失物品的list。
* @throws Exception
* @version 1.0@2012-04-24
* @author longkai
*/
public static List<RemoteContent> getLostList() throws Exception {
String str = getRemoteResult(
"http://210.36.16.167/find/GET.php?action=lost_lost&desc=1&count=7", "utf-8");
List<RemoteContent> remoteContents = null;
if (!validate(str)) {
return new ArrayList<RemoteContent>(0);
}
// 使用json-simple解析JSON
JSONParser parser = new JSONParser();
JSONArray a = (JSONArray) parser.parse(str);
remoteContents = new ArrayList<RemoteContent>();
RemoteContent remoteContent = null;
for (int i = 0; i < a.size(); i++) {
JSONObject obj = (JSONObject) a.get(i);
remoteContent = new RemoteContent();
remoteContent.setTitle(obj.get("lost_name").toString());
remoteContent.setUrl("//t.newgxu.cn/find/lost_detail.php?lost_id="
+ obj.get("lost_id"));
try {
remoteContent.setTime(Timestamp.valueOf(obj.get("lost_release_time").toString()));
} catch (Exception e) {
e.printStackTrace();
remoteContent.setTime(new Date());
}
remoteContents.add(remoteContent);
}
return remoteContents;
}
/**
* 通过用户名来获取微博。
* <b>注意,从微博获取过来的数据是直接包含链接了的。</b>
* @param userName 指定获取的用户。
* @return 该用户的最新微博list。
* @throws Exception
* @version 1.0@2012-05-10
* @author longkai
*/
public static List<RemoteContent> getTwitter(String userName)
throws Exception {
String str = getRemoteResult("http://t.newgxu.cn/get.php?user="
+ userName + "&count=7", "utf-8");
List<RemoteContent> remoteContents = null;
if (!validate(str)) {
return new ArrayList<RemoteContent>(0);
}
// 使用json-simple解析JSON
JSONParser parser = new JSONParser();
JSONArray a = null;
try {
a = (JSONArray) parser.parse(str);
} catch (Exception e) {
return new ArrayList<RemoteContent>(0);
}
remoteContents = new ArrayList<RemoteContent>();
RemoteContent remoteContent = null;
String temp = "";
for (int i = 0; i < a.size(); i++) {
JSONObject obj = (JSONObject) a.get(i);
remoteContent = new RemoteContent();
remoteContent.setTitle(obj.get("face").toString());
remoteContent.setUrl(obj.get("userlink").toString());
temp = obj.get("content").toString();
// remoteContent.setContent(
// temp.length() > 30 ? getContentFilter(temp) : temp);
remoteContent.setContent(temp);
remoteContents.add(remoteContent);
}
return remoteContents;
}
/**
* 过滤掉微博的一些图片标签(微博内容太长导致页面很难看),非常之麻烦。
* @param content 对应过滤的内容。
* @return 过滤后的内容字符串。
* @version 1.5@2012-05-20
* @author longkai
*/
public static String getContentFilter(String content) {
String str = content;
String regex = "<img.+?>";
int length = 0;
int totalLength = content.length();
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
if (!matcher.find()) {
return content.substring(0, 30) + "...";
}
matcher.reset();
while (matcher.find()) {
length += matcher.group().length();
}
if (totalLength - length > 30) {
content = content.substring(0, length + 30);
// 匹配任意没有闭合的标签
if (!content.matches("<([a-z]+)(\\s*\\w*?\\s*=\\s*'.+?')*(\\s*?>[\\s\\S]*?<\\/\\1>|\\s*\\/>)")) {
content += ">";
}
content += "...";
}
return content;
}
private static boolean validate(String result) {
if (result != null && !result.equals("")) {
return true;
}
return false;
}
public static void main(String[] args) throws Exception {
System.out.println(getTwitter("longkai").size());
// List<RemoteContent> twitters = getTwitter("longkai");
// for (RemoteContent content : twitters) {
// System.out.println(content.getUrl());
// }
// System.out.println("hello");
System.out.println("Hello, " + "World!");
System.out.println(new ArrayList<RemoteContent>().size());
}
}