您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

php各种优酷,土豆,视频封装类

2024/5/2 1:09:30发布33次查看
php各种视频采集类封装,优酷,土豆,腾讯视频、56、搜狐视频、酷六、新浪视频、乐视.......
九弄 jigwang.com
/** * video * * @package * @version 1.3 * @copyright 2011 - 2013 * * usage * require_once videourlparser.class.php; * $urls[] = http://v.youku.com/v_show/id_xmji4mdm4ndc2.html; * $urls[] = http://www.tudou.com/playlist/p/l13087099.html; * $urls[] = http://www.tudou.com/programs/view/ufg-a3tlcxk/; * $urls[] = http://v.ku6.com/special/show_4926690/klze2mhmesk6g05x.html; * $urls[] = http://www.56.com/u68/v_nji2ntkxmzc.html; * $urls[] = http://www.letv.com/ptv/vplay/1168109.html; * $urls[] = http://video.sina.com.cn/v/b/46909166-1290055681.html; * * foreach($urls as $url){ * $info = videourlparser::parse($url); * //var_dump($info); * echo {$info['title']}; * echo
; * echo $info['object']; * echo
; * } * * * * //优酷 * http://v.youku.com/v_show/id_xmju0njy4otey.html * * * //酷六 * http://v.ku6.com/special/show_3917484/x0bmxabgzdqs6fqn.html * * * //土豆 * http://www.tudou.com/playlist/p/a65929.html?iid=74905844 * * * //56 * http://www.56.com/u98/v_ntkyody2ntu.html * * * //新浪播客 * http://video.sina.com.cn/v/b/46909166-1290055681.html * * * //乐视 * http://www.letv.com/ptv/vplay/1168109.html * */class videourlparser{ const user_agent = mozilla/5.0 (windows; u; windows nt 5.1; en-us) applewebkit/534.10 (khtml, like gecko) chrome/8.0.552.224 safari/534.10; const check_url_valid = /(youku\.com|tudou\.com|ku6\.com|56\.com|letv\.com|video\.sina\.com\.cn|(my\.)?tv\.sohu\.com|v\.qq\.com)/; /** * parse * * @param string $url * @param mixed $createobject * @static * @access public * @return void */ static public function parse($url='', $createobject=true){ $lowerurl = strtolower($url); preg_match(self::check_url_valid, $lowerurl, $matches); if(!$matches) return false; switch($matches[1]){ case 'youku.com': $data = self::_parseyouku($url); break; case 'tudou.com': $data = self::_parsetudou($url); break; case 'ku6.com': $data = self::_parseku6($url); break; case '56.com': $data = self::_parse56($url); break; case 'letv.com': $data = self::_parseletv($url); break; case 'video.sina.com.cn': $data = self::_parsesina($url); break; case 'my.tv.sohu.com': case 'tv.sohu.com': case 'sohu.com': $data = self::_parsesohu($url); break; case 'v.qq.com': $data = self::_parseqq($url); break; default: $data = false; } if($data && $createobject) $data['object'] = ; return $data; } /** * 腾讯视频 * http://v.qq.com/cover/o/o9tab7nuu0q3esh.html?vid=97abu74o4w3_0 * http://v.qq.com/play/97abu74o4w3.html * http://v.qq.com/cover/d/dtdqyd8g7xvoj0o.html * http://v.qq.com/cover/d/dtdqyd8g7xvoj0o/9sfqulsrtsb.html * http://imgcache.qq.com/tencentvideo_v1/player/tencentplayer.swf?_v=20110829&vid=97abu74o4w3&autoplay=1&list=2&showcfg=1&tpid=23&title=%e7%ac%ac%e4%b8%80%e7%8e%b0%e5%9c%ba&adplay=1&cid=o9tab7nuu0q3esh */ private static function _parseqq($url){ if(preg_match(/\/play\//, $url)){ $html = self::_fget($url); preg_match(/url=[^\]+/, $html, $matches); if(!$matches); return false; $url = $matches[0]; } preg_match(/vid=([^\_]+)/, $url, $matches); $vid = $matches[1]; $html = self::_fget($url); // query preg_match(/flashvars\s=\s\([^;]+)/s, $html, $matches); $query = $matches[1]; if(!$vid){ preg_match(/vid\s?=\s?vid\s?\|\|\s?\(\w+)\;/i, $html, $matches); $vid = $matches[1]; } $query = str_replace('+vid+', $vid, $query); parse_str($query, $output); $data['img'] = http://vpic.video.qq.com/{$$output['cid']}/{$vid}_1.jpg; $data['url'] = $url; $data['title'] = $output['title']; $data['swf'] = http://imgcache.qq.com/tencentvideo_v1/player/tencentplayer.swf?.$query; return $data; } /* * 优酷网 * http://v.youku.com/v_show/id_xmji4mdm4ndc2.html * http://player.youku.com/player.php/sid/xmju0nji2njg4/v.swf */ private static function _parseyouku($url){ preg_match(#id\_(\w+)#, $url, $matches); if (empty($matches)){ preg_match(#v_playlist\/#, $url, $mat); if(!$mat) return false; $html = self::_fget($url); preg_match(#videoid2\s*=\s*\'(\w+)\'#, $html, $matches); if(!$matches) return false; } $link = http://v.youku.com/player/getplaylist/videoids/{$matches[1]}/timezone/+08/version/5/source/out?password=&ran=2513&n=3; $retval = self::_cget($link); if ($retval) { $json = json_decode($retval, true); $data['img'] = $json['data'][0]['logo']; $data['title'] = $json['data'][0]['title']; $data['url'] = $url; $data['swf'] = http://player.youku.com/player.php/sid/{$matches[1]}/v.swf; // echo ; var_dump($data);
return $data; } else { return false; } } /** * 土豆网 * http://www.tudou.com/programs/view/wtt3fjidxee/ * http://www.tudou.com/v/wtt3fjidxee/v.swf * * http://www.tudou.com/playlist/p/a65718.html?iid=74909603 * http://www.tudou.com/l/g5bzgi4lab8/&iid=74909603/v.swf */ private static function _parsetudou($url){ preg_match(#view/([-\w]+)/#, $url, $matches); if (empty($matches)) { if (strpos($url, /playlist/) == false) return false; if(strpos($url, 'iid=') !== false){ $quarr = explode(iid=, $lowerurl); if (empty($quarr[1])) return false; }elseif(preg_match(#p\/l(\d+).#, $lowerurl, $quarr)){ if (empty($quarr[1])) return false; } $html = self::_fget($url); $html = iconv(gb2312, utf-8, $html); preg_match(/lid_code\s=\slcode\s=\s[\'\]([^\'\]+)/s, $html, $matches); $icode = $matches[1]; preg_match(/iid\s=\s.*?\|\|\s(\d+)/sx, $html, $matches); $iid = $matches[1]; preg_match(/listdata\s=\s(\[\{.*\}\])/sx, $html, $matches); $find = array(/\n/, '/\s/', /:[^\d\]\w+[^\,]*,/i, /(\{|,)(\w+):/); $replace = array(, , ':,', '\\1\\2:'); $str = preg_replace($find, $replace, $matches[1]); //var_dump($str); $json = json_decode($str); //var_dump($json);exit; if(is_array($json) || is_object($json) && !empty($json)){ foreach ($json as $val) { if ($val->iid == $iid) { break; } } } $data['img'] = $val->pic; $data['title'] = $val->title; $data['url'] = $url; $data['swf'] = http://www.tudou.com/l/{$icode}/&iid={$iid}/v.swf; return $data; } $host = www.tudou.com; $path = /v/{$matches[1]}/v.swf; $ret = self::_fsget($path, $host); if (preg_match(#\nlocation: (.*)\n#, $ret, $mat)) { parse_str(parse_url(urldecode($mat[1]), php_url_query)); $data['img'] = $snap_pic; $data['title'] = $title; $data['url'] = $url; $data['swf'] = http://www.tudou.com/v/{$matches[1]}/v.swf; return $data; } return false; } /** * 酷6网 * http://v.ku6.com/film/show_520/3x93vo4tis7uothg.html * http://v.ku6.com/special/show_4926690/klze2mhmesk6g05x.html * http://v.ku6.com/show/7us-kdxjykyiindevhpwhg...html * http://player.ku6.com/refer/3x93vo4tis7uothg/v.swf */ private static function _parseku6($url){ if(preg_match(/show\_/, $url)){ preg_match(#/([-\w]+)\.html#, $url, $matches); $url = http://v.ku6.com/fetchvideo4player/{$matches[1]}.html; $html = self::_fget($url); if ($html) { $json = json_decode($html, true); if(!$json) return false; $data['img'] = $json['data']['picpath']; $data['title'] = $json['data']['t']; $data['url'] = $url; $data['swf'] = http://player.ku6.com/refer/{$matches[1]}/v.swf; return $data; } else { return false; } }elseif(preg_match(/show\//, $url, $matches)){ $html = self::_fget($url); preg_match(/objectinfo\s?=\s?([^\n]*)};/si, $html, $matches); $str = $matches[1]; // img preg_match(/cover\s?:\s?\([^\]+)\/, $str, $matches); $data['img'] = $matches[1]; // title preg_match(/title\?\s?:\s?\([^\]+)\/, $str, $matches); $jsstr = {\title\:\{$matches[1]}\}; $json = json_decode($jsstr, true); $data['title'] = $json['title']; // url $data['url'] = $url; // query preg_match(/\(vid=[^\]+)\\sname=\flashvars\/s, $html, $matches); $query = str_replace(&, '&', $matches[1]); preg_match(/\/\/player\.ku6cdn\.com[^\\']+/, $html, $matches); $data['swf'] = 'http:'.$matches[0].'?'.$query; return $data; } } /** * 56网 * http://www.56.com/u73/v_ntkzmdcwndy.html * http://player.56.com/v_ntkzmdcwndy.swf */ private static function _parse56($url){ preg_match(#/v_(\w+)\.html#, $url, $matches); if (empty($matches)) return false; $link=http://vxml.56.com/json/{$matches[1]}/?src=out; $retval = self::_cget($link); if ($retval) { $json = json_decode($retval, true); $data['img'] = $json['info']['img']; $data['title'] = $json['info']['subject']; $data['url'] = $url; $data['swf'] = http://player.56.com/v_{$matches[1]}.swf; return $data; } else { return false; } } /** * 乐视网 * http://www.letv.com/ptv/vplay/1168109.html * http://www.letv.com/player/x1168109.swf */ private static function _parseletv($url){ $html = self::_fget($url); preg_match(#http://v.t.sina.com.cn/([^'\]*)#, $html, $matches); parse_str(parse_url(urldecode($matches[0]), php_url_query)); preg_match(#vplay/(\d+)#, $url, $matches); $data['img'] = $pic; $data['title'] = $title; $data['url'] = $url; $data['swf'] = http://www.letv.com/player/x{$matches[1]}.swf; return $data; } // 搜狐tv http://my.tv.sohu.com/u/vw/5101536 private static function _parsesohu($url){ $html = self::_fget($url); $html = iconv(gb2312, utf-8, $html); preg_match_all(/og:(?:title|image|videosrc)\\scontent=\([^\]+)\/s, $html, $matches); $data['img'] = $matches[1][1]; $data['title'] = $matches[1][0]; $data['url'] = $url; $data['swf'] = $matches[1][2]; return $data; } /* * 新浪播客 * http://video.sina.com.cn/v/b/48717043-1290055681.html * http://you.video.sina.com.cn/api/sinawebapi/outplayrefer.php/vid=48717043_1290055681_puzksndrdzxk+l1lhz2stqkp7kqnt6nki2o0u1ehiwzyq0/xm5gdatog5ynsa9keqdhaqja4dpkm0x4/s.swf */ private static function _parsesina($url){ preg_match(/(\d+)(?:\-|\_)(\d+)/, $url, $matches); $url = http://video.sina.com.cn/v/b/{$matches[1]}-{$matches[2]}.html; $html = self::_fget($url); preg_match(/video\s?:\s?([^ $find = array(/\n/, /\s*/, /\'/, /\{([^:,]+):/, /,([^:]+):/, /:[^\d\]\w+[^\,]*,/i); $replace = array('', '', '', '{\\1:', ',\\1:', ':,'); $str = preg_replace($find, $replace, $matches[1]); $arr = json_decode($str, true); $data['img'] = $arr['pic']; $data['title'] = $arr['title']; $data['url'] = $url; $data['swf'] = $arr['swfoutsideurl']; return $data; } /* * 通过 file_get_contents 获取内容 */ private static function _fget($url=''){ if(!$url) return false; $html = file_get_contents($url); // 判断是否gzip压缩 if($dehtml = self::_gzdecode($html)) return $dehtml; else return $html; } /* * 通过 fsockopen 获取内容 */ private static function _fsget($path='/', $host='', $user_agent=''){ if(!$path || !$host) return false; $user_agent = $user_agent ? $user_agent : self::user_agent; $out = get $path http/1.1host: $hostuser-agent: $user_agentaccept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8accept-language: zh-cn,zh;q=0.5accept-charset: gb2312,utf-8;q=0.7,*;q=0.7\r\n\r\nheader; $fp = @fsockopen($host, 80, $errno, $errstr, 10); if (!$fp) return false; if(!fputs($fp, $out)) return false; while ( !feof($fp) ) { $html .= fgets($fp, 1024); } fclose($fp); // 判断是否gzip压缩 if($dehtml = self::_gzdecode($html)) return $dehtml; else return $html; } /* * 通过 curl 获取内容 */ private static function _cget($url='', $user_agent=''){ if(!$url) return; $user_agent = $user_agent ? $user_agent : self::user_agent; $ch = curl_init(); curl_setopt($ch, curlopt_url, $url); curl_setopt($ch, curlopt_header, 0); if(strlen($user_agent)) curl_setopt($ch, curlopt_useragent, $user_agent); ob_start(); curl_exec($ch); $html = ob_get_contents(); ob_end_clean(); if(curl_errno($ch)){ curl_close($ch); return false; } curl_close($ch); if(!is_string($html) || !strlen($html)){ return false; } return $html; // 判断是否gzip压缩 if($dehtml = self::_gzdecode($html)) return $dehtml; else return $html; } private static function _gzdecode($data) { $len = strlen ( $data ); if ($len return null; // not gzip format (see rfc 1952) } $method = ord ( substr ( $data, 2, 1 ) ); // compression method $flags = ord ( substr ( $data, 3, 1 ) ); // flags if ($flags & 31 != $flags) { // reserved bits are set -- not allowed by rfc 1952 return null; } // note: $mtime may be negative (php integer limitations) $mtime = unpack ( v, substr ( $data, 4, 4 ) ); $mtime = $mtime [1]; $xfl = substr ( $data, 8, 1 ); $os = substr ( $data, 8, 1 ); $headerlen = 10; $extralen = 0; $extra = ; if ($flags & 4) { // 2-byte length prefixed extra data in header if ($len - $headerlen - 2 return false; // invalid format } $extralen = unpack ( v, substr ( $data, 8, 2 ) ); $extralen = $extralen [1]; if ($len - $headerlen - 2 - $extralen return false; // invalid format } $extra = substr ( $data, 10, $extralen ); $headerlen += 2 + $extralen; } $filenamelen = 0; $filename = ; if ($flags & 8) { // c-style string file name data in header if ($len - $headerlen - 1 return false; // invalid format } $filenamelen = strpos ( substr ( $data, 8 + $extralen ), chr ( 0 ) ); if ($filenamelen === false || $len - $headerlen - $filenamelen - 1 return false; // invalid format } $filename = substr ( $data, $headerlen, $filenamelen ); $headerlen += $filenamelen + 1; } $commentlen = 0; $comment = ; if ($flags & 16) { // c-style string comment data in header if ($len - $headerlen - 1 return false; // invalid format } $commentlen = strpos ( substr ( $data, 8 + $extralen + $filenamelen ), chr ( 0 ) ); if ($commentlen === false || $len - $headerlen - $commentlen - 1 return false; // invalid header format } $comment = substr ( $data, $headerlen, $commentlen ); $headerlen += $commentlen + 1; } $headercrc = ; if ($flags & 1) { // 2-bytes (lowest order) of crc32 on header present if ($len - $headerlen - 2 return false; // invalid format } $calccrc = crc32 ( substr ( $data, 0, $headerlen ) ) & 0xffff; $headercrc = unpack ( v, substr ( $data, $headerlen, 2 ) ); $headercrc = $headercrc [1]; if ($headercrc != $calccrc) { return false; // bad header crc } $headerlen += 2; } // gzip footer - these be negative due to php's limitations $datacrc = unpack ( v, substr ( $data, - 8, 4 ) ); $datacrc = $datacrc [1]; $isize = unpack ( v, substr ( $data, - 4 ) ); $isize = $isize [1]; // perform the decompression: $bodylen = $len - $headerlen - 8; if ($bodylen // this should never happen - implementation bug! return null; } $body = substr ( $data, $headerlen, $bodylen ); $data = ; if ($bodylen > 0) { switch ($method) { case 8 : // currently the only supported compression method: $data = gzinflate ( $body ); break; default : // unknown compression method return false; } } else { //... } if ($isize != strlen ( $data ) || crc32 ( $data ) != $datacrc) { // bad format! length or crc doesn't match! return false; } return $data; }}/*$url = http://v.youku.com/v_show/id_xnjixnjuyotky.html;$obj = new videourlparser();$data = $obj->parse($url);var_dump($data);*/
复制代码
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product