复制代码代码如下:
导入java.io..bufferedreader;
导入java.io.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;
公共类录像带
{
公共静态void main(string [] args)引发异常
{
Videotools Manager = New Videotools();
字符串jsonurl = manager.getVideourl(“ http://v.youku.com/v_show/id_xmtgznda5otmy.html”);
system.out.println(jsonurl.split(“#”)。长度);
}
公共字符串getVideourl(字符串htmlurl)抛出jsonexception {
//正则表达式解析地址,ID
模式p = pattern.compile(“。*id _(// w+)//。html”);
字符串u = htmlurl;
Matcher M = P.Matcher(U);
字符串ID =“”;
如果(m.find()){
id = m.group(1);
}
system.out.println(id);
//字符串id =“ xmtgznda5otmy”;
字符串s = getContent(“ http://v.youku.com/player/getplaylist/videoids/”+id);
jsonObject jsobj = new jsonObject();
jsobj = jsobj.fromobject(s);
JSONARRAY JSONARR = JSOBJ.GEGJSONARRAY(“ data”);
system.out.println(jsobj);
jsonObject obj1 = jsonarr.getJsonObject(0);
字符串标题= obj1.getString(“ title”);
double seed = obj1.getDouble(“ seed”);
jsonObject obj2 = obj1.getJsonObject(“ streamfileids”);
字符串mp4id = null;
字符串flvid = null;
字符串格式= null;
尝试
{
mp4id = obj2.getString(“ mp4”);
格式=“ mp4”;
} catch(jsonexception e)
{
system.out.println(“没有mp4格式”);
尝试
{
flvid = obj2.getString(“ flv”);
格式=“ flv”;
}捕获(jsonexception e1)
{
system.out.println(“没有flv格式”);
返回 ””;
}
}
字符串realfileid = null;
if(format.equals(“ mp4”))
{
realfileid = getfileid(mp4id,seed);
} 别的
{
realfileid = getfileid(flvid,seed);
}
字符串idleft = realfileid.substring(0,8);
字符串idright = realfileid.substring(10);
字符串sid = gensid();
jsonObject obj3 = obj1.getJsonObject(“ segs”);
jsonarray mp4arr = obj3.getjsonarray(格式);
字符串vivenourl =“”;
for(int i = 0; i <mp4arr.size(); i ++)
{
jsonObject o = mp4arr.getJsonObject(i);
字符串k = o.getString(“ k”);
字符串url =“ http://f.youku.com/player/getflvpath/sid/” + sid +“ _” + string.format(“%1 $ 02X”,i) +“/st/st/sT/” +格式
+“/fileid/” + idleft + string.format(“%1 $ 02X”,i) + idright +“?k =” + k;
System.out.println(url);
viverourl+= url+“#”;
}
返回视频;
}
私有静态字符串getFileId(字符串fileid,double seed)
{
字符串混合= getFileIdMixString(seed);
字符串[] 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));
}
返回realid.tostring();
}
公共静态字符串Gensid()
{
int i1 =(int)(1000 + Math.floor(Math.random() * 999));
int i2 =(int)(1000 + Math.floor(Math.random() * 9000));
返回system.currentTimeMillis() +“” + i1 +“” + i2;
}
私有静态字符串GetFileIdMixString(双种子)
{
StringBuilder混合= new StringBuilder();
StringBuilder source = new StringBuilder(“ abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz ////////:__-- 1234567890”);
int index,len = source.length();
for(int i = 0; i <len; ++ i)
{
种子=(种子 * 211 + 30031)%65536;
index =(int)Math.floor(seed / 65536 * source.length());
混合。Append(source.Charat(index));
source.deletecharat(index);
}
返回混合。toString();
}
公共静态字符串getContent(string strurl){
尝试 {
URL URL =新URL(strurl);
BufferedReader br = new BufferedReader(new InputStreamReader(
url.openstream());
字符串s =“”;
StringBuffer SB = new StringBuffer(“”);
while((s = br.readline())!= null){
SB.Append(S);
}
br.close();
返回sb.tostring();
} catch(异常E){
返回“错误打开URL:” + strurl;
}
}
}