PHP Youtube Downloader 2.0

  • 14/12/2007
  • 1:11 am
  • unijimpe

A solicitud de nuestros visitantes les presentamos PHP Youtube Downloader 2.0 la cual es la nueva versión del script PHP que permite descargar vídeos de Youtube utilizando PHP. Esta nueva versión esta adaptada a la nueva estructura de datos de Youtube.

phpyoutube20.jpg

Nota: Esta información es para propósitos educativos, el autor no se responsabiliza de los usos que puedan hacer los usuarios de la presente información

Como funciona?
Para una explicación detallada de como funciona las rutas de Youtube pueden leer: Constructing YouTube FLV URL on client-side without any server-side script. Pero resumiendo cuando se desea acceder a un vídeo de Youtube, primero se genera un identificador de sesión que se devuelve al usuario y posteriormente se hace el llamado al vídeo con el identificador del vídeo y el identificador de sesión de la forma:

HTML:
  1. http://www.youtube.com/get_video.php?video_id=idvideo&t=idsesion

Entonces para obtener los vídeos, nuestro objetivo es obtener el idsesion para construir la ruta final del descarga.

Implementando
Lo primero que hacemos es construir una función que se conecte a Youtube y obtenga los headers de respuesta a la petición inicial del vídeo, entre estos headers estará el identificador que necesitamos. Nótese que esta función recibe como parámetro el identificador del vídeo.

PHP:
  1. function getHeaders($varurl) {
  2.     $host = "www.youtube.com";
  3.     $url = "/v/".$varurl;
  4.     $session = "";
  5.     $fp = fsockopen ($host, 80, $errno, $errstr, 45);
  6.     if ($fp) {
  7.         fputs ($fp, "GET $url HTTP/1.0\r\n\r\n");
  8.         while (!feof($fp)) {
  9.             $char = fgetc($fp);
  10.             if($char === "\n") {
  11.                 if (ord($header) === 13) {
  12.                     return($session);
  13.                 } else {
  14.                     $arrValue = split(": ", trim($header));
  15.                     if ($arrValue[0] == "Location") {
  16.                         parse_str($arrValue[1], $getvars);
  17.                         $session = $getvars['t'];
  18.                     }
  19.                 }
  20.                 unset($header);
  21.             } else {
  22.                 $header = $header.$char;
  23.             }
  24.         }
  25.         fclose ($fp);
  26.     }
  27. }

El siguiente paso es crear la URL con la ruta final del vídeo que deseamos acceder, en nuestro caso estamos recibiendo el identificador del vídeo por método GET de un formulario y estamos construyendo el URL mostrado al inicio en donde obtenemos el identificador de sesión haciendo uso de la función getHeaders.

PHP:
  1. if ($_GET['v'] != "") {
  2.     $videoIds = $_GET['v'];
  3.     $videoUrl = "http://www.youtube.com/get_video.php";
  4.     header("Location: ".$videoUrl."?video_id=".$videoIds."&t=".getHeaders($videoIds));
  5.     exit();
  6. }

Uniendo el código, agregando un formulario en el cual el usuario ingresa el id del vídeo obtenemos la nueva versión de nuestra herramienta para descargar vídeos de Youtube solo utilizando PHP. Pueden ver el ejemplo funcionando en: http://samples.unijimpe.net/phpyoutube.php

Finalmente les dejo los archivos fuente de este ejemplo para que lo puedan revisar y mejorar.

Posts Relacionados

Evitar cache con PHP

  • 13/12/2007
  • 11:59 pm
  • unijimpe

En esta ocasión veremos la forma de prevenir el cache de contenido con PHP. Normalmente cuando se accede a una página web, el browser guarda una copia para que en la siguiente ocasión que solicites esa página accedas de forma mas rápida.

Nuestro objetivo es evitar que el browser guarde el contenido de nuestras páginas, esto para que el usuario acceda siempre a la ultima información de nuestro web.

Evitando Cache
Para evitar cache de contenido, enviamos headers para los diferentes navegadores indicando que el contenido no se debe guardar en la memoria cache. Esto lo hacemos de la forma:

PHP:
  1. header("Expires: Tue, 03 Jul 2001 06:00:00 GMT");
  2. header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
  3. header("Cache-Control: no-store, no-cache, must-revalidate");
  4. header("Cache-Control: post-check=0, pre-check=0", false);
  5. header("Pragma: no-cache");

Ahora bien, en caso que vayamos a utilizar esta función repetidas veces es conveniente contertir este código en una función.

PHP:
  1. // archivo: functions.php
  2. function noCache() {
  3.   header("Expires: Tue, 01 Jul 2001 06:00:00 GMT");
  4.   header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
  5.   header("Cache-Control: no-store, no-cache, must-revalidate");
  6.   header("Cache-Control: post-check=0, pre-check=0", false);
  7.   header("Pragma: no-cache");
  8. }

Luego en cada página que deseamos prevenir cache, primero incluimos el archivo y luego llamamos a la función, esto se hace al inicio de toda página php.

PHP:
  1. include("function.php");
  2. ae_nocache();
  3. // codigo php

Como ven, con dos lineas adicionales a nuestras páginas podemos evitar el cache. Espero les sirva este tip que aunque es muy sencillo siempre hace falta.

Posts Relacionados

Centrar contenido con CSS

  • 09/12/2007
  • 9:45 pm
  • unijimpe

Uno de los problemas típicos es centrar horizontalmente y verticalmente contenido HTML utilizando CSS. Esto por que no es fácil conseguir posicionar verticalmente un elemento. Este truco lo leí en algún lugar pero lamentablemente no recuerdo donde así que me disculpo con el autor original de este método.

Centrando con CSS
La idea básica es utilizar posicionamiento absoluto y ubicar primero el contenido en el medio de la pantalla, luego le asignamos margen superior e izquierdo negativos en cantidades equivalentes a la mitad de las dimensiones del contenido que deseamos centrar. Luego si tenemos una imagen de 300x236 pixels de dimensiones tendríamos el CSS de la forma:

CSS:
  1. #main {
  2.     width: 300px;
  3.     height: 236px;
  4.     position: absolute;
  5.     top: 50%;
  6.     left: 50%;
  7.     margin-top: -118px; /* 50% del alto*/
  8.     margin-left: -150px; /* 50% del ancho */
  9. }

Luego, incluimos la imagen dentro de un div llamado main, unimos el código y obtenemos la forma completa para el centrado.

HTML:
  1. <title>Centrar con CSS - unijimpe</title>
  2. <style type="text/css">
  3. <style type="text/css">
  4. #main {
  5.     position: absolute;
  6.     top: 50%;
  7.     left: 50%;
  8.     margin-top: -118px;
  9.     margin-left: -150px;
  10.     width: 300px;
  11.     height: 236px;
  12. }
  13. </style>
  14. </head>
  15. <div id="main">
  16.     <img src="screenshot.png" width="300" height="236">
  17. </div>
  18. </body>
  19. </html>

Pueden ver el resultado de este ejemplo en: css-center-img.html.

Centrar SWFs con CSS
Podemos utilizar la misma técnica de centrado, para ello si utilizamos SWFObject, tendríamos el siguiente código al insertar un swf con dimensiones de 231x132 pixels.

HTML:
  1. <title>Centrar con CSS - unijimpe</title>
  2. <script src="swfobject.js" type="text/javascript"></script>
  3. <style type="text/css">
  4. #main {
  5.     width: 231px;
  6.     height: 132px;
  7.     position: absolute;
  8.     top: 50%;
  9.     left: 50%;
  10.     margin-top: -66px;
  11.     margin-left: -115px;
  12. }
  13. </style>
  14. </head>
  15. <div id="main"></div>
  16. <script type="text/javascript">
  17. var so = new SWFObject("7762.swf","id","231","132","9","#FFF");
  18. so.write("main");
  19. </script>
  20. </body>
  21. </html>

Podemos ver el resultado en css-center-swf.html. Como ven muy sencillo y ademas es compatible con la mayoría de navegadores.

Posts Relacionados