复制代码代码如下::
Import Java.io.BufferedReader;
importieren java.io.inputStreamReader;
importieren java.net.url;
Import Java.util.Regx.Matcher;
Import Java.util.Regex.Pattern;
import net.sf.json.jsonArray;
import net.sf.json.jsonexception;
import net.sf.json.jsonObject;
öffentliche Klasse Videotools
{
öffentliche statische Leere Main (String [] Args) löst Ausnahme aus
{
Videotools Manager = new VideoOols ();
String jsonurl = Manager.getVideOurl ("http://v.youku.com/v_show/id_xmtgznda5otmy.html");
System.out.println (jsonurl.split ("#"). Länge);
}
public String getVideOurl (String htmlurl) löst JSonexception {aus
// 正则表达式解析地址 , 取 id
Muster p = muster.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 ("Daten");
System.out.println (JSOBJ);
JsonObject obj1 = jsonarr.getJsonObject (0);
String title = obj1.getString ("title");
Double Seed = obj1.getDouble ("Samen");
JsonObject obj2 = obj1.getJsonObject ("StreamFileids");
String mp4id = null;
String flvid = null;
String format = null;
versuchen
{
mp4id = obj2.getString ("mp4");
format = "mp4";
} catch (jSonexception e)
{
System.out.println ("没有 MP4 格式");
versuchen
{
flvid = obj2.getString ("flv");
format = "flv";
} catch (jSonexception E1)
{
System.out.println ("没有 flv 格式");
zurückkehren "";
}
}
String realFileId = null;
if (format.equals ("mp4"))
{
RealFileId = getFileId (MP4ID, Samen);
} anders
{
RealFileId = getFileId (flvid, samen);
}
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 = "";
für (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+"#";
}
Wiedergabe von Videourl;
}
private statische String getFileId (String FileId, Double Seed)
{
String gemischt = getFileIdmixString (Samen);
String [] ids = fileId.split ("//*");
StringBuilder realid = new StringBuilder ();
int idx;
für (int i = 0; i <ids.length; i ++)
{
idx = integer.parseInt (ids [i]);
realid.Append (mixed.charat (idx));
}
return realid.tostring ();
}
öffentliche statische Stringgensid ()
{
int i1 = (int) (1000 + math.floor (math.random () * 999));
int i2 = (int) (1000 + math.floor (math.random () * 9000));
return system.currentTimemillis () + "" + i1 + "" + i2;
}
private statische String getFileIdmixString (Doppelsamen)
{
StringBuilder mixed = new StringBuilder ();
StringBuilder Source = new StringBuilder ("abcdefghijklMnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz //:._- 1234567890");
int index, len = source.length ();
für (int i = 0; i <len; ++ i)
{
Samen = (Samen * 211 + 30031) % 65536;
Index = (int) math.floor (Seed / 65536 * source.length ());
mixed.Append (Source.Charat (Index));
Source.DeletEcharat (Index);
}
return mixed.toString ();
}
public statische Zeichenfolge getContent (String StRURL) {
versuchen {
URL URL = neue URL (STRURL);
BufferedReader BR = New BufferedReader (neuer InputStreamReader (
url.openstream ()));
String S = "";
StringBuffer sb = new StringBuffer ("");
while (s = br.readline ())! = null) {
sb.Append (s);
}
Br.CLOSE ();
return sb.tostring ();
} catch (Ausnahme e) {
zurückgeben "Fehler öffnen URL:" + Sturl;
}
}
}