Buenas!

Este es el primer post que publico sobre programación y sistemas desarrollados con un buen funcionamiento =) y como ahorita esta de moda eso de los videos y musica pues aquí te explicare como puedes desarrollar tu propia página web con sistema de reproducción de videos y lo mejor de todo es que también funciona con musica mp3 asi que hasta puedes crear tu propio ITunes en linea =) exelente no? bueno empezamos.

Este sistemita lo cree hace como un año y ya tenia ganas de compartirlo pero no sabia donde hasta que se me ocurrio este blog :P
Bueno pues en ese entonces yo progamaba en ASP y pues el sistema por lo tanto esta desarrollado con ese lenguaje... pero si alguien le interesa tenerlo en PHP que me diga y pues intentare traducirlo y publicarlo ;)

1. Creamos un index.asp donde tendremos el sistema de busqueda de videos y mp3 y ahi el ususario seleccionará cual video o canción desea reproducir. Al darle clic al titulo o imagen, te mandara a otra página [video.asp] donde tendremos el reproductor (que por cierto es de Flash) y ahí en el mismo reproductor podremos reproducir la canción o video seleccionado.

2. En el index.asp tendremos lo siguiente:

HTML:
  1. <%@LANGUAGE="VBSCRIPT" CODEPAGE="1252"%>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  5. <title>Your Video</title>
  6. <style type="text/css">
  7. <!--
  8. body,td,th {
  9.     font-family: Arial, Helvetica, sans-serif;
  10.     color: #990033;
  11. }
  12. body {
  13.     background-color:#FBFBFB;
  14.     margin-left: 15px;
  15.     margin-right: 15px;
  16. }
  17. a:link {
  18.     color: #990033;
  19. }
  20. a:visited {
  21.     color: #CC0000;
  22. }
  23. .style2 {
  24.     color: #990000;
  25.     font-weight: bold;
  26. }
  27. -->
  28. </style>
  29. </head>
  30.  
  31. <script type="text/javascript">
  32. <!--
  33. function vacio(v) {
  34.   for (i=0; i<v.length; i++)
  35.     {
  36.      if (v.charAt(i)!=" ")
  37.        { return true }
  38.     }
  39.   alert("Introduce una busqueda correcta");
  40.   document.busqueda.video.value="";
  41.   document.busqueda.video.focus();
  42.   return false
  43. }
  44. //-->
  45. </script>
  46.  
  47. <!-- #include file="conexion.asp" -->
  48. <table align="center" border="0" width="80%"><tr align="center" valign="middle"><td align="center" valign="middle">
  49.    <table align="left" border="0" width="100%"><tr align="left" valign="middle"><td width="644" align="left" valign="middle">
  50.      <img src="cabeza.jpg" width="608" height="160" />
  51.    </td></tr></table>
  52. </td></tr>
  53. <table align="left" border="0" width="100%"><tr align="center" valign="middle"><td align="center" valign="middle">
  54.   <table align="rigth" border="0" width="100%"><tr align="center" valign="middle">
  55.    <td width="88%"></td>
  56.     <td align="center" valign="middle" width="6%">
  57.       <a href="index.asp"><span class="style2"><font size="2" face="Arial, Helvetica, sans-serif">Explorar</font></span></a>
  58.     </td>
  59.     <td align="center" valign="middle" width="6%">
  60.       <a href="subir.asp"><span class="style2"><font size="2" face="Arial, Helvetica, sans-serif">Subir</font></span></a>
  61.     </td>
  62.   </tr></table>
  63.   <legend><strong><font color="#990033" size="3" face="Arial, Helvetica, sans-serif">Busqueda</font></strong></legend>
  64.   <form action="index.asp" method="post" name="busqueda" id="busqueda" onsubmit="return vacio(document.busqueda.video.value)">
  65.    <table><tr><td align="left" valign="middle">
  66.     <input type="radio" name="tipo" value="FLV" />
  67.     <font color="#990033" size="2" face="Arial, Helvetica, sans-serif">Video</font>
  68.     </td></tr>
  69.     <tr><td align="left" valign="middle">
  70.     <input type="radio" name="tipo" value="MP3" />
  71.     <font color="#990033" size="2" face="Arial, Helvetica, sans-serif">Audio</font>
  72.     </td></tr>
  73.     <tr><td>
  74.     &nbsp;<input type="text" name="video" />
  75.     
  76.   <script type="text/JavaScript">
  77.   <!--
  78.   document.busqueda.video.focus();
  79.   //-->
  80.   </script>
  81.  
  82.     <input type="submit" name="buscar" value="Buscar" />
  83.   </td></tr></table>
  84. </form>
  85. </fieldset>
  86.  
  87. <%
  88. if (request.form("buscar")="Buscar") then 
  89.    vid=trim(request.form("video"))
  90.    tipo=request.form("tipo")
  91.    a=0
  92.    ban=0
  93.    Dim palabras(99999)
  94.    i=-1
  95.    
  96.    while (a<len(vid)) 'buscamos las palabras en la BD
  97.       i=i+1
  98.       ban1=0
  99.       video=""
  100.       while ((ban1=0) and (a<len(vid)))'sakamos palabra por palabra
  101.         a=a+1
  102.         if (mid(vid,a,1)<>" ") then 'si es una letra (sin espacios) entonces
  103.           video=video & mid(vid,a,1)
  104.           ban1=0
  105.         else
  106.           if video="" then
  107.             ban1=0
  108.           else
  109.             ban1=1
  110.           end if
  111.         end if
  112.       wend 
  113.       video=replace(video,"'","\t8t\")
  114.       video=replace(video,"%","\p8p\")
  115.       palabras(i)=video 
  116.    wend
  117.    
  118.    'hacemos consulta a la BD
  119.    if tipo="" then
  120.      strSQL = "SELECT * FROM videos WHERE video LIKE '%" & palabras(0) & "%'"
  121.    else
  122.      if tipo="FLV" then
  123.        strSQL = "SELECT * FROM videos WHERE tipo='FLV' AND video LIKE '%" & palabras(0) & "%'"
  124.      else
  125.        if tipo="MP3" then
  126.          strSQL = "SELECT * FROM videos WHERE tipo='MP3' AND video LIKE '%" & palabras(0) & "%'"
  127.        end if
  128.      end if
  129.    end if   
  130.    
  131.    for j=1 to i
  132.      strSQL = strSQL & " AND video LIKE '%" & palabras(j) & "%'"
  133.    next
  134.    strSQL = strSQL & " ORDER BY video"     
  135.    Set objRS = conn.Execute(strSQL)
  136.    Set contador = conn.Execute(strSQL)  'cuento el total de resultados
  137.    
  138.    'Ciclo para contar recultados
  139.    if (not contador.Eof) then
  140.      while not contador.Eof
  141.        cr=cr+1
  142.        contador.movenext
  143.      wend
  144.    else
  145.      cr=0
  146.    end if
  147.    
  148.    if (not objRS.Eof) then 'si hay algun resultado
  149.   %> 
  150.      <br><br>
  151.      <table border="0" width="100%"><tr height="15" align="right"><td align="right" valign="middle"><font size="2" face="Arial, Helvetica, sans-serif">
  152.       <%
  153.        if tipo="" then
  154.          response.write("Se encontraron " & cr & " resultados para <b>'" & vid & "'")
  155.        else
  156.          if tipo="FLV" then
  157.            response.write("Se encontraron " & cr & " resultados de video para <b>'" & vid & "'")
  158.          else
  159.            if tipo="MP3" then
  160.              response.write("Se encontraron " & cr & " resultados de audio para <b>'" & vid & "'")
  161.            end if
  162.          end if
  163.        end if
  164.       %>
  165.       </b></font></td></tr></table>
  166.      <hr color="#990000" width="100%" align="right" size="2"/>
  167.   <%
  168.    while not objRS.Eof  'Mientras no llegue al final de la tabla   
  169. %>
  170. <table width="581" border="0">
  171.   <tr>
  172.     <td width="101" height="103"><% response.write("<a href='video.asp?tipo=" & objRS("tipo") & "&video=" & objRS("link") & "'><img border='0' src='video" & objRS("tipo") & ".jpg'/>")%></a></td>
  173.     <td width="470">
  174.       <table width="475" border="0">
  175.          <tr>
  176.            <td width=100% height="20" bgcolor="#E8E8E8"  align="left" valign="middle"><span class="style2"><font size="2" face="Arial, Helvetica, sans-serif"><% response.write("<a href='video.asp?tipo=" & objRS("tipo") & "&video=" & objRS("link") & "'>" & objRS("video")) %></font></span></a></td>
  177.          </tr>
  178.          <tr>
  179.            <td width=100% height="95" align="left" valign="middle"><font color="#990033" size="2" face="Arial, Helvetica, sans-serif">
  180.            <% response.write(objRS("descripcion")) %></font></td>
  181.          </tr>
  182.       </table>
  183.     </td>
  184.   </tr>
  185.   <tr height="4">
  186.     <td height="11">    </td>
  187.   </tr>
  188. </table>
  189.  
  190.  
  191.   <%
  192.     objRS.movenext
  193.   wend 'cierro ciclo de impresion de resultados
  194.   else 'sino encontro resultados 
  195. %>
  196.   <br>
  197.   <br>
  198.   <table border="0" width="100%"><tr height="15" align="right"><td align="right" valign="middle"><font size="2" face="Arial, Helvetica, sans-serif">
  199.   <%   
  200.      if tipo="" then
  201.        response.write("Se encontraron " & cr & " resultados para <b>'" & vid & "'")
  202.      else
  203.        if tipo="FLV" then
  204.          response.write("Se encontraron " & cr & " resultados de video para <b>'" & vid & "'")
  205.        else
  206.          if tipo="MP3" then
  207.            response.write("Se encontraron " & cr & " resultados de audio para <b>'" & vid & "'")
  208.          end if
  209.        end if
  210.      end if 
  211.   %>
  212.   </b></font></td></tr></table>
  213. <hr color="#990000" width="100%" align="right" size="2"/>
  214. <p>
  215.   <%
  216.   end if
  217.   conn.Close
  218.   set objRS = nothing
  219.   set conn = nothing
  220. end if
  221. %>
  222. </p>
  223. <table border="0" width="100%"><tr height="15" align="right"><td align="rigth" valign="middle">
  224. <img src="pie.jpg" height="191"  />
  225. </td>
  226. </tr></table>
  227.  
  228. </td></tr></table>
  229. </td></tr></table>
  230. </body>
  231. </html>

No te asustes! lo explicaré paso a paso:

Como podras ver tengo un codigo JavaScript el cual utilizo para la validacion del cuadro de busqueda; para evitar que el usuario intente buscar "nada".. es decir que si introduce puros espacios en blanco, nuestro codigo Javascript le indicara al usuario que debe introducir una busqueda correcta

JavaScript:
  1. function vacio(v) {
  2.   for (i=0; i<v.length; i++)
  3.     {
  4.      if (v.charAt(i)!=" ")
  5.        { return true }
  6.     }
  7.   alert("Introduce una busqueda correcta");
  8.   document.busqueda.video.value="";
  9.   document.busqueda.video.focus();
  10.   return false
  11. }

Contiuando con nuestro codigo de index.asp veremos que estamos incluyendo un archivo [conexion.asp] el cual contiene lo siguiente:

ASP:
  1. set conn = Server.Createobject("adodb.connection")
  2.   conn.open ("DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("bd\bd1.mdb"))

Esto porque necesitaremos una base de datos donde unicamente guardaremos la referencia de donde tenemos los videos y canciones almacenados; es decir: Nostros guardaremos todos los archivos [video.flv y cancion.mp3] en dos distintas carpetas llamadas "videos" y "mp3" y en la Base de Datos llamada "bd1.mdb" que estara dentro de la carpeta "BD" tendremos unicamente una tabla llamada "videos" con lo siguiente

Como podras observar tenemos 5 campos:
id: es nuestro campo unico que nos sirve para tener control de los registros (es muy util cuando deseamos obetener solo el primer registro o el ultimo)
video: contiene el nombre del video o la cancion
link: contiene la direccion donde esta almacenada esa cancion.
descripcion: es una descripcion de la cancion o video
tipo: este campo nos indica si ese archivo es video [FLV] o cancion [MP3]

Otra cosa importante a resaltar es de que en la tabla (especificamente en el campo de "video") estoy utilizando un conteo creciente (por ejemplo: v6.flv, v7.flv...) esto lo hago debido a que de esa manera es mas facil su utilizacion.

Sigamos con index.asp
Pues para entender el HTML ya debes saber lo basico del html.. de no ser asi, aquí te dejo un Link hacia un tutorial de HTML muy bueno... ya que lo leas, entonces prosigues con el index.asp ;)

Como podras ver en aproximadamente en la linea 64 tenemos un link hacia un archivo "subir.asp" el cual será nuestra página donde el usuario podrá subir sus propios videos... este archivo lo explicare mas adelante..

Despues tenemos un Fielset que es donde he colocado el cuadro de busqueda de los videos o canciones...
Dentro de este fieldset tenemos un Form el cual al ser enviado nos regresara denuevo al index.asp... ya veras porque..

Este codigo javascript es unicamente para que al iniciar nuestra página, nuestro cuadro de texto de busqueda tenga el foco

JavaScript:
  1. document.busqueda.video.focus();

Enseguida tenemos un codigo ASP

ASP:
  1. if (request.form("buscar")="Buscar") then 
  2.    vid=trim(request.form("video"))
  3.    tipo=request.form("tipo")
  4.    a=0
  5.    ban=0
  6.    Dim palabras(99999)
  7.    i=-1
  8.    
  9.    while (a<len(vid)) 'buscamos las palabras en la BD
  10.       i=i+1
  11.       ban1=0
  12.       video=""
  13.       while ((ban1=0) and (a<len(vid)))'sakamos palabra por palabra
  14.         a=a+1
  15.         if (mid(vid,a,1)<>" ") then 'si es una letra (sin espacios) entonces
  16.           video=video & mid(vid,a,1)
  17.           ban1=0
  18.         else
  19.           if video="" then
  20.             ban1=0
  21.           else
  22.             ban1=1
  23.           end if
  24.         end if
  25.       wend 
  26.       video=replace(video,"'","\t8t\")
  27.       video=replace(video,"%","\p8p\")
  28.       palabras(i)=video 
  29.    wend
  30.    
  31.    'hacemos consulta a la BD
  32.    if tipo="" then
  33.      strSQL = "SELECT * FROM videos WHERE video LIKE '%" & palabras(0) & "%'"
  34.    else
  35.      if tipo="FLV" then
  36.        strSQL = "SELECT * FROM videos WHERE tipo='FLV' AND video LIKE '%" & palabras(0) & "%'"
  37.      else
  38.        if tipo="MP3" then
  39.          strSQL = "SELECT * FROM videos WHERE tipo='MP3' AND video LIKE '%" & palabras(0) & "%'"
  40.        end if
  41.      end if
  42.    end if   
  43.    
  44.    for j=1 to i
  45.      strSQL = strSQL & " AND video LIKE '%" & palabras(j) & "%'"
  46.    next
  47.    strSQL = strSQL & " ORDER BY video"     
  48.    Set objRS = conn.Execute(strSQL)
  49.    Set contador = conn.Execute(strSQL)  'cuento el total de resultados
  50.    
  51.    'Ciclo para contar recultados
  52.    if (not contador.Eof) then
  53.      while not contador.Eof
  54.        cr=cr+1
  55.        contador.movenext
  56.      wend
  57.    else
  58.      cr=0
  59.    end if
  60.    
  61.    if (not objRS.Eof) then 'si hay algun resultado
  62.       'imprimimos los resultados en una lista [ver index.php linea 155]

Como podemos ver, este pedazo de codigo lo unico que hace es recibir la cadena a buscar, la divide en palabras y lo guarda en un array llamado "palabras" y despues crea una consulta que obtenga los registros que contengan esas palabras, despues ejecuta la sentencia SQL y obtiene los resultados, tambien hay un ciclo que solo se utiliza para contar el total de registros obtenenido

Despues tenemos codigo insertado en el html, en la lista de resultados... lo que hacemos es que por cada video o cancion que cumpla con la sentencia SQL imprimiremos su titulo, descripcion y una imagen indicando que es video o cancion.. cada una de estas cosas con un link hacia video.asp enviando por el metodo GET, el tipo de archivo que es [FLV o MP3] y el nombre del video.. lo vemos a continuacion

HTML:
  1. <table width="581" border="0">
  2.   <tr>
  3.     <td width="101" height="103"><% response.write("<a href='video.asp?tipo=" & objRS("tipo") & "&video=" & objRS("link") & "'><img border='0' src='video" & objRS("tipo") & ".jpg'/>")%></a></td>
  4.     <td width="470">
  5.       <table width="475" border="0">
  6.          <tr>
  7.            <td width=100% height="20" bgcolor="#E8E8E8"  align="left" valign="middle"><span class="style2"><font size="2" face="Arial, Helvetica, sans-serif"><% response.write("<a href='video.asp?tipo=" & objRS("tipo") & "&video=" & objRS("link") & "'>" & objRS("video")) %></font></span></a></td>
  8.          </tr>
  9.          <tr>
  10.            <td width=100% height="95" align="left" valign="middle"><font color="#990033" size="2" face="Arial, Helvetica, sans-serif">
  11.            <% response.write(objRS("descripcion")) %></font></td>
  12.          </tr>
  13.       </table>
  14.     </td>
  15.   </tr>
  16.   <tr height="4">
  17.     <td height="11">    </td>
  18.   </tr>
  19. </table>

Este codigo esta dentro del ciclo que recorre registro resultante por registro resultante... es decir que si se encontraron 10 videos que coincidan con las palabras "futbol" y "barcelona" entonces este codigo se imprimira 10 veces...

Despues de esto tenemos el fin del ciclo y el else de la pregunta inicial (if (not objRS.Eof))

ASP:
  1. objRS.movenext
  2.   wend 'cierro ciclo de impresion de resultados
  3.   else 'sino encontro resultados

Si no encontro resultados entonces imprimimos mensaje de "0 resultados que coincidan con su busqueda"

HTML:
  1. <table border="0" width="100%"><tr height="15" align="right"><td align="right" valign="middle"><font size="2" face="Arial, Helvetica, sans-serif">
  2.   <%   
  3.      if tipo="" then
  4.        response.write("Se encontraron " & cr & " resultados para <b>'"