复制代码代码如下:
impor java.io.bufferedReader;
impor java.io.inputStreamReader;
impor java.net.url;
impor java.util.regex.matcher;
impor java.util.regex.pattern;
impor net.sf.json.jsonarray;
impor net.sf.json.jsonexception;
impor net.sf.json.jsonobject;
Videools kelas publik
{
public static void main (string [] args) melempar pengecualian
{
VideoTools Manager = new Videotools ();
String jsonUrl = manager.getVideourl ("http://v.youku.com/v_show/id_xmtgznda5otmy.html");
System.out.println (jsonurl.split ("#"). Panjang);
}
String publik getVideourl (string htmlurl) melempar jSonexception {
// 正则表达式解析地址 , 取 id
Pola p = pola.compile (".*Id _ (// w+) //. Html");
String u = htmlurl;
Pencocokan m = p.matcher (u);
String id = "";
if (m.find ()) {
id = m.group (1);
}
System.out.println (id);
// string id = "xmtgznda5otmy";
String s = getContent ("http://v.youku.com/player/getplaylist/videoids/"+id);
JsonObject jsobj = new jsonObject ();
jsobj = jsobj.fromObject (s);
Jsonarray jsonarr = jsobj.getjsonarray ("data");
System.out.println (jsobj);
JsonObject obj1 = jsonarr.getjsonObject (0);
String title = obj1.getString ("title");
biji ganda = obj1.getDouble ("seed");
JsonObject obj2 = obj1.getjsonObject ("streamFileIDS");
String mp4id = null;
String flvid = null;
Format string = null;
mencoba
{
mp4id = obj2.getString ("mp4");
format = "mp4";
} catch (jsonexception e)
{
System.out.println ("没有 mp4 格式");
mencoba
{
flvid = obj2.getString ("flv");
format = "flv";
} catch (jsonexception e1)
{
System.out.println ("没有 flv 格式");
kembali "";
}
}
String realFileId = null;
if (format.equals ("mp4"))
{
RealFileID = getFileId (mp4id, seed);
} kalau tidak
{
RealFileId = getFileId (flvid, seed);
}
String idleft = realfileId.substring (0, 8);
String idright = realfileId.substring (10);
String sid = gensid ();
JsonObject obj3 = obj1.getjsonObject ("segs");
Jsonarray mp4arr = obj3.getjsonarray (format);
String videourl = "";
untuk (int i = 0; i <mp4arr.size (); i ++)
{
JsonObject o = mp4arr.getjsonObject (i);
String k = o.getString ("k");
String url = "http://f.youku.com/player/getflvpath/sid/" + sid + "_" + string.format ("%1 $ 02x", i) + "/st/" + format
+ "/fileid/" + idleft + string.format ("%1 $ 02x", i) + idRight + "? k =" + k;
System.out.println (URL);
Videourl+= url+"#";
}
mengembalikan videourl;
}
Private Static String GetFileID (String FileID, Double Seed)
{
String mixed = getFileIdmixString (seed);
String [] ids = fileid.split ("//*");
StringBuilder realId = new StringBuilder ();
int idx;
untuk (int i = 0; i <ids.length; i ++)
{
idx = integer.parseint (id [i]);
realId.append (mixed.charat (idx));
}
return realId.tostring ();
}
gensid string statis publik ()
{
int i1 = (int) (1000 + math.floor (math.random () * 999));
int i2 = (int) (1000 + math.floor (math.random () * 9000));
return system.currentTimeMillis () + "" + i1 + "" + i2;
}
Private Static String GetFileIDMixString (biji ganda)
{
StringBuilder Mixed = New StringBuilder ();
Sumber StringBuilder = StringBuilder baru ("ABCDEFGHIJKLMNOPQRSUVWXYZABCDEFGHIJKLMNOPQRSUVWXYZ ////:_- 1234567890");
indeks int, len = source.length ();
untuk (int i = 0; i <len; ++ i)
{
seed = (biji * 211 + 30031) % 65536;
index = (int) math.floor (seed / 65536 * source.length ());
Mixed.Append (Source.charat (indeks));
Source.DeleteCharat (indeks);
}
return mixed.tostring ();
}
public static string getContent (string strurl) {
mencoba {
Url url = url baru (strurl);
BufferedReader BR = BufferedReader baru (inputStreamReader baru (
url.openstream ()));
String s = "";
StringBuffer SB = New StringBuffer ("");
while ((s = br.readline ())! = null) {
SB.Append (s);
}
br.close ();
return sb.tostring ();
} catch (Exception e) {
return "error terbuka url:" + strurl;
}
}
}