366 lines
14 KiB
PHP
366 lines
14 KiB
PHP
<?php
|
|
if(!function_exists('add_filter')) exit;
|
|
function fansub_video_source_meta_box($post_types = array()) {
|
|
if(!fansub_array_has_value($post_types)) {
|
|
$post_types[] = 'post';
|
|
}
|
|
$meta = new FANSUB_Meta('post');
|
|
$meta->set_post_types($post_types);
|
|
$meta->set_title(__('Video Source Information', 'fansub'));
|
|
$meta->set_id('fansub_theme_video_source_information');
|
|
$meta->add_field(array('field_args' => array('id' => 'video_url', 'label' => 'Video URL:')));
|
|
$meta->add_field(array('field_args' => array('id' => 'video_code', 'label' => 'Video code:'), 'field_callback' => 'fansub_field_textarea'));
|
|
$meta->init();
|
|
}
|
|
|
|
function fansub_video_play($args = array()) {
|
|
$post_id = isset($args['post_id']) ? $args['post_id'] : get_the_ID();
|
|
$video_url = get_post_meta($post_id, 'video_url', true);
|
|
$video_code = get_post_meta($post_id, 'video_code', true);
|
|
if(empty($video_url) && empty($video_code)) {
|
|
if(fansub_automatic_video_posts_installed()) {
|
|
$video_url = get_post_meta($post_id, '_ayvpp_video_url', true);
|
|
}
|
|
}
|
|
$autoplay = isset($args['autoplay']) ? $args['autoplay'] : false;
|
|
$width = isset($args['width']) ? $args['width'] : '';
|
|
$height = isset($args['height']) ? $args['height'] : '';
|
|
$rel = isset($args['rel']) ? $args['rel'] : false;
|
|
$cc = isset($args['cc_load_policy']) ? $args['cc_load_policy'] : false;
|
|
$iv = isset($args['iv_load_policy']) ? $args['iv_load_policy'] : false;
|
|
$showinfo = isset($args['showinfo']) ? $args['showinfo'] : false;
|
|
$player_id = fansub_get_value_by_key($args, 'player_id', 'fansub_player');
|
|
if(empty($player_id)) {
|
|
$player_id = 'fansub_player';
|
|
}
|
|
if(!empty($video_code)) {
|
|
if($height > 0) {
|
|
$video_code = preg_replace('/height="(.*?)"/i', 'height="' . $height . '"', $video_code);
|
|
}
|
|
if($width > 0) {
|
|
$video_code = preg_replace('/width="(.*?)"/i', 'width="' . $width . '"', $video_code);
|
|
}
|
|
$video_code = preg_replace('/id="(.*?)"/i', 'id="' . $player_id . '"', $video_code);
|
|
if(!fansub_string_contain($video_code, 'id="')) {
|
|
$video_code = str_replace('<iframe', '<iframe id="' . $player_id . '"', $video_code);
|
|
}
|
|
$video_code = apply_filters('fansub_video_code_result', $video_code, $args);
|
|
echo $video_code;
|
|
} else {
|
|
if(!empty($video_url)) {
|
|
$video_args = array(
|
|
'rel' => 0,
|
|
'showinfo' => 0,
|
|
'cc_load_policy' => 0,
|
|
'iv_load_policy' => 3,
|
|
'start' => 1
|
|
);
|
|
if($showinfo) {
|
|
$video_args['showinfo'] = 1;
|
|
}
|
|
if($cc) {
|
|
$video_args['cc_load_policy'] = 1;
|
|
}
|
|
if($iv) {
|
|
$video_args['iv_load_policy'] = 1;
|
|
}
|
|
if((bool)$autoplay) {
|
|
$video_args['autoplay'] = 1;
|
|
}
|
|
if($rel) {
|
|
$video_args['rel'] = 1;
|
|
}
|
|
$video_args = apply_filters('fansub_embed_video_args', $video_args);
|
|
$html = wp_oembed_get($video_url, $video_args);
|
|
if($height > 0) {
|
|
$html = preg_replace('/height="(.*?)"/i', 'height="' . $height . '"', $html);
|
|
}
|
|
if($width > 0) {
|
|
$html = preg_replace('/width="(.*?)"/i', 'width="' . $width . '"', $html);
|
|
}
|
|
$html = preg_replace('/id="(.*?)"/i', 'id="' . $player_id . '"', $html);
|
|
if(!fansub_string_contain($html, 'id="')) {
|
|
$html = str_replace('<iframe', '<iframe id="' . $player_id . '"', $html);
|
|
}
|
|
$html = apply_filters('fansub_embed_video_result', $html, $video_args);
|
|
echo $html;
|
|
}
|
|
}
|
|
|
|
$video_id = get_post_meta($post_id, 'video_id', true);
|
|
if(!empty($video_id)) {
|
|
$video_server = get_post_meta($post_id, 'video_server', true);
|
|
if('youtube' == $video_server) {
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
function fansub_detect_video_server_name($url) {
|
|
$result = 'unknown';
|
|
if(is_array($url)) {
|
|
$url = array_shift($url);
|
|
}
|
|
if(false !== strrpos($url, 'youtube') || false !== strrpos($url, 'youtu.be')) {
|
|
$result = 'youtube';
|
|
} elseif(false !== strrpos($url, 'vimeo')) {
|
|
$result = 'vimeo';
|
|
} elseif(false !== strrpos($url, 'dailymotion') || false !== strrpos($url, 'dai.ly')) {
|
|
$result = 'dailymotion';
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
function fansub_detect_video_id($url) {
|
|
$result = '';
|
|
if(is_array($url)) {
|
|
$url = array_shift($url);
|
|
}
|
|
$server = fansub_detect_video_server_name($url);
|
|
$data = parse_url($url);
|
|
$query = isset($data['query']) ? $data['query'] : '';
|
|
parse_str($query, $output);
|
|
switch($server) {
|
|
case 'youtube':
|
|
$result = isset($output['v']) ? $output['v'] : '';
|
|
if(empty($result)) {
|
|
$result = fansub_get_last_part_in_url($url);
|
|
}
|
|
break;
|
|
case 'vimeo':
|
|
$result = intval(fansub_get_last_part_in_url($url));
|
|
break;
|
|
case 'dailymotion':
|
|
$result = fansub_get_last_part_in_url($url);
|
|
break;
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
function fansub_save_video_default_meta($post_id) {
|
|
if(!fansub_can_save_post($post_id)) {
|
|
return;
|
|
}
|
|
$video_url = get_post_meta($post_id, 'video_url');
|
|
$server_name = fansub_detect_video_server_name($video_url);
|
|
update_post_meta($post_id, 'video_server', $server_name);
|
|
$video_id = fansub_detect_video_id($video_url);
|
|
update_post_meta($post_id, 'video_id', $video_id);
|
|
if(!has_post_thumbnail($post_id)) {
|
|
$thumbnail_url = '';
|
|
$thumbnails = array();
|
|
switch($server_name) {
|
|
case 'youtube':
|
|
$api_key = fansub_get_google_api_key();
|
|
$data = fansub_get_youtube_thumbnail_data_object($api_key, $video_id);
|
|
$thumbnails = fansub_get_youtube_thumbnails($api_key, $video_id, $data);
|
|
$thumbnail_url = fansub_get_youtube_thumbnail($api_key, $video_id, 'medium', $thumbnails);
|
|
break;
|
|
case 'vimeo':
|
|
$thumbnails = fansub_get_vimeo_thumbnails($video_id);
|
|
$thumbnail_url = fansub_get_vimeo_thumbnail($video_id, 'medium', $thumbnails);
|
|
break;
|
|
case 'dailymotion':
|
|
$thumbnails = fansub_get_dailymotion_thumbnails($video_id);
|
|
$thumbnail_url = fansub_get_dailymotion_thumbnail($video_id, 'medium', $thumbnails);
|
|
break;
|
|
}
|
|
update_post_meta($post_id, 'thumbnail_url', $thumbnail_url);
|
|
update_post_meta($post_id, 'thumbnails', $thumbnails);
|
|
}
|
|
}
|
|
|
|
function fansub_convert_automatic_video_posts_data($post_id) {
|
|
if(fansub_automatic_video_posts_installed()) {
|
|
$video_id = get_post_meta($post_id, 'video_id', true);
|
|
if(empty($video_id)) {
|
|
$video_code = get_post_meta($post_id, 'video_code', true);
|
|
if(empty($video_code)) {
|
|
$video_url = get_post_meta($post_id, '_ayvpp_video_url', true);
|
|
if(!empty($video_url)) {
|
|
update_post_meta($post_id, 'video_url', $video_url);
|
|
fansub_save_video_default_meta($post_id);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function fansub_add_parameter_to_oembed_result($html, $url, $args) {
|
|
$args['ogenerated'] = 'fansub';
|
|
$parameters = http_build_query($args);
|
|
$html = str_replace('?feature=oembed', '?feature=oembed'. '&' . $parameters, $html);
|
|
return $html;
|
|
}
|
|
add_filter('oembed_result','fansub_add_parameter_to_oembed_result', 99, 3);
|
|
|
|
function fansub_get_youtube_data_object($api_key, $video_id) {
|
|
$transient_name = 'fansub_theme_youtube_' . $video_id . '_data_object';
|
|
$transient_name = strtolower($transient_name);
|
|
if(false === ($data = get_transient($transient_name))) {
|
|
$data = file_get_contents('https://www.googleapis.com/youtube/v3/videos?key=' . $api_key . '&part=snippet&id=' . $video_id);
|
|
$data = json_decode($data);
|
|
set_transient($transient_name, $data, YEAR_IN_SECONDS);
|
|
}
|
|
return $data;
|
|
}
|
|
|
|
function fansub_get_youtube_thumbnail_data_object($api_key, $video_id) {
|
|
$transient_name = 'fansub_youtube_' . $video_id . '_thumbnail_object';
|
|
$transient_name = strtolower($transient_name);
|
|
if(false === ($data = get_transient($transient_name))) {
|
|
$data = fansub_get_youtube_data_object($api_key, $video_id);
|
|
$data = $data->items[0]->snippet->thumbnails;
|
|
set_transient($transient_name, $data, YEAR_IN_SECONDS);
|
|
}
|
|
return $data;
|
|
}
|
|
|
|
function fansub_get_valid_video_thumbnail_data($arr, $key) {
|
|
return fansub_find_valid_value_in_array($arr, $key);
|
|
}
|
|
|
|
function fansub_get_valid_youtube_thumbnail($arr, $key) {
|
|
$result = '';
|
|
if(is_array($arr)) {
|
|
if(isset($arr[$key])) {
|
|
$result = isset($arr[$key]['url']) ? $arr[$key]['url'] : '';
|
|
} else {
|
|
$index = absint(count($arr)/2);
|
|
if(isset($arr[$index])) {
|
|
$last = $arr[$index];
|
|
} else {
|
|
$last = current($arr);
|
|
}
|
|
$result = isset($last['url']) ? $last['url'] : '';
|
|
}
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
function fansub_get_youtube_thumbnails($api_key, $video_id, $data = null) {
|
|
if(null == $data) {
|
|
$data = fansub_get_youtube_thumbnail_data_object($api_key, $video_id);
|
|
$data = fansub_std_object_to_array($data);
|
|
} elseif(is_object($data)) {
|
|
$data = fansub_std_object_to_array($data);
|
|
}
|
|
$result = array(
|
|
'small' => fansub_get_value_by_key($data, array('default', 'url')),
|
|
'medium' => fansub_get_value_by_key($data, array('medium', 'url')),
|
|
'high' => fansub_get_value_by_key($data, array('high', 'url')),
|
|
'standard' => fansub_get_value_by_key($data, array('standard', 'url')),
|
|
'large' => fansub_get_value_by_key($data, array('maxres', 'url'))
|
|
);
|
|
return $result;
|
|
}
|
|
|
|
function fansub_get_youtube_thumbnail($api_key, $video_id, $type = 'medium', $thumbnails = null) {
|
|
if(!is_array($thumbnails)) {
|
|
$thumbnails = fansub_get_youtube_thumbnails($api_key, $video_id);
|
|
}
|
|
return fansub_get_valid_video_thumbnail_data($thumbnails, $type);
|
|
}
|
|
|
|
function fansub_get_youtube_thumbnail_url($api_key, $video_id, $type = 'medium', $data = null) {
|
|
if(null == $data) {
|
|
$data = fansub_get_youtube_thumbnail_data_object($api_key, $video_id);
|
|
$data = fansub_std_object_to_array($data);
|
|
} elseif(is_object($data)) {
|
|
$data = fansub_std_object_to_array($data);
|
|
}
|
|
$result = fansub_get_valid_youtube_thumbnail($data, $type);
|
|
return $result;
|
|
}
|
|
|
|
function fansub_get_vimeo_data($id) {
|
|
$transient_name = 'fansub_vimeo_' . $id . '_data';
|
|
$transient_name = strtolower($transient_name);
|
|
if(false === ($data = get_transient($transient_name))) {
|
|
$url = 'http://vimeo.com/api/v2/video/' . $id . '.php';
|
|
$data = unserialize(file_get_contents($url));
|
|
$data = isset($data[0]) ? $data[0] : array();
|
|
set_transient($transient_name, $data, YEAR_IN_SECONDS);
|
|
}
|
|
return $data;
|
|
}
|
|
|
|
function fansub_get_vimeo_thumbnails($id) {
|
|
$data = fansub_get_vimeo_data($id);
|
|
$small = fansub_get_value_by_key($data, 'thumbnail_small');
|
|
$medium = fansub_get_value_by_key($data, 'thumbnail_medium');
|
|
$large = fansub_get_value_by_key($data, 'thumbnail_large');
|
|
$result = array(
|
|
'thumbnail_small' => $small,
|
|
'thumbnail_medium' => $medium,
|
|
'thumbnail_large' => $large,
|
|
'small' => $small,
|
|
'medium' => $medium,
|
|
'large' => $large
|
|
);
|
|
return $result;
|
|
}
|
|
|
|
function fansub_get_vimeo_thumbnail($id, $type = 'medium', $thumbnails = null) {
|
|
if(!is_array($thumbnails)) {
|
|
$thumbnails = fansub_get_vimeo_thumbnails($id);
|
|
}
|
|
return fansub_get_valid_video_thumbnail_data($thumbnails, $type);
|
|
}
|
|
|
|
function fansub_get_dailymotion_data($id) {
|
|
$transient_name = 'fansub_dailymotion_' . $id . '_data';
|
|
$transient_name = strtolower($transient_name);
|
|
if(false === ($data = get_transient($transient_name))) {
|
|
$fields = array(
|
|
'thumbnail_small_url',
|
|
'thumbnail_medium_url',
|
|
'thumbnail_large_url',
|
|
'thumbnail_720_url'
|
|
);
|
|
$fields = apply_filters('fansub_dailymotion_data_fields', $fields);
|
|
$fields = implode(',', $fields);
|
|
$url = 'https://api.dailymotion.com/video/' . $id . '?fields=' . $fields;
|
|
$data = file_get_contents($url);
|
|
$data = fansub_json_string_to_array($data);
|
|
set_transient($transient_name, $data, YEAR_IN_SECONDS);
|
|
}
|
|
return $data;
|
|
}
|
|
|
|
function fansub_get_dailymotion_thumbnails($id) {
|
|
$data = fansub_get_dailymotion_data($id);
|
|
$small = fansub_get_value_by_key($data, 'thumbnail_small_url');
|
|
$medium = fansub_get_value_by_key($data, 'thumbnail_medium_url');
|
|
$large = fansub_get_value_by_key($data, 'thumbnail_large_url');
|
|
$result = array(
|
|
'thumbnail_small' => $small,
|
|
'thumbnail_medium' => $medium,
|
|
'thumbnail_large' => $large,
|
|
'small' => $small,
|
|
'medium' => $medium,
|
|
'large' => $large
|
|
);
|
|
return $result;
|
|
}
|
|
|
|
function fansub_get_dailymotion_thumbnail($id, $type = 'medium', $thumbnails = null) {
|
|
if(!is_array($thumbnails)) {
|
|
$thumbnails = fansub_get_dailymotion_thumbnails($id);
|
|
}
|
|
return fansub_get_valid_video_thumbnail_data($thumbnails, $type);
|
|
}
|
|
|
|
function fansub_automatic_video_posts_installed() {
|
|
$result = false;
|
|
if(function_exists('WP_ayvpp_activate_plugin')) {
|
|
$result = true;
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
function fansub_youtube_default_video_thumbnail_url($video_id) {
|
|
$url = 'https://i.ytimg.com/vi/' . $video_id . '/default.jpg';
|
|
$url = apply_filters('fansub_youtube_default_video_thumbnail_url', $url, $video_id);
|
|
return $url;
|
|
} |