复制代码代码如下:
import java.io.bufferedReader;
import java.io.inputstreamreader;
import java.net.url;
import java.util.regex.matcher;
import java.util.regex.pattern;
importar net.sf.json.jsonarray;
importar net.sf.json.jsonexception;
importar net.sf.json.jsonObject;
Clase pública VideTools
{
Public static void main (string [] args) arroja excepción
{
VideOtools Manager = new VideOtools ();
String jsonurl = ganager.getVideOrl ("http://v.youku.com/v_show/id_xmtgznda5otmy.html");
System.out.println (jsonurl.split ("#"). Longitud);
}
public String getVideoUrl (String htmlurl) lanza JSonexception {
// 正则表达式解析地址 取 取 ID
Patrón p = patrón.compile (".*Id _ (// w+) //. Html");
Cadena u = htmlurl;
Matcher m = p.matcher (u);
Cadena id = "";
if (m.find ()) {
id = m.group (1);
}
System.out.println (id);
// string id = "xmtgznda5otmy";
Cadena S = GetContent ("http://v.youku.com/player/getplaylist/videoids/"+id);
JsonObject jsobj = new JsonObject ();
JSOBJ = JSOBJ.FROMObject (s);
JSONArray JSONARR = JSOBJ.GETJSONArray ("datos");
System.out.println (JSOBJ);
JsonObject obj1 = jsonarr.getjsonObject (0);
Título de cadena = obj1.getString ("título");
doble semilla = obj1.getDouble ("semilla");
JsonObject obj2 = obj1.getjsonObject ("streamfileids");
Cadena mp4id = null;
Cadena flvid = null;
Formato de cadena = nulo;
intentar
{
mp4id = obj2.getString ("mp4");
formato = "mp4";
} Catch (JSonexception E)
{
System.out.println ("没有 mp4 格式");
intentar
{
flVid = obj2.getString ("flv");
formato = "flv";
} Catch (JSonexception E1)
{
System.out.println ("没有 flv 格式");
devolver "";
}
}
Cadena realFileID = null;
if (format.equals ("mp4"))
{
realFileid = getFileid (mp4id, semilla);
} demás
{
realFileid = getFileid (flvid, semilla);
}
String Idleft = RealFileID.Substring (0, 8);
String Idright = RealFileID.Substring (10);
Cadena sid = GensID ();
JsonObject obj3 = obj1.getJsonObject ("segs");
JSONArray mp4arr = obj3.getjsonArray (formato);
String Videourl = "";
para (int i = 0; i <mp4arr.size (); i ++)
{
JsonObject o = mp4arr.getjsonObject (i);
Cadena k = o.getString ("k");
Cadena url = "http://f.youku.com/player/getflvpath/sid/" + sid + "_" + string.format ("%1 $ 02x", i) + "/st/" + format
+ "/fileid/" + inactivo + string.format ("%1 $ 02x", i) + idright + "? k =" + k;
System.out.println (URL);
Videourl+= url+"#";
}
devolver videourl;
}
Cadena estática privada getFileID (cadena fileid, doble semilla)
{
Cadena mixed = getFileidMixString (semilla);
String [] ids = fileID.split ("//*");
StringBuilder realID = new StringBuilder ();
int idx;
para (int i = 0; i <id.length; i ++)
{
idx = integer.parseInt (ids [i]);
realid.append (mixed.charat (idx));
}
return realid.ToString ();
}
Cadena estática pública Gensid ()
{
int i1 = (int) (1000 + math.floor (math.random () * 999));
int i2 = (int) (1000 + math.floor (math.random () * 9000));
return System.CurrentTimemillis () + "" + i1 + "" + i2;
}
cadena estática privada getFileidMixString (semilla doble)
{
StringBuilder Mixed = new StringBuilder ();
StringBuilder Source = new StringBuilder ("ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ ///:._- 1234567890");
int index, len = fuente.length ();
para (int i = 0; i <len; ++ i)
{
semilla = (semilla * 211 + 30031) % 65536;
índice = (int) math.floor (semilla / 65536 * fuente.length ());
mixed.append (fuente.charat (índice));
Source.DeletEtileCarat (índice);
}
return mixed.toString ();
}
public static string getContent (String Strurl) {
intentar {
Url url = nueva url (strurl);
BufferedReader BR = New BufferedReader (nuevo InputStreamReader (
url.OpenStream ()));
Cadena S = "";
StringBuffer sb = new StringBuffer ("");
while ((s = br.readline ())! = null) {
sb.append (s);
}
br.close ();
return sb.ToString ();
} Catch (Exception e) {
return "Error abre url:" + strurl;
}
}
}