复制代码代码如下:
importar java.io.bufferedReader;
importar java.io.inputStreamReader;
importar java.net.url;
importar java.util.regex.matcher;
importar java.util.regex.pattern;
importação net.sf.json.jsonArray;
importação net.sf.json.jsonexception;
importação net.sf.json.jsonObject;
Classe pública Videotools
{
public static void main (string [] args) lança exceção
{
Videotools Manager = new Videotools ();
String jsonurl = gerente.getVideourl ("http://v.youku.com/v_show/id_xmtgznda5otmy.html");
System.out.println (jsonurl.split ("#"). Comprimento);
}
public string getVideourl (string htmlurl) lança Jsonexception {
// 正则表达式解析地址 , 取 id
Padrão p = padrão.compile (".*Id _ (// w+) //. Html");
String u = htmlurl;
Matcher 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 ("dados");
System.out.println (JSOBJ);
JsonObject obj1 = jsonarr.getjsonObject (0);
Title string = obj1.getString ("title");
semente dupla = obj1.getDouble ("semente");
JsonObject obj2 = obj1.getjsonObject ("streamfileids");
String mp4id = null;
String flvid = null;
String format = null;
tentar
{
mp4id = obj2.getString ("mp4");
format = "mp4";
} catch (Jsonexception e)
{
System.out.println ("没有 mp4 格式");
tentar
{
flvid = obj2.getString ("flv");
format = "flv";
} catch (Jsonexception e1)
{
System.out.println ("没有 flv 格式");
retornar "";
}
}
String realfileId = null;
if (format.equals ("mp4")))
{
realfileId = getFileId (mp4id, semente);
} outro
{
realfileId = getFileId (flvid, semente);
}
String idleft = realfileId.substring (0, 8);
String idright = realfileId.substring (10);
String sid = gensid ();
JsonObject obj3 = obj1.getjsonObject ("segs");
JsonArray mp4arr = obj3.getjsonArray (formato);
String videourl = "";
for (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/" + formato
+ "/fileid/" + idleft + string.format ("%1 $ 02x", i) + idright + "? k =" + k;
System.out.println (URL);
Videourl+= url+"#";
}
retornar videourl;
}
String estática privada getFileId (string fileid, semente dupla)
{
String mixed = getFileIdMixString (semente);
String [] ids = fileid.split ("//*");
StringBuilder realid = new StringBuilder ();
int idx;
for (int i = 0; i <ids.length; i ++)
{
idx = Integer.parseint (ids [i]);
realid.append (mixed.charat (idx));
}
retornar realid.toString ();
}
public static string gensid ()
{
int i1 = (int) (1000 + math.floor (math.random () * 999));
int i2 = (int) (1000 + math.floor (math.random () * 9000));
return system.currenttimemillis () + "" + i1 + "" + i2;
}
String estática privada getFileIdMixString (semente dupla)
{
Stringbuilder mixed = new StringBuilder ();
StringBuilder Source = new StringBuilder ("abcdefghijklmnopqrStuvwxyzabcdefghijklmnopqrstuvwxyz ///:._- 1234567890");
Int índice, len = fonte.Length ();
para (int i = 0; i <len; ++ i)
{
semente = (semente * 211 + 30031) % 65536;
índice = (int) math.floor (semente / 65536 * fonte.length ());
mixed.append (fonte.charat (índice));
fonte.deleteCharat (índice);
}
return mixed.toString ();
}
public static string getContent (string strurl) {
tentar {
Url url = novo url (strurl);
BUBLEREDERRADER BR = new BufferredReader (new InputStreamReader (
url.openstream ()));
String s = "";
StringBuffer sb = new StringBuffer ("");
while ((s = Br.readline ())! = null) {
sb.append (s);
}
br.close ();
return sb.toString ();
} catch (Exceção e) {
Retornar "Erro Abrir URL:" + Strurl;
}
}
}