Use um exemplo para ilustrar, como este http://video.sina.com.cn/v/b/75314002-1648211320.html.
Abra-o com o Firefox, habilite o firebug e obtenha as seguintes informações.
que neste pedido
http://v.iask.com/v_play.php?vid=75314002&uid=1648211320&pid=478&tid=&plid=4001&prid=ja_7_3485822616&referrer=&ran=0.2936802236363292&r=video.sina.com.cn
A resposta que obtemos contém as informações xml que desejamos, das quais vid é a parte vermelha acima, e tudo depois de uid pode ser ignorado. Entramos diretamente em http://v.iask.com/v_play.php?vid=75314002 no. navegador Você ainda pode obter as mesmas informações. Desde então, a ideia de análise ficou clara. Extraia o vídeo do link do vídeo, use http://v.iask.com/v_play.php?vid= para obter o arquivo xml e analise o arquivo xml para obtenha o endereço de vídeo real.
A seguir está o código para analisar xml, usando sax para analisar xml. Primeiro defina o leitor xml.
Copie o código do código da seguinte forma:
pacote hdu.fang.parser;
importar hdu.fang.model.Video;
importar java.util.ArrayList;
importar java.util.List;
importar org.xml.sax.Attributes;
importar org.xml.sax.SAXException;
importar org.xml.sax.helpers.DefaultHandler;
classe pública XMLSaxReader estende DefaultHandler {
lista privada<Vídeo> vídeos = null;
vídeo privado vídeo = null;
privado Long timeLength = null;
etiqueta String privada = null;
@Substituir
public void startDocument() lança SAXException {
vídeos = new ArrayList<Vídeo>();
}
@Substituir
public void startElement(String uri, String localName, String qName,
Atributos atributos) lança SAXException {
if ("durl".equals(qNome)) {
vídeo = novo Vídeo();
}
tag = qNome;
}
@Substituir
public void endElement(String uri, String localName, String qName)
lança SAXException {
if ("durl".equals(qNome)) {
vídeos.add(vídeo);
vídeo = nulo;
}
tag = nulo;
}
@Substituir
caracteres públicos vazios (char[] ch, int start, int length)
lança SAXException {
if (tag! = nulo) {
Dados da string = new String(ch, início, comprimento);
if ("comprimento de tempo".equals(tag)) {
timeLength = Long.valueOf(dados);
} else if ("ordem".equals(tag)) {
video.setOrder(Integer.valueOf(dados));
} else if ("url".equals(tag)) {
video.setUrl(dados);
} else if ("comprimento".equals(tag)) {
video.setLength(Integer.valueOf(dados));
}
}
}
public List<Vídeo> getVideos() {
retornar vídeos;
}
público longo getLength() {
tempo de retornoComprimento;
}
}
A classe Video é um modelo de dados definido por mim. Na função principal, precisamos apenas chamar a sax factory para instanciar o analisador.
Copie o código do código da seguinte forma:
SAXParserFactory sf = SAXParserFactory.newInstance();
SAXParser sp = sf.newSAXParser();
Leitor XMLSaxReader = novo XMLSaxReader();
InputStream in_withcode = new ByteArrayInputStream(
xml.getBytes("UTF-8"));//xml é o arquivo xml que acabamos de obter, digite String
sp.parse(in_withcode, leitor);
videos=reader.getVideos();//Obter lista de vídeos
timeLength=reader.getLength();//Obtém a duração do vídeo
System.out.println(vídeos);
Existem muitas outras informações no arquivo xml, que podem ser analisadas de acordo com suas necessidades.