复制代码代码如下:
استيراد 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 ؛
فئة عامة في أشرطة الفيديو
{
الفراغ الثابت العام (سلسلة [] args) يلقي الاستثناء
{
manager videotools = new videotools () ؛
String jsonurl = manager.getVideourl ("http://v.youku.com/v_show/id_xmtgznda5otmy.html") ؛
System.out.println (jsonurl.split ("#"). الطول) ؛
}
السلسلة العامة getVideourl (سلسلة htmlurl) يلقي jsonexception {
// 正则表达式解析地址 , 取 id
pattern p = pattern.compile (".*id _ (// w+) //. html") ؛
سلسلة u = htmlurl ؛
matcher m = p.matcher (u) ؛
معرف السلسلة = "" ؛
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 ("البيانات") ؛
System.out.println (JSOBJ) ؛
jsonobject obj1 = jsonarr.getjsonobject (0) ؛
عنوان السلسلة = obj1.getString ("title") ؛
بذرة مزدوجة = obj1.getDouble ("البذور") ؛
jsonobject obj2 = obj1.getJsonObject ("StreamFileIds") ؛
سلسلة mp4id = فارغة ؛
سلسلة flvid = فارغة ؛
تنسيق السلسلة = فارغ ؛
يحاول
{
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 格式") ؛
يعود ""؛
}
}
سلسلة relefileId = فارغة ؛
if (format.equals ("mp4"))
{
relefileId = getFileId (mp4id ، البذور) ؛
} آخر
{
relefileId = getFileId (flvid ، البذور) ؛
}
سلسلة idleft = realFileId.SubString (0 ، 8) ؛
سلسلة idright = realFileId.SubString (10) ؛
String SID = Gensid () ؛
jsonobject obj3 = obj1.getJsonObject ("segs") ؛
jsonarray mp4arr = obj3.getjsonarray (format) ؛
سلسلة videourl = "" ؛
لـ (int i = 0 ؛ i <mp4arr.size () ؛ i ++)
{
jsonobject o = mp4arr.getjsonobject (i) ؛
سلسلة k = o.getString ("k") ؛
url url = "http://f.youku.com/player/getflvpath/sid/" + sid + "_" + string.format ("٪ 1 $ 02x" ، i) + "/"
+ "/fileid/" + idleft + string.format ("٪ 1 $ 02x" ، i) + idright + "؟ k =" + k ؛
System.out.println (url) ؛
videourl+= url+"#" ؛
}
إرجاع videourl ؛
}
سلسلة ثابتة خاصة getFileId (سلسلة ملفات ، بذرة مزدوجة)
{
سلسلة مختلطة = getFileIdMixString (البذور) ؛
string [] ids = fileid.split ("//*") ؛
stringBuilder realId = new StringBuilder () ؛
int idx ؛
لـ (int i = 0 ؛ i <ids.length ؛ i ++)
{
idx = integer.parseint (ids [i]) ؛
RealId.Append (milect.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 (INDEX) ؛
}
إرجاع milect.toString () ؛
}
السلسلة الثابتة العامة getContent (String Strurl) {
يحاول {
url url = url new url (strurl) ؛
BufferedReader BR = جديد BufferedReader (New InportStreamReader (
url.openstream ())) ؛
سلسلة s = "" ؛
StringBuffer SB = New StringBuffer ("") ؛
بينما ((s = br.readline ())! = null) {
sb.append (s) ؛
}
br.close () ؛
إرجاع sb.tostring () ؛
} catch (استثناء e) {
إرجاع "خطأ فتح عنوان URL:" + Strurl ؛
}
}
}