正则匹配酷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=(.+).*",ku6Url) + ".html";
                } else if (videoUrl.contains("/special/")) {// http://my.ku6.com/watch?v=HMvaiRJpdzhXBqqF9oMamQ..
                    ku6Url =patternUrl(".*http://v\\.ku6\\.com/special/.+/(.+).*",ku6Url);
                } else if (videoUrl.contains("/mt/")) { //http://v.ku6.com/u/291222/mt/_SqfhQTRM1yRhmOZ.html
                    ku6Url =patternUrl(".*http://v\\.ku6\\.com/.+/.+/mt/(.+).*",ku6Url);
                } else {
                    ku6Url =patternUrl(".*http://v\\.ku6\\.com/show/(.+\\.html).*",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原因,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://www.jb51.cc/article/p-gakwyywu-da.html


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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


jquery.validate使用攻略(表单校验) 目录 jquery.validate使用攻略1 第一章&#160;jquery.validate使用攻略1 第二章&#160;jQuery.validate.js API7 Custom selectors7 Utilities8 Validato
/\s+/g和/\s/g的区别 正则表达式/\s+/g和/\s/g,目的均是找出目标字符串中的所有空白字符,但两者到底有什么区别呢? 我们先来看下面一个例子: let name = &#39;ye wen jun&#39;;let ans = name.replace(/\s/g, &#39;&#3
自整理几个jquery.Validate验证正则: 1. 只能输入数字和字母 /^[0-9a-zA-Z]*$/g jQuery.validator.addMethod(&quot;letters&quot;, function (value, element) { return this.optio
this.optional(element)的用法 this.optional(element)是jquery.validator.js表单验证框架中的一个函数,用于表单控件的值不为空时才触发验证。 简单来说,就是当表单控件值为空的时候不会进行表单校验,此函数会返回true,表示校验通过,当表单控件
jQuery.validate 表单动态验证 实际上jQuery.validate提供了动态校验的方法。而动态拼JSON串的方式是不支持动态校验的。牺牲jQuery.validate的性能优化可以实现(jQuery.validate的性能优化见图1.2 jQuery.validate源码 )。 也可
自定义验证之这能输入数字(包括小数 负数 ) &lt;script type=&quot;text/javascript&quot;&gt; function onlyNumber(obj){ //得到第一个字符是否为负号 var t = obj.value.charAt(0); //先把非数字的都
// 引入了外部的验证规则 import { validateAccountNumber } from &quot;@/utils/validate&quot;; validator.js /*是否合法IP地址*/ export function validateIP(rule, value,cal
VUE开发--表单验证(六十三) 一、常用验证方式 vue 中表单字段验证的写法和方式有多种,常用的验证方式有3种: data 中验证 表单内容: &lt;!-- 表单 --&gt; &lt;el-form ref=&quot;rulesForm&quot; :rules=&quot;formRul
正则表达式 座机的: 例子: 座机有效写法: 0316-8418331 (010)-67433539 (010)67433539 010-67433539 (0316)-8418331 (0316)8418331 正则表达式写法 0\d{2,3}-\d{7,8}|\(?0\d{2,3}[)-]?\d
var reg = /^0\.[1-9]{0,2}$/;var linka = 0.1;console.log (reg.test (linka)); 0到1两位小数正则 ^(0\.(0[1-9]|[1-9]{1,2}|[1-9]0)$)|^1$ 不含0、0.0、0.00 // 验证是否是[1-10
input最大长度限制问题 &lt;input type=&quot;text&quot; maxlength=&quot;5&quot; /&gt; //可以 &lt;input type=&quot;number&quot; maxlength=&quot;5&quot; /&gt; //没有效
js输入验证是否为空、是否为null、是否都是空格 目录 1.截头去尾 trim 2.截头去尾 会去掉开始和结束的空格,类似于trim 3.会去掉所有的空格,包括开始,结束,中间 1.截头去尾 trim str=str.trim(); // 强烈推荐 最常用、最实用 or $.trim(str);
正则表达式语法大全 字符串.match(正则):返回符合的字符串,若不满足返回null 字符串.search(正则):返回搜索到的位置,若非一个字符,则返回第一个字母的下标,若不匹配则返回-1 字符串.replace(正则,新的字符串):找到符合正则的内容并替换 正则.test(字符串):在字符串中
正整数正则表达式正数的正则表达式(包括0,小数保留两位): ^((0{1}.\d{1,2})|([1-9]\d.{1}\d{1,2})|([1-9]+\d)|0)$正数的正则表达式(不包括0,小数保留两位): ^((0{1}.\d{1,2})|([1-9]\d.{1}\d{1,2})|([1-9]+
JS 正则验证 test() /*用途:检查输入手机号码是否正确输入:s:字符串返回:如果通过验证返回true,否则返回false /function checkMobile(s){var regu =/[1][3][0-9]{9}$/;var re = new RegExp(regu);if (r
请输入保留两位小数的销售价的正则: /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/ 1.只能输入英文 &lt;input type=&quot;text&quot; onkeyup=&quot;value
判断价格的正则表达式 价格的正则表达式 /(^[1-9]\d*(\.\d{1,2})?$)|(^0(\.\d{1,2})?$)/; 1 解析:价格符合两种格式 ^ [1-9]\d*(.\d{1,2})?$ : 1-9 开头,后跟是 0-9,可以跟小数点,但小数点后要带上 1-2 位小数,类似 2,2
文章浏览阅读106次。这篇文章主要介绍了最实用的正则表达式整理,比如校验邮箱的正则,号码相关,数字相关等等,本文给大家列举的比较多,需要的朋友可以参考下。_/^(?:[1-9]d*)$/ 手机号
文章浏览阅读1.2k次。4、匹配中的==、an==、== an9、i9 == "9i"和99p==请注意下面这部分的作用,它在匹配中间内容的时候排除了说明:当html字符串如下时,可以匹配到两处,表示匹配的字符串不包含and且不包含空白字符。说明:在上面的正则表达式中,_gvim正则表达式匹配不包含某个字符串
文章浏览阅读897次。【代码】正则表达式匹配a标签的href。_auto.js 正则匹配herf