java获取优酷视频地址示例

代码如下:

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

}
}

(0)

相关推荐

  • java播放声音类和一个简单示例

    播放声音的类 复制代码 代码如下: import java.io.File;import java.io.IOException; import javax.sound.sampled.AudioFormat;import javax.sound.sampled.AudioInputStream;import javax.sound.sampled.AudioSystem;import javax.sound.sampled.DataLine;import javax.sound.sampled

  • Java程序中添加播放MIDI音乐功能的实现方法详解

    JAVA 在多媒体处理方面的确优势不大,但是我们在程序中有些时候又需要一些音乐,如果播放的音乐是wav等波形音频文件,又很大的话,所以背景音乐最好就是MIDI了,可是网上很多播放MIDI的教程都是简单的几句话的例子.没有考虑资源的释放问题,如果程序长久运行的话,就会出现内存越耗越多的情况,最后会抛出一个 java.lang.OutOfMemoryError..在MIDI的播放中,一个类是比较重要的,那就是 MidiSystem 类,负责整个MIDI播放设备等的管理,其实就是 Seqencer,它

  • (jsp/html)网页上嵌入播放器(常用播放器代码整理)

    这个其实很简单,只要在HTML上添加以上代码就OK了,前提是你的电脑上已经安装了播放器,如RealPlay. 复制代码 代码如下: <embed src="C:/mp3/10.19/画心.mp3" width="480" height="100"02. loop="false" autostart="false"> </embed> 还有更多的的播放器和设置可供选择: 页面插入REA

  • java制作仿微信录制小视频控件

    本文为用 MediaRecorder 录制小视频的控件,可以设置视频录制的时间.空间大小.初始时是否打开摄像头等. 此控件为组合控件,继承自 LinearLayout ,为防止出错,需实现 android.media.MediaRecorder.OnErrorListener 接口. 小视频录制界面 MovieRecorderView.java import java.io.File; import java.io.IOException; import java.util.Timer; imp

  • java实现优酷视频地址解析示例代码分享

    举个例子比较好理解,比如我现在要下http://v.youku.com/v_show/id_XNDM2Mjc0MzAw.html这个视频.这里我们要获得的是视频的id,就是XNDM2Mjc0MzAw这部分,这是一个视频唯一的,所以在解析的时候肯定会用到. 为了能看清楚youku视频的播放过程,可以使用火狐的插件firebug对网页进行跟踪,如下图. 可以看到有很多GET,我们要找的应该是以这个id作为参数的GET,在下面我们可以找到这个链接http://v.youku.com/player/ge

  • java制作仿微信视频播放控件

    此控件继承自 SurfaceView,利用 MediaPlayer 播放视频. 小视频播放界面 MoviePlayerView.java import java.io.IOException; import android.content.Context; import android.media.AudioManager; import android.media.MediaPlayer; import android.media.MediaPlayer.OnCompletionListene

  • java解析sina视频

    用一个例子来说明,比如这个http://video.sina.com.cn/v/b/75314002-1648211320.html.用火狐打开,开启firebug,得到如下信息. 其中在这个请求 http://v.iask.com/v_play.php?vid=75314002&uid=1648211320&pid=478&tid=&plid=4001&prid=ja_7_3485822616&referrer=&ran=0.29368022363

  • java音频播放示例分享(java如何播放音频)

    这是一份精简后的代码,能够支持的格式十分有限. 复制代码 代码如下: package com.hongyuan.test; import java.io.File;import java.io.IOException; import javax.sound.sampled.AudioFormat;import javax.sound.sampled.AudioInputStream;import javax.sound.sampled.AudioSystem;import javax.sound

  • jsp播放视频文件的方法总结

    本文实例讲述了jsp播放视频文件的方法.分享给大家供大家参考,具体如下: 1.avi格式 代码片断如下: JSP代码: <object id="video" width="400" height="200" border="0" classid="clsid:CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA"> <param name="ShowDispl

  • 实例解析使用Java实现基本的音频播放器的编写要点

    Java音频播放,因为必须依赖到本地环境,所以JAVA在音频处理方面优势不大,或者说打从Java体系开发时就没太多的考虑音频播放因素,要知道最早的Java 1.1版本中,没有后来的javax.sound包,音频只能通过Applet包调取-- 遗憾的是,在图形程序开发中,我们的程序却又难免要使用到背景音乐.效果音等配合图像操作,哎,这实在是Sun大神给我们开的一个不打不小的玩笑.万幸后来Sun大神开眼,提供了javax.sound包,才解救我们于水深火热当中~ 但是继之而来的问题是,在javax.

随机推荐