Для иллюстрации используйте пример, например этот http://video.sina.com.cn/v/b/75314002-1648211320.html.
Откройте его с помощью Firefox, включите Firebug и получите следующую информацию.
что в этом запросе
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
В ответе, который мы получаем, содержится нужная нам информация в формате XML, в которой vid — это красная часть выше, а все, что следует за uid, можно игнорировать. Мы напрямую вводим http://v.iask.com/v_play.php?vid=75314002 в поле. браузер. Вы все равно можете получить ту же информацию. С тех пор идея парсинга стала ясна. Извлеките видео из ссылки на видео, используйте http://v.iask.com/v_play.php?vid=, чтобы получить xml-файл, и разберите xml-файл, чтобы получить реальный адрес видео.
Ниже приведен код для анализа xml с использованием sax для анализа xml. Сначала определите программу чтения XML.
Скопируйте код кода следующим образом:
пакет hdu.fang.parser;
импортировать hdu.fang.model.Video;
импортировать java.util.ArrayList;
импортировать java.util.List;
импортировать org.xml.sax.Attributes;
импортировать org.xml.sax.SAXException;
импортировать org.xml.sax.helpers.DefaultHandler;
публичный класс XMLSaxReader расширяет DefaultHandler {
частный список<видео> видео = null;
частное видео видео = ноль;
частный Long timeLength = null;
частный строковый тег = ноль;
@Override
public void startDocument() выдает исключение SAXException {
видео = новый ArrayList<Video>();
}
@Override
public void startElement(String uri, String localName, String qName,
Атрибуты атрибутов) выдает SAXException {
если ("durl".equals(qName)) {
видео = новое видео ();
}
тег = qName;
}
@Override
public void endElement (String uri, String localName, String qName)
выдает SAXException {
если ("durl".equals(qName)) {
видео.добавить(видео);
видео = ноль;
}
тег = ноль;
}
@Override
публичные недействительные символы (char[] ch, int start, int length)
выдает SAXException {
если (тег != ноль) {
Строковые данные = новая строка (ch, начало, длина);
if ("timelength".equals(тег)) {
timeLength = Long.valueOf(данные);
} else if ("order".equals(tag)) {
video.setOrder(Integer.valueOf(данные));
} else if ("url".equals(tag)) {
видео.setUrl(данные);
} else if ("length".equals(tag)) {
video.setLength(Integer.valueOf(данные));
}
}
}
общедоступный список <Видео> getVideos() {
вернуть видео;
}
общественный длинный getLength() {
время возвратаДлина;
}
}
Класс Video — это модель данных, определенная мной. В основной функции нам нужно только вызвать фабрику sax, чтобы создать экземпляр синтаксического анализатора.
Скопируйте код кода следующим образом:
SAXParserFactory sf = SAXParserFactory.newInstance();
SAXParser sp = sf.newSAXParser();
Читатель XMLSaxReader = новый XMLSaxReader();
InputStream in_withcode = новый ByteArrayInputStream(
xml.getBytes("UTF-8"));//xml — это только что полученный XML-файл, введите String
sp.parse(in_withcode, читатель);
videos=reader.getVideos();//Получить список видео
timeLength=reader.getLength();//Получить длину видео
System.out.println(видео);
В XML-файле содержится много другой информации, которую можно проанализировать в соответствии с вашими потребностями.