复制代码代码如下:
Импорт java.io.bufferedReader;
Импорт java.io.inputStreamReader;
импортировать java.net.url;
импортировать java.util.regex.matcher;
Импорт java.util.regex.pattern;
Импорт net.sf.json.jsonarray;
Импорт net.sf.json.jsonexception;
Импорт net.sf.json.jsonobject;
Общедоступные видеотул
{
Public Static Void Main (String [] args) бросает исключение
{
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 getVideourl (String htmlurl) бросает jsonexception {
// 正则表达式解析地址 , 取 ID
Шаблон p = pattern.compile (".*Id _ (// w+) //. Html");
Строка u = htmlurl;
Matchter 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 (ы);
Jsonarray jsonarr = jsobj.getjsonarray ("data");
System.out.println (jsobj);
JsonObject obj1 = jsonarr.getjsonObject (0);
String title = obj1.getString ("title");
двойное семя = obj1.getDouble ("SEED");
JsonObject obj2 = obj1.getjsonObject ("Streamfileids");
String mp4id = null;
String flvid = null;
String format = null;
пытаться
{
mp4id = obj2.getString ("mp4");
format = "mp4";
} catch (jsonexception e)
{
System.out.println ("没有 mp4 格式");
пытаться
{
flvid = obj2.getString ("flv");
format = "flv";
} Catch (JSonexception E1)
{
System.out.println ("没有 flv 格式");
возвращаться "";
}
}
String Realfileid = null;
if (format.equals ("mp4"))))
{
realfileid = getFileid (mp4id, seed);
} еще
{
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 (формат);
String Videourl = "";
для (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/" + формат
+ "/fileId/" + iDleft + string.format ("%1 $ 02x", i) + idright + "? k =" + k;
System.out.println (url);
Videourl+= url+"#";
}
вернуть Videourl;
}
Частная статическая строка getFileId (String fileId, Double Seed)
{
String Mixed = GetFileIdmixString (SEED);
String [] ids = fileId.split ("//*");
StringBuilder Realid = new StringBuilder ();
int idx;
для (int i = 0; i <ids.length; i ++)
{
idx = integer.parseint (ids [i]);
Realid.Append (mixed.charat (idx));
}
вернуть realid.toString ();
}
Общественная статическая строка gensid ()
{
int i1 = (int) (1000 + math.floor (math.random () * 999));
int i2 = (int) (1000 + math.floor (math.random () * 9000));
return System.currentTimeMillis () + "" + i1 + "" + i2;
}
Частная статическая строка getFileIdmixString (двойное семя)
{
StringBuilder mixed = new StringBuilder ();
StringBuilder Source = new StringBuilder ("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrStuvwxyz /////:._- 1234567890");
int index, len = source.length ();
для (int i = 0; i <len; ++ i)
{
Семя = (семя * 211 + 30031) % 65536;
index = (int) math.floor (Seed / 65536 * Source.length ());
Mixed.Append (source.charat (index));
Source.deleteCharat (индекс);
}
вернуть смешанный.toString ();
}
public Static String getContent (String Strurl) {
пытаться {
Url url = new URL (Strurl);
BufferedReader BR = новый BufferedReader (новый inputStreamReader (
url.openstream ()));
Строка s = "";
StringBuffer SB = new StringBuffer ("");
while ((s = br.readline ())! = null) {
SB.Append (ы);
}
br.close ();
вернуть sb.toString ();
} catch (Exception e) {
вернуть "Ошибка открыть URL:" + strurl;
}
}
}