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 以降はすべて無視できます。ブラウザでも同様の情報を取得できます。それ以来、解析の考え方は、ビデオ リンクから vid を抽出し、http://v.iask.com/v_play.php?vid= を使用して 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 extends DefaultHandler {
プライベート List<Video> ビデオ = null;
プライベートビデオ video = null;
private Long timeLength = null;
プライベート文字列タグ = null;
@オーバーライド
public void startDocument() は SAXException をスローします {
ビデオ = 新しい ArrayList<Video>();
}
@オーバーライド
public void startElement(String uri, String localName, String qName,
属性attributes) throws SAXException {
if ("durl".equals(qName)) {
ビデオ = 新しいビデオ();
}
タグ = qName;
}
@オーバーライド
public void endElement(String uri, String localName, String qName)
SAXException をスローします {
if ("durl".equals(qName)) {
videos.add(ビデオ);
ビデオ = null;
}
タグ = null;
}
@オーバーライド
public void 文字(char[] ch, int start, int length)
SAXException をスローします {
if (タグ != null) {
文字列データ = new String(ch, start, length);
if ("timelength".equals(tag)) {
timeLength = Long.valueOf(データ);
else if ("order".equals(tag)) {
video.setOrder(Integer.valueOf(data));
else if ("url".equals(tag)) {
video.setUrl(データ);
else if ("length".equals(tag)) {
video.setLength(Integer.valueOf(data));
}
}
}
public List<Video> getVideos() {
ビデオを返す。
}
public long getLength() {
timeLength を返します。
}
}
Video クラスは私が定義したデータ モデルです。 main 関数では、sax ファクトリを呼び出してパーサーをインスタンス化するだけです。
次のようにコードをコピーします。
SAXParserFactory sf = SAXParserFactory.newInstance();
SAXParser sp = sf.newSAXParser();
XMLSaxReader リーダー = new XMLSaxReader();
InputStream in_withcode = new ByteArrayInputStream(
xml.getBytes("UTF-8"));//xml は取得したばかりの XML ファイルで、文字列型となります。
sp.parse(in_withcode, リーダー);
videos=reader.getVideos();//ビデオリストを取得
timeLength=reader.getLength();//ビデオの長さを取得する
System.out.println(ビデオ);
XML ファイルには他にも多くの情報が含まれており、必要に応じて解析できます。