📄 util.java
字号:
// Integer.parseInt(config.getProxyPort()));// }// http.getParams().setContentCharset("GBK");//// PostMethod get = postMethod();// if (singer == null || singer.equals("")) {// get.addParameter("song", song);// } else {//否则就把两个都加上,看能不能搜到//// get.addParameter("singer", singer);// get.addParameter("song", song);// }// StringBuilder sb = new StringBuilder();// int i = http.executeMethod(get);// sb.append(getString(get.getResponseBodyAsStream()));// get.releaseConnection();// //如果有这个,则说明没有找到// if (sb.toString().contains("对不起,没有找到")) {// log.log(Level.INFO, "第一遍没有搜到,将第二次");// sb = new StringBuilder();// //则再以另一种方式找,以文件名来找// get = postMethod();// get.addParameter("song", info.getName());// i = http.executeMethod(get);// log.log(Level.INFO, "第二次的I=" + i);// sb.append(getString(get.getResponseBodyAsStream()));// get.releaseConnection();// if (sb.toString().contains("对不起,没有找到")) {// //再尝试其它的方法// //如果两个都加上也没有搜到,// //则马上用文件名搜索一次// if (info.getTitle().equals(info.getName())) {// log.log(Level.INFO, "第二次还没有搜到,放弃..");// } else {// sb = new StringBuilder();// log.log(Level.INFO, "第二次还没有搜到,将第三次");// get = postMethod();// get.addParameter("song", info.getTitle());//// }//// } else {// log.log(Level.INFO, "第二次搜到了");// urlContent = sb.toString();// }// } else {// log.log(Level.INFO, "第一次就搜到了");// urlContent = sb.toString();// log.log(Level.INFO, "搜到的内容是:" + urlContent);// }//// return urlContent;// }//// /**// * 得到那个Post方法// * @return POST方法// */// private static PostMethod postMethod() {// PostMethod post = new PostMethod("http://www.jpwy.net/gc/search.php");// post.addRequestHeader("Host", "www.jpwy.net");// post.addRequestHeader("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.9) Gecko/20071025 Firefox/2.0.0.9");// post.addRequestHeader("Accept", "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5");// post.addRequestHeader("Accept-Language", "zh-cn,zh;q=0.5");// post.addRequestHeader("Keep-Alive", "300");// post.addRequestHeader("Connection", "keep-alive");// post.addRequestHeader("Referer", "http://www.jpwy.net/gc/");// post.addParameter("submit", "歌词搜索");// return post;// } /** * 从一个流里面得到这个流的字符串 * 表现形式 * @param is 流 * @return 字符串 */ private static String getString(InputStream is) { InputStreamReader r = null; try { StringBuilder sb = new StringBuilder(); //TODO 这里是固定把网页内容的编码写在GBK,应该是可设置的 r = new InputStreamReader(is, "GBK"); char[] buffer = new char[128]; int length = -1; while ((length = r.read(buffer)) != -1) { sb.append(new String(buffer, 0, length)); } return sb.toString(); } catch (Exception ex) { Logger.getLogger(Util.class.getName()).log(Level.SEVERE, null, ex); return ""; } finally { try { r.close(); } catch (Exception ex) { Logger.getLogger(Util.class.getName()).log(Level.SEVERE, null, ex); } } } /** * 秒数转成00:00之类的字符串 * @param sec 秒数 * @return 字符串 */ public static String secondToString(int sec) { DecimalFormat df = new DecimalFormat("00"); StringBuilder sb = new StringBuilder(); sb.append(df.format(sec / 60)).append(":").append(df.format(sec % 60)); return sb.toString(); } /** * 得到URL的内容,最好是只限百度使用 * @param url URL * @return 内容,可能是NULL * @throws java.lang.Exception */ private static String getURLContent(String url) throws IOException { HttpClient http = new HttpClient(); Config config = Config.getConfig(); if (config.isUseProxy()) { if (config.getProxyUserName() != null && config.getProxyPwd() != null) { http.getState().setProxyCredentials( new AuthScope(config.getProxyHost(), Integer.parseInt(config.getProxyPort())), new UsernamePasswordCredentials(config.getProxyUserName(), config.getProxyPwd())); } http.getHostConfiguration().setProxy(config.getProxyHost(), Integer.parseInt(config.getProxyPort())); } http.getParams().setContentCharset("GBK"); GetMethod get = new GetMethod(); URI uri = new URI(url, false, "GBK"); get.setURI(uri); http.executeMethod(get); System.out.println(get.getResponseCharSet()); Header[] hs = get.getResponseHeaders(); for (Header h : hs) { System.out.print(h); } return getString(get.getResponseBodyAsStream()); } /** * 得到在百度上搜索到的歌词的内容 * @param key 关键内容 * @return 内容 * @throws java.lang.Exception */ private static String getBaidu_Lyric(String key) throws Exception { HttpClient http = new HttpClient(); Config config = Config.getConfig(); if (config.isUseProxy()) { if (config.getProxyUserName() != null && config.getProxyPwd() != null) { http.getState().setProxyCredentials( new AuthScope(config.getProxyHost(), Integer.parseInt(config.getProxyPort())), new UsernamePasswordCredentials(config.getProxyUserName(), config.getProxyPwd())); } http.getHostConfiguration().setProxy(config.getProxyHost(), Integer.parseInt(config.getProxyPort())); } http.getParams().setContentCharset("GBK"); GetMethod get = new GetMethod("http://www.baidu.com/s?wd=" + URLEncoder.encode("filetype:lrc " + key, "GBK")); get.addRequestHeader("Host", "www.baidu.com"); get.addRequestHeader("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11"); get.addRequestHeader("Accept", "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"); get.addRequestHeader("Accept-Language", "zh-cn,zh;q=0.5"); get.addRequestHeader("Keep-Alive", "300"); get.addRequestHeader("Referer", "http://www.baidu.com/"); get.addRequestHeader("Connection", "keep-alive"); int i = http.executeMethod(get); String temp = getString(get.getResponseBodyAsStream()); get.releaseConnection();// System.out.println("TEMP="+temp);// Matcher m = Pattern.compile("(?<=<b>【LRC】</b>).*?(?=文件格式)").matcher(temp); Matcher m = Pattern.compile("(?<='\\)\" href=\").*?(?=\" target=\"_blank\"><font size=\"3\">)").matcher(temp); if (m.find()) { String str = m.group(); String content = Util.getURLContent(str); System.out.println(content); return content; } else { return null; } } /** * 从网页内容里面分析出歌手和歌曲,还有下载的地址 * @param input 给定的网页源码 * @return 分析出来的列表 */ private static List<SearchResult> parseSearchResult(String input) { List<SearchResult> list = new ArrayList<SearchResult>(); Matcher m = Pattern.compile("(?<=<b>【LRC】</b>).*?(?=文件格式)").matcher(input); Pattern p = Pattern.compile("(?<='\\)\" href=\").*?(?=\" target=\"_blank\"><font size=\"3\">)"); while (m.find()) { String str = m.group(); String trimed = htmlTrim(str); int index = trimed.indexOf("-"); String title = "",artist = "",url = null; if (index != -1) { title = trimed.substring(0, index); artist = trimed.substring(index + 1); } Matcher m1 = p.matcher(str); if (m1.find()) { url = m1.group(); } if (url != null) { final String tUrl = url; SearchResult sr = new SearchResult(artist, title, new SearchResult.Task() { public String getLyricContent() throws IOException { return Util.getURLContent(tUrl); } }); list.add(sr); } } return list; } /** * 去除HTML标记 * @param str1 含有HTML标记的字符串 * @return 去除掉相关字符串 */ public static String htmlTrim(String str1) { String str = ""; str = str1; //剔出了<html>的标签 str = str.replaceAll("</?[^>]+>", ""); //去除空格 str = str.replaceAll("\\s", ""); str = str.replaceAll(" ", ""); str=str.replaceAll("&", "&"); str = str.replace(".", ""); str = str.replace("\"", "‘"); str = str.replace("'", "‘"); return str; } /** * 从百度去搜索歌词 * @param info 播放项 * @return 歌词内容,可能为NULL */ private static String getLyricBaidu(PlayListItem info) { try { //先全部匹配 String song = info.getTitle(); String name = info.getFormattedName(); String s = getBaidu_Lyric(name); if (s == null) { s = getBaidu_Lyric(song); return s; } else { return s; } } catch (Exception ex) { return null; } }//// /**// * 从精品网页这个网站去搜索歌词// * @param info 播放项// * @return 歌词内容,可能为NULL// */// private static String getLyricJPWY(PlayListItem info) {// try {// String urlContent = getSearchContent(info);// //如果urlContent不等于NULL,则说明找到了内容,这个时候就要分析了// if (urlContent != null) {// List<String> url = parseURLContent(urlContent);// if (url.size() > 0) {// String ly = getJPWY_Lyric(url.get(0));// return ly;// }// }// log.log(Level.INFO, "什么也没有找到");// return null;// } catch (IOException ex) {// return null;// }// } static enum Test { Album, TITLE; } public static void main(String[] args) throws Exception { Util.getBaidu_Lyric("昨夜星辰");// System.out.println(getJPWY_Lyric("http://fanwen.jpwy.net/gc/down.php?id=1256&ps=15&ti=%B7%C9%CE%E8&key=baad6d5f1f2a2088867c97095756f5d31207207472"));// String content="list.gif width=16 height=16></A></TD><TD align=middle><A href=\"jpwy.php?id=3802&ps=31&ti=%B1%F0%BF%DE%A3%AC%CE%D2%D7%EE%B0%AE%B5%C4%C8%CB&key=d9990c4d65af1111961a51fe5b8c27681207206999\" target=_blank><img border=0 src=image/lrc.gif>";// Matcher m = Pattern.compile("(?<=list.gif width=16 height=16></A></TD><TD align=middle><A href=\").*?(?=\" target=_blank\\>\\<img border=0 src=image\\/lrc.gif>)").matcher(content);// if(m.find()){// System.out.println(m.group());// }else{// System.out.println("没有匹配");// } // String s = Util.getSearchContent("Beyond", "");// Util.parseURLContentToSearchResult(s);// System.out.println(Util.getBaidu_Lyric("爱"));// String test = "search.php?singer=%B3%C2%BA%C6%C3%F1%26%B7%B6%B1%F9%B1%F9\">陈浩民&范冰冰</A></TD><TD> </TD><TD><A href=\"mp3.php?R1=V1&keyword=%D0%D2%B8%A3%C7%A7";// String test = "php?singer=%B3%C2%BA%C6%C3%F1%B7\">范冰冰</A></TD><TD><a href=\"search.php?album=";// String test = "php?singer=eind%B1%AB%BC%D2%BDeind%D6%CD%F4%B7%E5eind\">鲍家街-汪峰</A></TD><TD> ";// Matcher m = Pattern.compile("(?<=singer=([%[0-9a-fA-F]{2}|[\\w\\p{Punct}]]){0,100}\">).*?(?=</A></TD><TD>)").matcher(test);// if (m.find()) {// System.out.println(m.group());// }// Util.voteOpen(); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -