Generar thumbnail automático en WordPress desde el embebido de video

  • Autor Autor Franyer Rivas
  • Fecha de inicio Fecha de inicio
Franyer Rivas

Franyer Rivas

1
Pi
Verificado
Verificación en dos pasos activada
Verificado por Whatsapp
¡Ha verificado su Paypal!
Verificado por Binance
Suscripción a IA
Saludos
ando intentando programar un codigo para generar thumbnail automaticos en wordpress mediante el embeb que se coloque en la entrada

ejemplo
colocamos el embeb de X viseo
HTML:
<object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/7xPgaeR1zf4?fs=1&amp;hl=es_ES"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/7xPgaeR1zf4?fs=1&amp;hl=es_ES" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object>

de ese codigo deseo extraer unicamente lo que esta en rojo
http://www,youtube.com/v/7xPgaeR1zf4

para ello estoy usando el siguiente codigo
PHP:
function videoak($post,&$thumb_url) {
	$content = $post->post_content;
				preg_match('www.youtube.com/v/(.*?)/i',$content,$video_id);
				$thumb_url = 'http://img.youtube.com/vi/' . $video_id . '/2.jpg';					
}

el cual llamo de la siguiente manera
PHP:
<?php videoak($thumb_url) ?>

pero me da el siguiente error

PHP:
Warning: Missing argument 2 for videoak(), called in "RUTA DEL TEMA"
no se mucho de php que digamos apenas ando leyendo algo D:
que esta mal en mi codigo o que le falta o que le sobra ?
😵
 
Tu función usa dos parametros pero cuando lo usas solo le mandas uno. Checa eso.

Especificamente el parametro $post.
 
Solo porque odio las expresiones regulares.

A mi me funciona con esta regex:
PHP:
'www.youtube.com/v/(.*)'
Que me da como resultado esto:
PHP:
Array
(
    [0] => www.youtube.com/v/7xPgaeR1zf4
    [1] => 7xPgaeR1zf4
)
Asi que según la string $thumb_url
Me da este resultado:

PHP:
http://img.youtube.com/vi/7xPgaeR1zf4/2.jpg

Me pregunto realmente si la imagen es 2.jpg o debería de ser 7xPgaeR1zf4.jpg
El problema con tu expresión regular es que devuelve un nulo.
 
No soy muy bueno en PHP sólo, pero si hay algo que me llamó la atención:

PHP:
function videoak($post,&$thumb_url)

¿Que es ese simbolo "&"? ¿seguro que debería ir allí?

PHP:
Warning: Missing argument 2 for videoak(), called in "RUTA DEL TEMA"

Te falta un argumento en la función, probablemente el $post, ¿has probado así?

PHP:
<?php videoak($post,$thumb_url) ?>

Y otra cosa, la variable $thumb_url ya debe ser definida antes de llamar la función, asegrate de que así sea.
 
el codigo no lo genere yo en si es de un theme premium que hace lo mismo pero el theme toma el parametro del post custom que especifica el usuario
es hay donde deseo modificar la funcion de que sea 100% desantendido el codigo original era
PHP:
function print_video_thumb_supported_site($post,&$thumb_url) {
    $content = $post->post_content;
    if (preg_match(video_pattern(),$content, $match)) {
        // video found
        $content = $match[0];
        preg_match('/^\[(\w+)/',$content,$video_type);
        switch ($video_type[1]) {
            case 'youtube':
                preg_match('/v=(.*?)[\s&\[]/',$content,$video_id);
                $thumb_url = 'http://img.youtube.com/vi/' . $video_id[1] . '/2.jpg';
                return 1;
            case 'googlevideo':
                preg_match('/docid=(.*?)[\s&\[]/',$content,$docid);
                $url = 'http://video.google.com/videofeed?docid=' . $docid[1];
            $data = get_url($url);
                preg_match("/media:thumbnail url=\"([^\"]\S*)\"/siU",$data,$t_url); 
                $thumb_url = $t_url[1]; 
                return 1;
            case 'vimeo':
                preg_match('/\/(\d+)\[/',$content,$docid);
                $url = 'http://vimeo.com/api/clip/' . $docid[1] . '.php';
                $data = get_url($url);
                /* Bypass Vimeo Api problem: http://www.vimeo.com/forums/topic:11826 */
                preg_match('/thumbnail_large"\;s:\d+:"(.*?)"/',$data,$t_url);
                // $thumb_url = $t_url[0]['thumbnail_large'];
                $thumb_url = $t_url[1];
                return 1;
            case 'flv':
                preg_match('/\](.*?)\[/',$content,$url);
                $thumb_url = preg_replace('/\.((flv)|(swf)|(f4v))$/','.jpg',$url[1],1);
                return 1;
            case 'quicktime':
                preg_match('/\](.*?)\[/',$content,$url);
                $thumb_url = preg_replace('/\.mov$/','.jpg',$url[1],1);
                return 1;
            case 'dailymotion':
                preg_match('/\](.*?)\[/',$content,$url);
                $data = get_url($url[1]);
                preg_match('/\.addVariable\("preview",\s*"(.*?)"\)/',$data,$t_url);
                $thumb_url = urldecode($t_url[1]);
                return 1;
            case 'veoh':
                preg_match('/\/watch\/([[:alnum:]]+)[\s&\[]/',$content,$docid);
                $url = 'http://www.veoh.com/rest/video/' . $docid[1] . '/details';
                $data = get_url($url);
                preg_match('/fullHighResImagePath="(.*?)"/', $data, $t_url);
                $thumb_url = $t_url[1];
                return 1;
            case 'viddler':
                preg_match('/id=([[:alnum:]]+)/',$content,$docid);
                $thumb_url = 'http://cdn-thumbs.viddler.com/thumbnail_2_' . $docid[1] . '.jpg';
                return 1;
            case 'metacafe':
                preg_match('/\/watch\/([0-9]+)\//',$content,$docid);
                $thumb_url = 'http://s4.mcstatic.com/thumb/' . $docid[1] . '.jpg';
                return 1;
            case 'blip':
                preg_match('/posts_id=([[:alnum:]]+)/',$content,$docid);
                $url = 'http://blip.tv/rss/flash/' . $docid[1];
                $data = get_url($url);
                preg_match('/<blip:smallThumbnail>(.*?)<\/blip:smallThumbnail>/', $data, $t_url);
                $thumb_url = $t_url[1];
                return 1;
            case 'flickrvideo':
                preg_match('/\](.*?)\[/',$content,$url);
                preg_match('/\/([0-9]+)\/?\[/',$content,$docid);
                $data = get_url($url[1]);
                preg_match('/\.video_thumb_src\s*=\s*\'(\S+)\';/',$data,$t_url);
                $thumb_url = $t_url[1];
                return 1;
            case 'spike':
                preg_match('/\/([0-9]+)\/?\[/',$content,$docid);
                $thumb_url = 'http://dyn.ifilm.com/resize/image/stills/films/resize/istd/' . $docid[1] . '.jpg?width=160';
                return 1;
        }
    }
}

trae para varios servidores pero a mi me interesa solo youtube :/
 
ese simbolo "&" es para pasar la variable por referencia. Eso significa que la segunda variable que pase como parámetro podrá ser editada dentro de la función, en este caso $thumb_url.

Esta funcion lo que hace es:

recibe un objeto $post. Copia en una variable local $content el contenido del atributo "post_content" del objeto. Busca en $content la estructura "www.youtube.com/v/(.*?)/i". Copia lo que hay en "(.*?)" y lo guarda en $video_id. Modifica el valor de la variable $thumb_url con la url del thumb (que se cambiará fuera de la función tambien).

La funcion creo que tendria que funcionar, el error que te da es que no le pasas 2 parametros cuando llamas la funcion. Te recuerdo que le tienes que pasar: un $post (supongo que de WordPress tienen esa estructura) y un string donde se te guardará la url de la imagen. Ejemplo:
PHP:
loop()://No se como era exactamente en WP esto, entiendo que algo como foreach($posts as $post):
//aquí lo importante
$img_url = 'http://www.sitio.com/default.jpg'; //Default por si no tienes resultados
videoak($post,&$img_url);
echo '<img src="'.$img_url.'" alt="mi imagen">';
//...
;

Suerte!
 
Si llamás a la función desde el loop de wordpress, así tiene que funcionar:
PHP:
function videoak() { 
	global $post;
	$content = $post->post_content;
	preg_match('www.youtube.com/v/(.*?)/i', $content, $video_id[1]); 
	$thumb_url = 'http://img.youtube.com/vi/' . $video_id . '/2.jpg';                                 
}

Llamalo como:

PHP:
<?php videoak(); ?>

Edit:

Si no funciona, modifica esta linea (Agregue un "?" luego del ID del video)
PHP:
preg_match('www.youtube.com/v/(.*?)\?/i', $content, $video_id[1]);
 
Última edición:
Gracias
ya logre gestionarlo y quedo de maravilla mil gracia a todos 🙂
 
Atrás
Arriba