正则匹配酷6视频url后使用接口引用案例

通过酷6的一个转发接口,使用java正则来获取匹配酷6网大部分视频网址链接,抓取获得ip、flash、title等属性用于内嵌视频展示;关键代码是抓取数据,展示代码很简单。大致效果图如下:

引用视频:

展示视频:

1.抓取数据代码:

<span style="font-family:KaiTi_GB2312;font-size:18px;"> /**
     * 酷6新接口方法
     * add by yangkai
     * @param videoUrl
     * @return
     */
    protected VideoPropertyUnitForKu6fetchVideoForKu6New(String videoUrl) {
        String videoId = null;
        String videoTitle = null;
        String flashUrl = null;
        String imgUrl = null;
        String result = null;
        // 1.从接口获取xml数据
        try {
            // 先判断用户填写的几种url格式(目前发现的有10种格式可以兼容)
            if (StringUtils.isNotBlank(videoUrl)) {
                String ku6Url ="http://v.ku6.com/show/";
                //http://player.ku6.com/refer/flKjsasaK0W9fdCsFYO99A../v.swf
                // <embedsrc="http://player.ku6.com/refer/flKjsasaK0W9fdCsFYO99A../v.swf"width="480" height="400"allowscriptaccess="always" allowfullscreen="true"type="application/x-shockwave-flash"flashvars="from=ku6"></embed>
                if(videoUrl.contains("/refer/")) {
                    ku6Url += videoUrl.replace("http://","").split("/")[2] + ".html";
                } else if(videoUrl.contains("</script>")) { // <scriptdata-vid="flKjsasaK0W9fdCsFYO99A.."src="//player.ku6.com/out/v.js" data-width="480" data-height="400"></script>
                    ku6Url = patternUrl("<script\\s*data-vid=\"([^<>\"]*)\"\\s*[^<>]*>\\s*</script>",videoUrl.replace("http://", ""), ku6Url) +".html";
                } else if(videoUrl.contains("/film/")) { //http://v.ku6.com/film/show_136598/Jtj7tCVdd81bGIUyf39Few...html?hpsrc=1_35_1_1_0
                    videoUrl =videoUrl.replace("http://", "").split("\\?")[0];
                    ku6Url += videoUrl.split("/")[3];
                } else if(videoUrl.contains("topic.ku6.com")) { //http://topic.ku6.com/show-21451-xHZVk57-sZkcy5Mrf5MtSQ...html?st=5_1_0_1
                    ku6Url =patternUrl(".*http://topic\\.ku6\\.com/show-[^-]+-(.+\\.html).*",videoUrl, ku6Url);
                } else if (videoUrl.contains("my.ku6.com")) {// http://my.ku6.com/watch?v=HMvaiRJpdzhXBqqF9oMamQ..
                    ku6Url =patternUrl(".*http://my\\.ku6\\.com/watch\\?v=(.+).*", videoUrl,ku6Url) + ".html";
                } else if (videoUrl.contains("/special/")) {// http://my.ku6.com/watch?v=HMvaiRJpdzhXBqqF9oMamQ..
                    ku6Url =patternUrl(".*http://v\\.ku6\\.com/special/.+/(.+).*", videoUrl,ku6Url);
                } else if (videoUrl.contains("/mt/")) { //http://v.ku6.com/u/291222/mt/_SqfhQTRM1yRhmOZ.html
                    ku6Url =patternUrl(".*http://v\\.ku6\\.com/.+/.+/mt/(.+).*", videoUrl,ku6Url);
                } else {
                    ku6Url =patternUrl(".*http://v\\.ku6\\.com/show/(.+\\.html).*", videoUrl,ku6Url);
                }
                if (!StringUtils.equals(ku6Url,"http://v.ku6.com/show/")) {
                    StringBuffer sbUrl = newStringBuffer("http://v.ku6.com/repaste.htm?url=");
                    sbUrl.append(URLEncoder.encode(ku6Url,"utf-8"));
                    result = sendRequest(sbUrl.toString());
                }
            }
        } catch (UnsupportedEncodingExceptione) {
           logger.error(HuDongErrorCodeEnum.RemoteRequestError, "从接口获取数据失败", e);
        }
        // 2.解析xml数据,取得所需参数
        VideoPropertyUnitForKu6videoPropertyUnitForKu6 = null;
        try {
            if (StringUtils.isNotBlank(result)) {
                Document document =DocumentHelper.parseText(result);
                List<Element> root =document.getRootElement().elements();
                if (root != null &&root.size() > 0) {
                    for (Element i : root) {
                        videoId =i.element("vid").getTextTrim(); // id
                        imgUrl =i.element("coverurl").getTextTrim(); // img
                        flashUrl =i.element("flash").getTextTrim(); // flash
                        videoTitle =i.element("title").getTextTrim(); // title
                    }
                }
                // 拼装酷6视频对象
                videoPropertyUnitForKu6 = newVideoPropertyUnitForKu6();
                videoPropertyUnitForKu6.setSourceCode(flashUrl);
               videoPropertyUnitForKu6.setTitle(videoTitle);
               videoPropertyUnitForKu6.setVideoId(videoId);
               videoPropertyUnitForKu6.setImgUrl(imgUrl);
            }
        } catch (Exception e) {
            logger.error(HuDongErrorCodeEnum.RemoteRequestError,"解析xml失败",e);
        }
        return videoPropertyUnitForKu6;
    }

    /**
     * 通用正则匹配工具
     * add by yangkai
     *
     * @param patternStr
     * @param videoUrl
     * @param ku6Url
     *@return
     */
    public static String patternUrl(StringpatternStr, String videoUrl, String ku6Url) {
        Matcher m =Pattern.compile(patternStr).matcher(videoUrl);
        while (m.find())
            ku6Url += m.group(1);
        return ku6Url;
    }

    /**
     * 访问酷6接口工具
     * add by yangkai
     * @param url
     * @return
     */
    private static String sendRequest(Stringurl) {
        InputStream inputStream = null;
        GetMethod getMethod = null;
        try {
            getMethod = new GetMethod(url);
            HttpClient httpClient = newHttpClient();
            int statusCode = 0;
            statusCode =httpClient.executeMethod(getMethod);
            if (statusCode != HttpStatus.SC_OK){
                logger.debug("访问目标url:{0} 失败,http状态码:{1}",new Object[] { url, statusCode });
                return StringUtils.EMPTY;
            }
            inputStream =getMethod.getResponseBodyAsStream();
            if (inputStream == null) {
                logger.debug("访问目标url:{0} 失败,返回io流为空", new Object[] { url });
                return StringUtils.EMPTY;
            }
            returnIOUtils.toString(inputStream, "UTF-8");
        } catch (HttpException e) {
           logger.error(HuDongErrorCodeEnum.RemoteRequestError, "网络原因,访问目标url:" + url + "失败", e);
            return StringUtils.EMPTY;
        } catch (IOException e) {
           logger.error(HuDongErrorCodeEnum.RemoteRequestError, "io原因,访问目标url:" + url + "失败", e);
            return StringUtils.EMPTY;
        } catch (Exception e) {
           logger.error(HuDongErrorCodeEnum.RemoteRequestError, "访问目标url:" + url + "失败",e);
            return StringUtils.EMPTY;
        } finally {
            if (getMethod != null) {
                getMethod.releaseConnection();
            }
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
}
 </span>

2.展示代码:

展示其实很简单,动态的拼装一个embed标签放到html或jsp页面就行;格式如下:

<embedsrc="http://player.ku6.com/refer/flKjsasaK0W9fdCsFYO99A../v.swf"width="480" height="400"allowscriptaccess="always" allowfullscreen="true"type="application/x-shockwave-flash" ></embed>

在action中动态拼装的参数为src,src就是上面抓取程序抓到的参数了,还有一些抓到的title和description用于内嵌页面的其他样式展示用。

关于embed标签的使用方式可参考:http://blog.csdn.net/yangkai_hudong/article/details/30499007

转载请指明:杨凯专属频道

转载地址:http://blog.csdn.net/yangkai_hudong

正则匹配酷6视频url后使用接口引用案例,布布扣,bubuko.com

时间: 2024-08-24 18:59:40

正则匹配酷6视频url后使用接口引用案例的相关文章

未备案域名打开国内服务器上的网站(绑定国外空间并判断url后跳转引用)

场景:由于域名没备案不能绑定国内服务器,通过先绑定国外空间,在空间着陆页判断当前url,打开不同的页面.页面上通过iframe引用国内服务器上的目标网站. 实现:未备案域名打开国内服务器上的网站. 国外空间着陆页: <?php switch ($_SERVER["HTTP_HOST"]) { case "www.abc.com": header("location:abc.html"); break; case "aaa.cc&q

js截取相应的域名----正则匹配法 和校验Url 正则表达式

js截取相应的域名----正则匹配法 和校验Url 正则表达式 用javascript截取相应的域名方法两种,供大家参考 1.方法1: [javascript] view plain copy function domainURI(str){ var durl=/http:\/\/([^\/]+)\//i; domain = str.match(durl); return domain[1]; } 调用:var domain=domainURI(document.location.href);

Django2.0版本 path与Django1.x版本url正则匹配问题

Django1.x版本url正则匹配如下: Django2.0版本正则匹配则要导入re_path模块如下: 原文地址:https://www.cnblogs.com/Dev0ps/p/9890861.html

Django 的 slug url 正则匹配

如果按照 .* 去匹配,最后会把 /edit/ 和 /delete/ 也匹配进去. urlpatterns = [ #... url(r'^(?P<slug>.*)/$', post_detail, name='detail'), url(r'^(?P<slug>.*)/edit/$', post_update, name='update'), url(r'^(?P<slug>.*)/delete/$', post_delete), ] 所以使用 [-\w+] 表示匹配

php正则匹配用户名必须包含字母和数字且大于6位

php正则匹配用户名必须包含字母和数字且大于6位 UEditor 1.4.3版本中去掉本地自动保存功能 右键菜单没有新建文本文档txt 常见HTTP错误代码大全 http常见状态码 eclipse内存溢出错误 为什么井盖是圆的?--揭开面试题的神秘面目! Linux Centos 6.6搭建SFTP服务器 密码强度检测 JS判断检测用户输入密码强度代码 对程序员来说,提高薪水最好的建议是什么? CSS3仿淘宝右侧固定导航悬浮层 jQuery仿淘宝网登录拖动滑块验证码代码 jQuery单击div更

优酷真实视频地址解析(更新至2016-2-28)

优酷视频的算法在2015年11月24日起至今连续更改了好几个版本,之前发的这篇临时解决方案得到很多响应,非常感谢!现在对这篇文章重新修改,全面规整完整的破解思路(含破解方法)! 对了,这篇文章只是针对m3u8格式的视频. 一.准备工作 所谓工欲善其事必先利其器,做好破解的准备工作会令你事半功倍. 1.首先准备一个Http抓包工具,PC上推荐Fiddler或者Postman,iOS上推荐Surge 2.手备一台iOS测试设备(因为在Safari里优酷视频是确定使用m3u8进行播放的) 二.抓包过程

利用Python正则匹配中文——爬取校园网公告栏中感兴趣的内容

写这个程序是因为校园网公告栏时不时会有学术报告,讲座之类的信息发布,但这类信息往往发布在讲座的前一天,以至于丢失很多重要消息.同时公告栏里也会发布一些跟学生无关的内容,比如工会主席会议啥的. 主要遇到的困难时对中文的正则匹配问题.(比如通过第一次正则可以提取到一个页面内的所有中文标题,第二次正则从这些中文标题中将能匹配上“报告”两个字的对象添加到结果list内) 学校公告页面是gb2312编码.我使用的方式是,整个工程使用utf-8编码,将需要匹配的关键字转换成utf-8编码格式,使用正则匹配u

常用JS正则匹配函数

//校验用户名:只能输入1-30个字母 function isTrueName(s) { var patrn=/^[a-zA-Z]{1,30}$/; if (!patrn.exec(s)) return false return true } //校验密码:只能输入6-20个字母.数字.下划线 function isPasswd(s) { var patrn=/^(/w){6,20}$/; if (!patrn.exec(s)) return false return true } //校验普通

Nginx 正则匹配配置

location表达式类型 ~ 表示执行一个正则匹配,区分大小写 ~* 表示执行一个正则匹配,不区分大小写 ^~ 表示普通字符匹配.使用前缀匹配.如果匹配成功,则不再匹配其他location. = 进行普通字符精确匹配.也就是完全匹配. @ 它定义一个命名的 location,使用在内部定向时,例如 error_page, try_files location优先级说明 在nginx的location和配置中location的顺序没有太大关系.正location表达式的类型有关.相同类型的表达式