复制代码代码如下:
Importer java.io.bufferedReader;
Importer java.io.inputStreamReader;
Importer java.net.url;
import java.util.regex.matcher;
import java.util.regex.pattern;
importer net.sf.json.jsonArray;
importer net.sf.json.jsonexception;
importer net.sf.json.jsonObject;
Class Public VideoTols
{
public static void Main (String [] args) lève une exception
{
VideoTools Manager = new VideoTools ();
String jsonUrl = manager.getvideourl ("http://v.youku.com/v_show/id_xmtgznda5otmy.html");
System.out.println (JSONURL.Split ("#"). Length);
}
public String getVideOrl (String htmlurl) lève JSonexception {
// 正则表达式解析地址 , 取 ID
Pattern p = motifs.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 ("Data");
System.out.println (JSOBJ);
JSONObject obj1 = jsonarr.getjsonObject (0);
String title = obj1.getString ("Title");
Double Seed = Obj1.getDouble ("Seed");
JSONObject obj2 = obj1.getjsonObject ("StreamFileids");
String mp4id = null;
String flvid = null;
Format de chaîne = null;
essayer
{
mp4id = obj2.getString ("MP4");
format = "MP4";
} Catch (JSONException E)
{
System.out.println ("没有 MP4 格式");
essayer
{
flvid = obj2.getString ("flv");
format = "flv";
} Catch (JSONException E1)
{
System.out.println ("没有 flv 格式");
retour "";
}
}
String realFileId = null;
if (format.equals ("mp4"))
{
realFileId = getFileId (MP4ID, semence);
} autre
{
realFileId = getFileId (flvid, semence);
}
String idleft = realFileId.SubString (0, 8);
String idRight = realFileId.SubString (10);
String sid = gensid ();
JSONObject obj3 = obj1.getjsonObject ("segs");
JSONArray mp4arr = obj3.getjsonArray (format);
Chaîne videourl = "";
pour (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 + "#";
}
retourner videourl;
}
String statique privé getFileId (String FileId, Double Seed)
{
String mixte = getFileIdMixString (semence);
String [] ids = fileId.split ("// *");
StringBuilder realId = new StringBuilder ();
int idx;
pour (int i = 0; i <ids.length; i ++)
{
idx = Integer.ParseInt (ids [i]);
realid.append (mixte.charat (idx));
}
return realId.toString ();
}
String statique public 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 statique privé getFileIdMixString (Double Seed)
{
StringBuilder mixte = new StringBuilder ();
StringBuilder Source = new StringBuilder ("ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ ///:._- 1234567890");
int index, len = source.length ();
pour (int i = 0; i <len; ++ i)
{
graine = (graine * 211 + 30031)% 65536;
index = (int) math.floor (semence / 65536 * source.length ());
mixte.APPEND (source.Charat (index));
source.deletecharat (index);
}
retour mixte.toString ();
}
String statique public getContent (String Strurl) {
essayer {
Url url = nouvelle URL (strurl);
BufferedReader Br = new BufferedReader (New InputStreamReader (
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 Open URL:" + strurl;
}
}
}