复制代码代码如下 :
import java.io.bufferedReader;
import java.io.inputStreamReader;
import java.net.url;
import java.util.regex.matcher;
java.util.regex.pattern import;
import net.sf.json.jsonarray;
import net.sf.json.jsonexception;
import net.sf.json.jsonobject;
공개 클래스 비디오 툴
{
public static void main (String [] args)은 예외를 던집니다
{
VideoTools Manager = 새로운 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
Pattern P = Pattern.compile ( ".*id _ (// w+) //. html");
문자열 u = htmlurl;
매치 자 m = p.matcher (u);
문자열 id = "";
if (m.find ()) {
id = m.group (1);
}
System.out.println (id);
// String id = "xmtgznda5otmy";
문자열 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;
문자열 형식 = null;
노력하다
{
mp4id = obj2.getString ( "mp4");
형식 = "mp4";
} catch (jsonexception e)
{
System.out.println ( "没有 mp4 格式");
노력하다
{
flvid = obj2.getString ( "flv");
형식 = "flv";
} catch (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 (형식);
문자열 videourl = "";
for (int i = 0; i <mp4arr.size (); i ++)
{
jsonobject o = mp4arr.getJsonObject (i);
문자열 k = O.getString ( "k");
문자열 url = "http://f.youku.com/player/getflvvatppath/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+"#";
}
반환 videourl;
}
개인 정적 문자열 getFileId (문자열 파일드, 이중 시드)
{
문자열 mixed = getFileIdMixString (시드);
문자열 [] 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));
}
reture 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 ();
for (int i = 0; i <len; ++ i)
{
종자 = (종자 * 211 + 30031) % 65536;
index = (int) math.floor (seed / 65536 * source.length ());
mixed.append (source.charat (index));
Source.deletecharat (색인);
}
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 (들);
}
br.close ();
반환 sb.toString ();
} catch (예외 e) {
"오류 오픈 URL :" + strurl;
}
}
}