Buenas buenas :)
Bueno, pues eso, necesitaba obtener la información básica de un vídeo de YouTube con PHP (titulo, descripción e imagen miniatura), entonces lo primero que se me ocurrió fue revisar el API (por aquí https://developers.google.com/youtube/2.0/developers_guide_php?csw=1), sin embargo de momento no necesitaba tanto, además de configurar todo, esto y aquello, que Zend, etc. naaa, no era lo que buscaba, así que revisé un poco más y me di cuenta que en la url (esa de arriba) mencionan mucho esta url https://gdata.youtube.com/feeds/api/ con múltiples terminaciones y por allí no tan abajo ni tan arriba vi esto:
https://developers.google.com/youtube/2.0/developers_guide_php#Retrieving_Video_Entry
Y pues eso, simplemente probé poniendo el valor de la variable GET v o sea esta (en negrita) https://www.youtube.com/watch?v=9R8L6D7nnxo armando la URL así https://gdata.youtube.com/feeds/api/XUu9SUevQwY y listo un lindo XML con lo que me interesaba.
Ahora si a lo que vamos, con PHP y su función de simple_xml_file se convierte ese xml en un objeto y obtenemos los valores que deseemos de ese objeto, pero para efectos prácticos, haremos el ejemplo usando dicha función y con curl (que ahi quienes aman curl, eso si que debes tener la libreria curl instalada y habilitada -> http://curl.haxx.se/libcurl/php/).
Vale para el ejemplo, supongamos que tenemos un form bien bonito con un input de tipo text (llamado txt_publicacion), los radio button para el modo de obtención (con curl o simplexml_load_file) y un botón que hace el submit del form hacia un archivo PHP que nos mostrara los datos (que describimos arriba) del vídeo.
index.html
<!DOCTYPE html> <html> <head> <title>Info YT</title> </head> <body> <form action="infoyt.php" method="post"> <input type="text" name="txa_publicacion" placeholder="URL de YouTube"> <label><input type="radio" name="rbt_tipo" value="xml" checked="checked"> XML</label> <label><input type="radio" name="rbt_tipo" value="curl"> CURL</label> <button type="submit" name="btn_infoyt">Muestrame la INFO</button> </form> </body> </html>
si, SI, eso es un bonito form (jejeje naaa, pero el diseño no importa en este caso). No explicaré a fondo ese código del index.html (creo no hace falta, incluso creo no puedo ir "a fondo" xDD).
Ahora si lo importante, el archivo php llamado:
ytinfo.php
<?php class parseInfoYT { public function ytParseCURL($url) { $code = ''; $return = ''; $ch_opciones = array( CURLOPT_URL => '', CURLOPT_HEADER => 0, CURLOPT_TIMEOUT => 5, CURLOPT_RETURNTRANSFER => TRUE ); if (preg_match("/youtube.com\/watch/", $url)) { $arr = explode('v=', $url); $arr2 = explode("&", $arr[1]); $code = $arr2[0]; } else if (preg_match("/youtu.be\//", $url)) { $arr = explode('youtu.be/', $url); $arr2 = explode("?", $arr[1]); $code = $arr2[0]; } if ($code != "") { $ch_opciones[CURLOPT_URL] = 'https://gdata.youtube.com/feeds/api/videos/' . $code; $ch = curl_init(); try { curl_setopt_array($ch, $ch_opciones); $xml = curl_exec($ch); } catch(Exception $e) { trigger_error(curl_error($ch)); die(); } finally { curl_close($ch); } $objXML = simplexml_load_string($xml); $return = array( 'titulo' => $objXML->title, 'descripcion' => $objXML->content, 'thumbnail' => 'https://i.ytimg.com/vi/' . $code . '/0.jpg' ); } return $return; } public function ytParseXML($url) { $code = ''; $return = ''; if (preg_match("/youtube.com\/watch/", $url)) { $arr = explode('v=', $url); $arr2 = explode("&", $arr[1]); $code = $arr2[0]; } else if (preg_match("/youtu.be\//", $url)) { $arr = explode('youtu.be/', $url); $arr2 = explode("?", $arr[1]); $code = $arr2[0]; } if ($code != "") { $ytURL = 'https://gdata.youtube.com/feeds/api/videos/' . $code; $xml = simplexml_load_file($ytURL); $return = array( 'titulo' => $xml->title, 'descripcion' => (strlen($xml->content) > 300) ? substr($xml->content, 0, 297) . '...' : $xml->content, 'thumbnail' => 'https://i.ytimg.com/vi/' . $code . '/0.jpg' ); } return $return; } } if (isset($_POST['btn_infoyt']) && isset($_POST['txa_publicacion']) && !empty($_POST['txa_publicacion'])) { $txa_publicacion = $_POST['txa_publicacion']; preg_match('@((https?://)?([-\w]+\.[-\w\.]+)+\w(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)*)@', $txa_publicacion, $urls); $objParseInfoYT = new parseInfoYT(); if (count($urls) > 0) { if ($_POST['rbt_tipo'] == 'xml') { $video = $objParseInfoYT->ytParseXML($urls[0]); } else if ($_POST['rbt_tipo'] == 'curl') { $video = $objParseInfoYT->ytParseCURL($urls[0]); } } if (isset($video) && $video != "" && is_array($video)) { echo '<div style="display: block; text-align: center;">'; echo '<h2>' . utf8_decode($video['titulo']) . '</h2>'; echo '<img src="' . $video['thumbnail'] . '">'; echo '<p style="display: block;">' . utf8_decode($video['descripcion']) . '</p>'; echo '</div>'; } else { echo 'Eso no tenia url de youtube <a href="index.html">VOLVER</a>'; } } else { header('Location: index.html'); }
Vale, este si lo explico, pero un poco ya que en función se ve claramente lo que hace... hay una clase (parseInfoYT) con 2 funciones ytParseCURL y ytParseXML. En ambas funciones se revisa el código de la url, con el preg_match aceptando la forma youtube.com o youtu.be, una vez extraído el código de la url se le concatena a la url antes mencionada ( https://gdata.youtube.com/feeds/api/ ) y ahora dependiendo del caso:
La primera función usa CURL con las opciones básicas para obtener el contenido del link que creamos ( https://gdata.youtube.com/feeds/api/ . $code ) y luego lo asigna a la variable $xml, una vez obtenido el xml se carga en la función simplexml_load_string (la cual es similar a simplexml_load_file solo que a la primera el parámetro de entrada es una variable de tipo string con el xml; la segunda el parámetro de entrada es igualmente un string pero con la ruta del archivo/url que contiene el xml) y genera el objeto, del cual extraemos los valores para asignarlos a un array que retornaremos al final;
En la segunda, se le pasa la url directamente a la función simplexml_load_file y se genera el objeto tal cual como en el anterior caso.
Notas:
* Para mas informacion sobre SimpleXML referirse a la guia de php.net https://php.net/manual/es/book.simplexml.php
* Para mas información de curl referirse a la guia de php.net https://php.net/manual/es/book.curl.php o donde este loco ciber-compa (arthusu) http://arthusu.blogspot.com/2014/04/parte-1-curl-en-php.html lo explica muy bien y tiene como 5 partes pero vale la pena, y desde 0 :3
Bueno, no siendo mas os dejo el proyecto en este link si desean descargarlo y verlo mas amenamente en su editor de código de preferencia: https://mega.co.nz/#!XVtHmDDD!dgFik-o-zBAh1zxo306N4nMZbTshabh0WsvUPT0RwwM
Saludos kid_goth
No hay comentarios:
Publicar un comentario