手机
当前位置:查字典教程网 >编程开发 >Java >java获取优酷视频地址示例
java获取优酷视频地址示例
摘要:复制代码代码如下:importjava.io.BufferedReader;importjava.io.InputStreamReader;...

复制代码 代码如下:

import java.io.BufferedReader;

import java.io.InputStreamReader;

import java.net.URL;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

import net.sf.json.JSONArray;

import net.sf.json.JSONException;

import net.sf.json.JSONObject;

public class VideoTools

{

public static void main(String[] args) throws Exception

{

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) throws JSONException{

//正则表达式解析地址,取id

Pattern p = Pattern.compile(".*id_(w+).html");

String u = htmlUrl;

Matcher 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(s);

JSONArray jsonarr = jsobj.getJSONArray("data");

System.out.println(jsobj);

JSONObject obj1 = jsonarr.getJSONObject(0);

String title= obj1.getString("title");

double seed = obj1.getDouble("seed");

JSONObject obj2 = obj1.getJSONObject("streamfileids");

String mp4id = null;

String flvid = null;

String format = null;

try

{

mp4id = obj2.getString("mp4");

format = "mp4";

} catch (JSONException e)

{

System.out.println("没有MP4格式");

try

{

flvid = obj2.getString("flv");

format = "flv";

} catch (JSONException e1)

{

System.out.println("没有FLV格式");

return "";

}

}

String realfileid = null;

if (format.equals("mp4"))

{

realfileid = getFileID(mp4id, seed);

} else

{

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(format);

String VideoUrl="";

for (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/" + format

+ "/fileid/" + idLeft + String.format("%1$02X", i) + idRight + "?K=" + k;

System.out.println(url);

VideoUrl+=url+"#";

}

return VideoUrl;

}

private static String getFileID(String fileid, double seed)

{

String mixed = 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));

}

return 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;

}

private static String getFileIDMixString(double seed)

{

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) {

try {

URL url = new URL(strUrl);

BufferedReader br = new BufferedReader(new InputStreamReader(

url.openStream()));

String s = "";

StringBuffer sb = new StringBuffer("");

while ((s = br.readLine()) != null) {

sb.append(s);

}

br.close();

return sb.toString();

} catch (Exception e) {

return "error open url:" + strUrl;

}

}

}

【java获取优酷视频地址示例】相关文章:

java线程并发semaphore类示例

简单的用java实现读/写文本文件的示例

java获取web容器地址的方法

java通过ip获取客户端Mac地址的小例子

java加密解密示例分享

用java实现的获取优酷等视频缩略图的实现代码

java nio基础使用示例

Java线程优先级示例代码

java 四舍五入使java保留2位小数示例讲解

java获取日期的方法

精品推荐
分类导航