import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.URLEncoder; import java.util.ArrayList; import java.util.regex.Matcher; import java.util.regex.Pattern; public class MusicSearch { public ArrayList<MP3Info> mSongs; /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub MusicSearch ms = new MusicSearch(); //ms.doDownload("http://mp3.baidu.com/m?f=3&rf=idx&tn=baidump3&ct=134217728&lf=&rn=&word=%CE%D2%D6%BB%CA%C7%B8%F6%B4%AB%CB%B5&lm=-1&oq=wo&rsp=0"); ms.doDownload("http://mp3.sogou.com/music.so?query=jolin+%B2%CC%D2%C0%C1%D5&as=false&st=&ac=1&pf=&_asf=mp3.sogou.com&_ast=1267805032&w=02009900&p=&class=1"); ms.displayMp3(); } private Integer doDownload(String urlStr){ //��ʼ�������б� mSongs = new ArrayList<MP3Info>(); try { URL url = new URL(urlStr); HttpURLConnection urlConn = (HttpURLConnection)url.openConnection(); urlConn.setRequestProperty("User-Agent", "Apache-HttpClient/UNAVAILABLE (java 1.4)"); urlConn.setConnectTimeout(12000); urlConn.connect(); InputStream stream = urlConn.getInputStream(); StringBuilder builder = new StringBuilder(8*1024); char[] buff = new char[4096]; //�����ڴ�ָ�����룬�������toString�ᵼ������ InputStreamReader is = new InputStreamReader(stream,"gb2312"); int len; while ((len = is.read(buff, 0, 4096)) > 0) { builder.append(buff, 0, len); } urlConn.disconnect(); String httpresponse = builder.toString(); //Pattern pattern = Pattern.compile("<td class=d><a href=\"([\\s\\S]*?)\" title=\""); Pattern pattern = Pattern.compile("<a pb=t class=mr style="); Matcher matcher = pattern.matcher(httpresponse); //Pattern pattern_artist = Pattern.compile("&si=.*?;;(.*?);;"); int count = 0; while(matcher.find()) { MP3Info mp3 = new MP3Info(); //��ȡ������ int nameStartPos = httpresponse.indexOf("\" action=\"listen\">", matcher.start())+"\" action=\"listen\">".length(); int nameEndPos = httpresponse.indexOf('<', nameStartPos); mp3.setName(httpresponse.substring(nameStartPos, nameEndPos)); //��ȡ������ int artistStartPos = httpresponse.indexOf("underline;\">", matcher.start())+"underline;\">".length(); int artistEndPos = httpresponse.indexOf("<",artistStartPos); mp3.setArtist(httpresponse.substring(artistStartPos, artistEndPos)); //��ȡר������ int albumStartPos = httpresponse.indexOf("target=_blank>", artistEndPos) + "target=_blank>".length(); int albumEndPos = httpresponse.indexOf("<", albumStartPos); mp3.setAlbum(httpresponse.substring(albumStartPos, albumEndPos)); //��ȡ�ļ���С int sizeStartPos = httpresponse.indexOf("<td align=center>", albumEndPos)+"<td align=center>".length(); int sizeEndPos = httpresponse.indexOf('<', sizeStartPos); mp3.setFSize(httpresponse.substring(sizeStartPos, sizeEndPos)); //��ȡ���� int linkStartPos = httpresponse.indexOf("window.open('", sizeEndPos)+"window.open('".length(); int linkEndPos = httpresponse.indexOf("&ac=1&c", linkStartPos)+"&ac=1&c".length(); String request = httpresponse.substring(linkStartPos, linkEndPos); mp3.setLink(getLink(request)); //��ȡ�����ٶ� int spdStartPos = httpresponse.indexOf("span class=\"spd", sizeEndPos)+"span class=\"spd".length(); int spdEndPos = spdStartPos+1; mp3.setRate(httpresponse.substring(spdStartPos, spdEndPos)); mSongs.add(mp3); count++; if(count >= 26) break; } if((mSongs!=null)&&(!mSongs.isEmpty())){ //��Ѱ������ʾ��Ϣ��Tao��������һҳ��link MP3Info mp3Tip = new MP3Info(); mp3Tip.bNull = true; mSongs.add(mp3Tip); } } catch (Exception e) { //ShowToastMessage("Network can not connect, please try again."); return null; } return 1; } private void displayMp3() { System.out.println("Total songs:" + mSongs.size()); for (MP3Info mp3 : mSongs) { System.out.println(mp3.name +" "+mp3.album+" "+mp3.artist+" "+mp3.fsize+ " "+mp3.rate+" "+mp3.link); } } private String getLink(String request) throws IOException { request = "http://mp3.sogou.com" + request; URL url = new URL(request); HttpURLConnection urlConn = (HttpURLConnection)url.openConnection(); urlConn.setRequestProperty("User-Agent", "Apache-HttpClient/UNAVAILABLE (java 1.4)"); urlConn.setConnectTimeout(12000); urlConn.connect(); InputStream stream = urlConn.getInputStream(); StringBuilder builder = new StringBuilder(8*1024); char[] buff = new char[4096]; //�����ڴ�ָ�����룬�������toString�ᵼ������ InputStreamReader is = new InputStreamReader(stream,"gb2312"); int len; while ((len = is.read(buff, 0, 4096)) > 0) { builder.append(buff, 0, len); } urlConn.disconnect(); String httpresponse = builder.toString(); int linkStartPos = httpresponse.indexOf("���ظ���\" href=\"")+"���ظ���\" href=\"".length(); int linkEndPos = httpresponse.indexOf('>', linkStartPos)-1; return httpresponse.substring(linkStartPos, linkEndPos); } }