Java Zone YoutubeViewer

Java Zone YoutubeViewer

Veremos como con la ayuda de algunas librerias externas tales como la API de youtube y DJNaiveSwing podremos hacer nuestro propio buscador y visualizador de videos de youtube.

Podremos ver los videos en nuestra propia aplicacion.

Codigo

Clase Principal

package clases;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Iterator;

import javax.swing.*;

import chrriis.dj.nativeswing.swtimpl.NativeInterface;

import com.google.gdata.client.youtube.YouTubeQuery;
import com.google.gdata.client.youtube.YouTubeService;
import com.google.gdata.data.youtube.VideoEntry;
import com.google.gdata.data.youtube.VideoFeed;
import com.google.gdata.util.ServiceException;

public class Principal extends JFrame
{

        JTextField txt;
        JButton btnBuscar;
        private static final String key = "XXXXX";
    YouTubeService service;
    ArrayList<ImageIcon> miniaturas=new ArrayList<ImageIcon>();
    JPanel vistaMiniatura,PanelVideo;
    VentanaVideo vv;
       
    public Principal()
    {
        colocarSkin();
       
        service = new YouTubeService("JavaZoneYoutubeView", key);
       
        JPanel parriba=new JPanel();
        txt=new JTextField(30);
        btnBuscar=new JButton("Buscar");
        btnBuscar.addActionListener(new ActionListener(){

                        @Override
                        public void actionPerformed(ActionEvent e) {
                                try
                {
                                        vistaMiniatura.removeAll();
                                        YouTubeQuery query = new YouTubeQuery(new URL("http://gdata.youtube.com/feeds/api/videos"));
                            query.setFullTextQuery(txt.getText().compareTo("") == 0 ? "Moar ghosts n whatever" : txt.getText());
                            query.setMaxResults(5);
                           
                            VideoFeed videoFeed = (VideoFeed)service.query(query, VideoFeed.class);
                            Iterator iterator = videoFeed.getEntries().iterator();
                            int max=0;
                            boolean sw=true;
                            while(iterator.hasNext() && max<5)
                            {
                                final VideoEntry entry = (VideoEntry)iterator.next();
                                String descripcion = entry.getMediaGroup().getDescription().getPlainTextContent();
                                String URL = entry.getMediaGroup().getPlayer().getUrl();
                                long duracion = entry.getMediaGroup().getDuration().longValue() / 60L;
                                duracion = duracion >= 1L ? duracion : 1L;
                                ImageIcon img=new ImageIcon(new URL("http://img.youtube.com/vi/"+entry.getId().substring(27, 38)+"/2.jpg"));
                                miniaturas.add(img);
                                BotonMiniatura btn=new BotonMiniatura(img,entry.getId().substring(27, 38));
                                btn.addActionListener(new ActionListener(){

                                                        @Override
                                                        public void actionPerformed(ActionEvent e) {
                                                                vv.recargar(entry.getId().substring(27, 38));
                                                vv.updateUI();
                                                PanelVideo.updateUI();
                                                repaint();
                                                        }
                                       
                                });
                                vistaMiniatura.add(btn);
                                vistaMiniatura.updateUI();
                                if(sw){
                                        vv.recargar(entry.getId().substring(27, 38));
                                        vv.updateUI();
                                        PanelVideo.updateUI();
                                        repaint();
                                        sw=false;
                                }
                                repaint();
                            }
               
                    }
                catch(IOException ex)
                {
                    System.out.print("Error IO");
                }
                catch(ServiceException ex)
                {
                        System.out.print("Error Servicio Youtube");
                }
            }
               
        });
        parriba.add(new JLabel("Buscar"));
        parriba.add(txt);
        parriba.add(btnBuscar);
       
        vistaMiniatura=new JPanel();
       
        PanelVideo=new JPanel();
        PanelVideo.setLayout(new BorderLayout());
        vv=new VentanaVideo();
        PanelVideo.add(vv);
       
        add(parriba,BorderLayout.NORTH);
        add(PanelVideo);
        add(vistaMiniatura,BorderLayout.SOUTH);
       
       
        setVisible(true);
        setBounds(0, 0, 700, 500);
        setLocationRelativeTo(null);
        setTitle("JavaZone YoutubeViewer");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        setTitle("Java Zone YoutubeView");
    }
   
    public void colocarSkin(){
        try {
                 UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
                } catch (ClassNotFoundException e) {
                 e.printStackTrace();
                } catch (InstantiationException e) {
                 e.printStackTrace();
                } catch (IllegalAccessException e) {
                 e.printStackTrace();
                } catch (UnsupportedLookAndFeelException e) {
                 e.printStackTrace();
                }
    }
   
    public static void main(String args[])
    throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException
{
    UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
    NativeInterface.open();
    EventQueue.invokeLater(new Runnable() {

        public void run()
        {
            (new Principal()).setVisible(true);
        }

    }
);
}  
}

Clase VentanaVideo

package clases;

import chrriis.dj.nativeswing.NSOption;
import chrriis.dj.nativeswing.swtimpl.NativeInterface;
import chrriis.dj.nativeswing.swtimpl.components.JFlashPlayer;
import com.google.gdata.client.youtube.YouTubeService;
import com.google.gdata.data.TextConstruct;
import com.google.gdata.data.youtube.VideoEntry;
import com.google.gdata.util.ServiceException;
import java.awt.BorderLayout;
import java.awt.Container;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.JPanel;

public class VentanaVideo extends JPanel
{

         static final String developer_key = "XXXXX";
         YouTubeService service;
         public static String url = "";
         JFlashPlayer flashPlayer;
       
         public VentanaVideo(){
                 
             super(new BorderLayout());
             service = new YouTubeService("JavaZoneYoutubeView", "XXXXX");
             flashPlayer = new JFlashPlayer(new NSOption[0]);
             flashPlayer.load((new StringBuilder("http://www.youtube.com/v/")).append(url).append("?rel=0").toString()+"&autoplay=1");
             add(flashPlayer, "Center");
         }
         
         public void recargar(String u){
                 flashPlayer.load((new StringBuilder("http://www.youtube.com/v/")).append(u).append("?rel=0").toString()+"&autoplay=1");
         }
}

Clase BotonMiniatura

package clases;

import javax.swing.ImageIcon;
import javax.swing.JButton;

public class BotonMiniatura extends JButton {
       
        String idvideo="";
       
        public BotonMiniatura(ImageIcon img,String x){
                setIcon(img);
                idvideo=x;
        }
}

Pueden descargar el archivo directamente desde aqui. No olviden visitar Java Zone.

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

+1 for Java Zone posteando

+1 for Java Zone posteando programas interesantes para Java en el escritorio

Imagen de Sr. Negativo

Excelente aporte

Cada uno de los programs de Java Zone son muy buenos

?:)

Imagen de rodrigo salado anaya

pffff Java Zone +1

Super tus aportaciones Roger : )
una pregunta poner tu developer_key sera seguro??? jejeje como sea gracias por el código : )

Imagen de benek

Re: pffff Java Zone +1

una pregunta poner tu developer_key sera seguro??? jejeje como sea gracias por el código : )

En lo que responde mejor la quitamos, no vaya a ser que no.