复制代码代码如下:
java.io.bufferedreaderをインポートします。
java.io.inputStreamReaderをインポートします。
java.net.urlをインポートします。
java.util.regex.matcherをインポートします。
java.util.regex.patternをインポートします。
net.sf.json.jsonarrayをインポートします。
net.sf.json.jsonexcectionをインポートします。
net.sf.json.jsonobjectをインポートします。
パブリッククラスVideoTools
{
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( "#")。長さ);
}
public string getVideourl(String HTMLURL)JSONEXCEPTION {
//正则表达式解析地址、取id
パターンP = pattern.compile( "。*id _(// w+)//。html");
文字列u = htmlurl;
Matcher M = P.Matcher(U);
文字列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);
文字列タイトル= obj1.getString( "title");
double seed = obj1.getDouble( "Seed");
jsonobject obj2 = obj1.getjsonobject( "streamfileids");
文字列mp4id = null;
文字列flvid = null;
string format = null;
試す
{
mp4id = obj2.getString( "mp4");
format = "mp4";
} catch(jsonexceptione)
{
system.out.println( "没有mp4格式");
試す
{
flvid = obj2.getString( "flv");
format = "flv";
} catch(jsonexception e1)
{
system.out.println( "没有flv格式");
戻る "";
}
}
文字列RealfileId = null;
if(format.equals( "mp4"))
{
realfileid = getFileId(mp4Id、seed);
} それ以外
{
realfileid = getFileId(flvid、seed);
}
string idleft = realfileid.substring(0、8);
文字列idright = realfileid.substring(10);
string sid = gensid();
jsonobject obj3 = obj1.getjsonobject( "segs");
jsonarray mp4arr = obj3.getjsonarray(format);
文字列videourl = "";
for(int i = 0; i <mp4arr.size(); i ++)
{
jsonobject o = mp4arr.getjsonobject(i);
文字列k = o.getString( "k");
string url = "http://f.youku.com/player/getflvpath/sid/" + sid + "_" + string.format( "%1 $ 02x"、i) + "/st/" + format
+ "/fileid/" + adleft + string.format( "%1 $ 02x"、i) + idright + "?k =" + k;
System.out.println(url);
videourl+= url+"#";
}
videourlを返します。
}
private static string getFileid(String fileid、double Seed)
{
文字列混合= getFileIdMixString(Seed);
string [] 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();
}
public static string 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();
for(int i = 0; i <len; ++ i)
{
Seed =(Seed * 211 + 30031)%65536;
index =(int)math.floor(seed / 65536 * source.length());
mixed.append(source.charat(index));
source.deletecharat(index);
}
return mixed.toString();
}
public static string getContent(string strurl){
試す {
url url = new 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();
return sb.tostring();
} catch(例外e){
"Error open url:" + strurlを返します。
}
}
}