contentEx = array('Typembed_Plugin', 'parse'); Typecho_Plugin::factory('Widget_Abstract_Contents')->excerptEx = array('Typembed_Plugin', 'parse'); } public static function parse($content, $widget, $lastResult){ $content = empty($lastResult) ? $content : $lastResult; if ($widget instanceof Widget_Archive){ $content = preg_replace_callback('/

(?:(?:]+>)?(?(?:(http|https):\/\/)+[a-z0-9_\-\/\.\?%#=]+)(?:<\/a>)?)<\/p>/si', array('Typembed_Plugin', 'parseCallback'), $content); } return $content; } public static function parseCallback($matches){ $no_html5 = array( 'www.le.com', 'www.letv.com', 'v.yinyuetai.com', 'v.ku6.com', 'www.mgtv.com', 'www.acfun.tv', 'www.acfun.cn', 'www.bilibili.com' ); $is_music = array('music.163.com'); $providers = array( // video 'v.youku.com' => array( '#https?://v\.youku\.com/v_show/id_(?[a-z0-9_=\-]+)#i', 'http://player.youku.com/player.php/sid/{video_id}/partnerid/d0b1b77a17cded3b/v.swf', 'http://player.youku.com/embed/{video_id}?client_id=d0b1b77a17cded3b', ), 'v.qq.com' => array( '#https?://v\.qq\.com/(?:[a-z0-9_\./]+\?vid=(?[a-z0-9_=\-]+)|(?:[a-z0-9/]+)/(?[a-z0-9_=\-]+))#i', 'http://static.video.qq.com/TPout.swf?vid={video_id}', 'http://v.qq.com/iframe/player.html?vid={video_id}', ), 'my.tv.sohu.com' => array( '#https?://my\.tv\.sohu\.com/us/(?:\d+)/(?\d+)#i', 'http://share.vrs.sohu.com/my/v.swf&topBar=1&id={video_id}&autoplay=false&xuid=&from=page', 'http://tv.sohu.com/upload/static/share/share_play.html#{video_id}_0_0_9001_0', ), 'www.wasu.cn' => array( '#https?://www\.wasu\.cn/play/show/id/(?\d+)#i', 'http://s.wasu.cn/portal/player/20141216/WsPlayer.swf?mode=3&vid={video_id}&auto=0&ad=4228', 'http://www.wasu.cn/Play/iframe/id/{video_id}', ), 'www.youtube.com' => array( '#https?://www\.youtube\.com/watch\?v=(?[a-z0-9_=\-]+)#i', 'https://www.youtube.com/v/{video_id}', 'https://www.youtube.com/embed/{video_id}', ), 'youtu.be' => array( '#https?://youtu\.be/(?[a-z0-9_=\-]+)#i', 'https://www.youtube.com/v/{video_id}', 'https://www.youtube.com/embed/{video_id}', ), 'www.bilibili.com' => array( '#https?://www\.bilibili\.com/video/av(?\d+)#i', '//static.hdslb.com/miniloader.swf?aid={video_id}&page=1', '//www.bilibili.com/html/player.html?aid={video_id}&page=1', ), 'www.dailymotion.com' => array( '#https?://www\.dailymotion\.com/video/(?[a-z0-9_=\-]+)#i', 'http://www.dailymotion.com/swf/video/{video_id}', 'http://www.dailymotion.com/embed/video/{video_id}', ), 'www.acfun.cn' => array( '#https?://www\.acfun\.cn/v/ac(?\d+)#i', 'http://cdn.aixifan.com/player/ACFlashPlayer.out.swf?type=page&url=http://www.acfun.cn/v/ac{video_id}', '', ), 'www.acfun.tv' => array( '#https?://www\.acfun\.tv/v/ac(?\d+)#i', 'http://cdn.aixifan.com/player/ACFlashPlayer.out.swf?type=page&url=http://www.acfun.tv/v/ac{video_id}', '', ), 'www.le.com' => array( '#https?://(?:[a-z0-9/]+\.)?(?:[le|letv])+\.com/ptv/vplay/(?\d+)#i', 'http://i7.imgs.letv.com/player/swfPlayer.swf?id={video_id}&autoplay=0', '', ), 'www.letv.com' => array( '#https?://(?:[a-z0-9/]+\.)?(?:[le|letv])+\.com/ptv/vplay/(?\d+)#i', 'http://i7.imgs.letv.com/player/swfPlayer.swf?id={video_id}&autoplay=0', '', ), 'v.yinyuetai.com' => array( '#https?://v\.yinyuetai\.com/video/(?\d+)#i', 'http://player.yinyuetai.com/video/player/{video_id}/v_0.swf', '', ), 'v.ku6.com' => array( '#https?://v\.ku6\.com/show/(?[a-z0-9\-_\.]+).html#i', 'http://player.ku6.com/refer/{video_id}/v.swf', '', ), 'www.mgtv.com' => array( '#https?://www\.mgtv\.com/(?:[a-z0-9/]+)/(?\d+)\.html#i', 'http://player.mgtv.com/mango-tv3-main/MangoTV_3.swf?play_type=1&video_id={video_id}', '', ), 'www.56.com' => array( '#https?://(?:www\.)?56\.com/[a-z0-9]+/(?:play_album\-aid\-[0-9]+_vid\-(?[a-z0-9_=\-]+)|v_(?[a-z0-9_=\-]+))#i', 'http://player.56.com/v_{video_id}.swf', 'http://www.56.com/iframe/{video_id}', ), // music 'music.163.com' => array( '#https?://music\.163\.com/\#/song\?id=(?\d+)#i', '', 'http://music.163.com/outchain/player?type=2&id={video_id}&auto=0&height=90', ), ); $video_url = $matches['video_url']; $parse = parse_url($video_url); $site = $parse['host']; if(!in_array($site, array_keys($providers))){ return '

' . $matches['video_url'] . '

'; } preg_match_all($providers[$site][0], $matches['video_url'], $match); $id = $match['video_id'][0] == '' ? $match['video_id2'][0] : $match['video_id'][0]; if(self::isMobile()){ try{ $width = Typecho_Widget::widget('Widget_Options')->plugin('Typembed')->mobile_width; $height = Typecho_Widget::widget('Widget_Options')->plugin('Typembed')->mobile_height; }catch(Typecho_Plugin_Exception $e){ $width = '100%'; $height = '500'; } }else{ try{ $width = Typecho_Widget::widget('Widget_Options')->plugin('Typembed')->width; $height = Typecho_Widget::widget('Widget_Options')->plugin('Typembed')->height; }catch(Typecho_Plugin_Exception $e){ $width = '100%'; $height = '250'; } } if(in_array($site, $is_music)){ $height = '110px'; $_SERVER['HTTP_USER_AGENT'] = 'iphone'; } if(self::isMobile()){ if(in_array($site, $no_html5)){ $html = sprintf( '
', $video_url, $width, $height); }else{ $url = str_replace('{video_id}', $id, $providers[$site][2]); $html = sprintf( '', $url, $width, $height); } }else{ $url = str_replace('{video_id}', $id, $providers[$site][1]); $html = sprintf( '', $url, $width, $height); } return '
'.$html.'
'; } /** * 禁用插件方法,如果禁用失败,直接抛出异常 * * @static * @access public * @return void * @throws Typecho_Plugin_Exception */ public static function deactivate(){} /** * 获取插件配置面板 * * @access public * @param Typecho_Widget_Helper_Form $form 配置面板 * @return void */ public static function config(Typecho_Widget_Helper_Form $form){ try{ $typembed_code = Typecho_Widget::widget('Widget_Options')->plugin('Typembed')->typembed_code; }catch(Typecho_Plugin_Exception $e){ $typembed_code = ''; } $width = new Typecho_Widget_Helper_Form_Element_Text('width', NULL, '100%', _t('播放器宽度')); $form->addInput($width); $height = new Typecho_Widget_Helper_Form_Element_Text('height', NULL, '500', _t('播放器高度')); $form->addInput($height); $mobile_width = new Typecho_Widget_Helper_Form_Element_Text('mobile_width', NULL, '100%', _t('移动设备播放器宽度')); $form->addInput($mobile_width); $mobile_height = new Typecho_Widget_Helper_Form_Element_Text('mobile_height', NULL, '250', _t('移动设备播放器高度')); $form->addInput($mobile_height); if(in_array(strtolower(md5($typembed_code)), array('dc9beb84559e75df480b70c3f31ff6cb', '6a78fa2523ca58180ede636aa948bc58', '90b82edf68dcb27b4014ed6b751bb2e5', 'cff968058df7dc08c5c54050ee0c3829', '92420638bb657827490783196a0d263c'))){ $typembed_code_text = new Typecho_Widget_Helper_Form_Element_Hidden('typembed_code', NULL, '', _t('高级功能激活码')); $form->addInput($typembed_code_text); $jump_play = new Typecho_Widget_Helper_Form_Element_Radio('jump_play', array( 1 => _t('启用'), 0 => _t('关闭') ), 0, _t('跳转播放'), _t('手机端不支持H5播放的视频,将跳转到源网站播放')); $form->addInput($jump_play->addRule('enum', _t('必须选择一个模式'), array(0, 1))); }else{ $typembed_code_text = new Typecho_Widget_Helper_Form_Element_Text('typembed_code', NULL, '', _t('高级功能激活码'), _t('升级到最新版本,填入激活码保存后可开启高级功能。
激活码关注微信公众号“ri-fu-yi-ri”回复“Typembed Code”即可获得~')); $form->addInput($typembed_code_text); $jump_play = new Typecho_Widget_Helper_Form_Element_Hidden('jump_play', NULL, 0); $form->addInput($jump_play->addRule('enum', _t('必须选择一个模式'), array(0, 1))); } } /** * 个人用户的配置面板 * * @access public * @param Typecho_Widget_Helper_Form $form * @return void */ public static function personalConfig(Typecho_Widget_Helper_Form $form){} /** * 移动设备识别 * * @return boolean */ private static function isMobile(){ $user_agent = $_SERVER['HTTP_USER_AGENT']; $mobile_browser = Array( "mqqbrowser", // 手机QQ浏览器 "opera mobi", // 手机opera "juc","iuc", 'ucbrowser', // uc浏览器 "fennec","ios","applewebKit/420","applewebkit/525","applewebkit/532","ipad","iphone","ipaq","ipod", "iemobile", "windows ce", // windows phone "240x320","480x640","acer","android","anywhereyougo.com","asus","audio","blackberry", "blazer","coolpad" ,"dopod", "etouch", "hitachi","htc","huawei", "jbrowser", "lenovo", "lg","lg-","lge-","lge", "mobi","moto","nokia","phone","samsung","sony", "symbian","tablet","tianyu","wap","xda","xde","zte" ); $is_mobile = false; foreach ($mobile_browser as $device) { if (stristr($user_agent, $device)) { $is_mobile = true; break; } } return $is_mobile; } }