百度音樂接口的應用
這里實現(xiàn)能夠?qū)崿F(xiàn)輸入歌曲名與歌手名,***找到該歌曲的播放地址,并通過超鏈接的形式打開或播放。以下是實現(xiàn)過程:
(1)、首先是一個JSP,接收歌曲名與歌手名,并提交給Servlet處理。
- <%@ page contentType="text/html;charset=GBK" pageEncoding="GBK"%>
 - <html>
 - <body>
 - <center>
 - <h3><font color="green">輸入歌手和歌曲名找歌曲</font></h3>
 - <form action="music.do" method="post">
 - 歌手名:<input type="text" name="person_name"><br>
 - 歌曲名:<input type="text" name="music_name"><br>
 - <input type="submit" value="下載歌曲">
 - </form>
 - </center>
 - </body>
 - </html>
 
(2)、編寫解析DOM的工具類,這個類有一個靜態(tài)方法 String dom(File file),傳遞的參數(shù)是要解析的XML文件,返回值是百度音樂的地址。
- package cn.guet.hj.servlet;
 - import javax.xml.parsers.*;
 - import org.w3c.dom.*;
 - import java.io.*;
 - /**
 - * 解析百度音樂掌門的XML
 - **/
 - public class MusicDom{
 - //解析DOM
 - public static String dom(File file){
 - String address="";//歌曲的實際地址
 - try{
 - //建立工廠類
 - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
 - //建立Builder對象
 - DocumentBuilder builder = factory.newDocumentBuilder();
 - //將制定內(nèi)容解析為XML文檔,返回一個Document對象
 - Document doc = builder.parse(file);
 - //建立NodeList
 - NodeList url_list = doc.getElementsByTagName("url");//取得url標簽列表
 - //取得url標簽下的所有子標簽
 - //取得encode標簽內(nèi)容
 - Element e1 = (Element)url_list.item(0);
 - address = e1.getElementsByTagName("encode").item(0).getFirstChild().getNodeValue();//加歌曲地址
 - //取得decode標簽內(nèi)容
 - Element e2 = (Element)url_list.item(0);
 - address += "/"+e2.getElementsByTagName("decode").item(0).getFirstChild().getNodeValue();//加歌曲名
 - }catch(Exception e){
 - e.printStackTrace();
 - }
 - return address;
 - }
 - }
 
(3)、編寫Servlet,處理JSP傳遞來的請求,這里主要覆寫HttpServlet的doGet與doPost方法。我們將獲取JSP的參數(shù)并傳遞到百度音樂接口中,將這個字符串新建URL并連接,然后通過IO流保存XML文件,***調(diào)用前面的工具類得到播放地址。***請求轉(zhuǎn)發(fā)到另一個JSP中。
- package cn.guet.hj.servlet;
 - import javax.servlet.*;
 - import javax.servlet.http.*;
 - import java.io.*;
 - import java.net.*;
 - /**
 - ** 接收歌曲名與歌手名 處理請求
 - **/
 - public class MusicServlet extends HttpServlet{
 - //處理Get請求
 - public void doGet(HttpServletRequest request,HttpServletResponse response)throws IOException,ServletException{
 - request.setCharacterEncoding("GBK");
 - String person_name = request.getParameter("person_name");
 - String music_name = request.getParameter("music_name");
 - //將會返回歌曲信息的XML
 - String url_str = "http://box.zhangmen.baidu.com/x?op=12&count=1&title="+music_name+"$$"+person_name+"$$$$";
 - URL url = new URL(url_str);//新建URL對象
 - URLConnection conn = url.openConnection();//連接對象
 - conn.connect();//發(fā)送連接
 - InputStream input = conn.getInputStream();//獲取目的的輸入流
 - File file = new File("D:"+File.separator+music_name+".xml");
 - OutputStream output = new FileOutputStream(file);//輸出流
 - byte []b = new byte[20240];
 - int len = input.read(b);
 - output.write(b,0,len);
 - //Dom解析
 - String address = MusicDom.dom(file);//播放地址 調(diào)用解析Dom解析的類
 - request.setAttribute("address",address);//設置屬性
 - //System.out.println(address);
 - output.close();
 - input.close();
 - //請求轉(zhuǎn)發(fā)
 - RequestDispatcher view = request.getRequestDispatcher("music_play.jsp");
 - view.forward(request,response);
 - }
 - //處理Post請求
 - public void doPost(HttpServletRequest request,HttpServletResponse response)throws IOException,ServletException{
 - this.doGet(request,response);
 - }
 - }
 
(4)、寫JSP頁面,這里主要是一個超鏈接,連接到音樂地址。
- <%@ page language="java" contentType="text/html;charset=GBK" pageEncoding="GBK"%>
 - <%@ page import="java.net.*"%>
 - <%@ page import="java.io.*"%>
 - <html>
 - <body>
 - <a href="${address}" target="_blank"><h4><font color="red">播放音樂</font></h4></a>
 - </body>
 - </html>
 
總結(jié):上面的例子實現(xiàn)了輸入歌曲名與歌手名來找到歌曲的地址。這個例子主要綜合了前面學過的XML文件解析,IO流,Servlet,JSP等知識,雖然實現(xiàn)過程不復雜,但是還是遇到很多問題,比如連接URL對象,獲取XML文件這是以前沒有接觸,但是還是邊學邊做的寫完了程序。此外,***一步超鏈接還是有一些問題,會出現(xiàn)403錯誤,還是要通過地址欄輸入地址才能訪問,這一步暫時還沒解決。















 
 
 



 
 
 
 