百度音乐接口的应用

前面知道百度有一个音乐接口,这里在前面XML解析的基础上,实现能够实现输入歌曲名与歌手名,最后找到该歌曲的播放地址,并通过超链接的形式打开或播放。以下是实现过程:


(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的工具类,这个类有一个静态方法 String dom(File file),传递的参数是要解析的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();
			//将制定内容解析为XML文档,返回一个Document对象
			Document doc = builder.parse(file);
			//建立NodeList
			NodeList url_list = doc.getElementsByTagName("url");//取得url标签列表

			//取得url标签下的所有子标签
			
			//取得encode标签内容
			Element e1 = (Element)url_list.item(0);
			address = e1.getElementsByTagName("encode").item(0).getFirstChild().getNodeValue();//加歌曲地址

			//取得decode标签内容
			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的参数并传递到百度音乐接口中,将这个字符串新建URL并连接,然后通过IO流保存XML文件,最后调用前面的工具类得到播放地址。最后请求转发到另一个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();//发送连接
		
		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);//播放地址 调用解析Dom解析的类
		request.setAttribute("address",address);//设置属性
		//System.out.println(address);

		output.close();
		input.close();

		//请求转发
		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>

总结:上面的例子实现了输入歌曲名与歌手名来找到歌曲的地址。这个例子主要综合了前面学过的XML文件解析,IO流,Servlet,JSP等知识,虽然实现过程不复杂,但是还是遇到很多问题,比如连接URL对象,获取XML文件这是以前没有接触,但是还是边学边做的写完了程序。此外,最后一步超链接还是有一些问题,会出现403错误,还是要通过地址栏输入地址才能访问,这一步暂时还没解决。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值