📄 musicparser.java
字号:
package edu.jlu.fuliang;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import org.cyberneko.html.parsers.DOMParser;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
public class MusicParser {
List<MusicEntity> list = new ArrayList<MusicEntity>();
public List<MusicEntity> doPaser(InputStream is) {
if(is == null)
return list;
DOMParser htmlParser = new DOMParser();
InputSource inputSource = new InputSource(is);
try {
htmlParser.parse(inputSource);
is.close();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Node node = htmlParser.getDocument();
return parseMusics(node);
}
/*
* 从页面中提取出歌曲的链接、专辑、歌手信息
*/
private List<MusicEntity> parseMusics(Node node) {
String link,name;
int nodeType = node.getNodeType();
if (nodeType == Node.ELEMENT_NODE) {
String nodeName = node.getNodeName();
if ("A".equals(nodeName)) {
MusicEntity music = new MusicEntity();
link = getAttributeText(node, "href");
music.setLink(link);
if(link != null){
if(isMusicLink(link)){
processParserMusicLink(node,music);
}else if(isSongerLink(link)){
processParserSongerLink(node,music);
}else if(isAlbumLink(link)){
processParserAbumLink(node,music);
}
}
}
}
Node child = node.getFirstChild();
while(child != null){
parseMusics(child);
child = child.getNextSibling();
}
return list;
}
private void processParserMusicLink(Node node,MusicEntity music){
Node child = node.getFirstChild();
if(child != null){
if( child.getNodeName().toLowerCase().equals("font")){
Node musicNameNode = child.getFirstChild();
String name = musicNameNode.getTextContent();
music.setName(name);
}else{
music.setName(child.getTextContent());
}
list.add(music);
}
}
private void processParserSongerLink(Node node,MusicEntity music){
Node child = node.getFirstChild();
if(child != null){
if( child.getNodeName().toLowerCase().equals("font")){
Node songerNode = child.getFirstChild();
if(list.size() != 0){
music = list.get(list.size()-1);
music.setAlbum(songerNode.getTextContent());
}
}else{
if(list.size() != 0){
music = list.get(list.size()-1);
music.setSonger(child.getTextContent());
}
}
}
}
private void processParserAbumLink(Node node,MusicEntity music){
Node child = node.getFirstChild();
if(child != null){
if( child.getNodeName().toLowerCase().equals("font")){
Node albumNode = child.getFirstChild();
if(list.size() != 0){
music = list.get(list.size()-1);
music.setAlbum(albumNode.getTextContent());
}
}else{
if(list.size() != 0){
music = list.get(list.size()-1);
music.setAlbum(child.getTextContent());
}
}
}
}
private String getAttributeText(Node node, String attributeName) {
String text = null;
if (node.hasAttributes()) {
Node attributeNode = node.getAttributes().getNamedItem(
attributeName);
if (attributeNode != null) {
text = attributeNode.getNodeValue();
}
}
return text;
}
private boolean isSongerLink(String link) {
return link.startsWith(Config.getLegalSongerUrl());
}
private boolean isAlbumLink(String link) {
return link.startsWith(Config.getLegalAlbumUrl());
}
private boolean isMusicLink(String link) {
return link.startsWith(Config.getLegalMusicUrl());
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -