import com.gargoylesoftware.htmlunit.BrowserVersion; import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.html.*; import java.io.BufferedReader; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; /** * Created by Blake on 2014/7/6. */ public class AnimeList { public static final String AnimeListPath="http://share.dmhy.org/cms/page/name/programme.html/"; public static AnimeFansubList fansubList=new AnimeFansubList(); private static AnimeList instance = null; public static AnimeList getInstance() { if (instance == null){ synchronized(AnimeList.class) { if(instance == null) { instance = new AnimeList(); } } } return instance; } public static void loadAnimeListFromFile() throws IOException { fansubList.removeAllList(); FileReader fr = new FileReader(Config.AnimeListFilePath); BufferedReader br = new BufferedReader(fr); while (br.ready()) { String[] strs=br.readLine().split("\\|"); for(int i=0;i<strs.length;i++) { if(i==0) { fansubList.addFansubData(new AnimeFansubData()); fansubList.getFansubData(fansubList.fansubDataSize()-1).setAnimeName(strs[i]); } else { fansubList.getFansubData(fansubList.fansubDataSize()-1).addFansub(strs[i]); } } } // printAnimeFansubList(); fr.close(); } public static void reloadAnimeListFromWeb() { fansubList.removeAllList(); try { WebClient wc = new WebClient(BrowserVersion.CHROME); wc.getOptions().setUseInsecureSSL(true); wc.getOptions().setJavaScriptEnabled(true); // 启用JS解释器,默认为true wc.getOptions().setCssEnabled(false); // 禁用css支持 wc.getOptions().setThrowExceptionOnScriptError(false); // js运行错误时,是否抛出异常 wc.getOptions().setTimeout(100000); // 设置连接超时时间 ,这里是10S。如果为0,则无限期等待 wc.getOptions().setDoNotTrackEnabled(false); HtmlPage page = wc.getPage(AnimeListPath); DomNodeList<DomElement> links = page.getElementsByTagName("div"); AnimeFansubList fansubList=new AnimeFansubList(); int iterator=0; for (int i=0;i<links.size();i++) { if(links.get(i).getAttribute("class").equals("weekly_list_title")&&!links.get(i).asText().equals(" ")) { fansubList.addFansubData(new AnimeFansubData()); fansubList.getFansubData(iterator).setAnimeName(links.get(i).asText()); iterator++; } if(links.get(i).getAttribute("class").equals("weekly_list_part")&&!links.get(i).asText().equals(" ")) { DomNodeList<DomNode> childs=links.get(i).getChildNodes(); for(DomNode child:childs) { fansubList.getFansubData(iterator-1).addFansub(child.asText()); } } } FileWriter fw = new FileWriter(Config.AnimeListFilePath); for(int i=0;i<fansubList.fansubDataSize();i++) { fw.write(fansubList.getFansubData(i).getAnimeName()+"|"); for(int j=0;j<fansubList.getFansubData(i).getFansubSize();j++) { fw.write(fansubList.getFansubData(i).getFansub(j)+"|"); // System.out.println(fansubList.getFansubData(i).getFansub(j)); } fw.write("\r\n"); } fw.flush(); fw.close(); System.out.println("Successful Reload"); } catch (Exception e) { System.err.println( "Exception: " + e ); } } public static void printAnimeFansubList() { for(int i=0;i<fansubList.fansubDataSize();i++) { System.out.println("AnimeName: " + fansubList.getFansubData(i).getAnimeName()); for(int j=0;j<fansubList.getFansubData(i).getFansubSize();j++) { System.out.println("FanSub: " + fansubList.getFansubData(i).getFansub(j)); } } } } class AnimeFansubList { private ArrayList<AnimeFansubData> animeFansubData=new ArrayList<AnimeFansubData>(); public AnimeFansubData getFansubData(int index) { return animeFansubData.get(index); } public void addFansubData(AnimeFansubData fansubdata) { this.animeFansubData.add(fansubdata); } public int fansubDataSize() { return animeFansubData.size(); } public void removeAllList() { animeFansubData.clear(); } } class AnimeFansubData { private String animeName=""; private ArrayList<String> fansubs=new ArrayList<String>(); public String getAnimeName() { return animeName; } public int getFansubSize() { return fansubs.size(); } public String getFansub(int index) { return fansubs.get(index); } public void setAnimeName(String animeName) { this.animeName=animeName; } public void addFansub(String fansub) { this.fansubs.add(fansub); } }