Cliente Blogger

Cliente Blogger

Esta vez voy a seguir el consejo que me dieron algunas personas, sobre colocar el codigo del programa directamente aqui.

El programa trata sobre como podemos administrar nuestros Blogs de Blogger desde java. Podemos publicar entradas, eliminarlas, publicar comentarios, etc.

Imagenes

Código

Clase Principal

package Clases;

import javax.swing.JFrame;

public class Principal {

 public static void main(String[] args) {
  FrameConexion fc=new FrameConexion();
  fc.setVisible(true);
  fc.setBounds(0, 0, 300, 120);
  fc.setLocationRelativeTo(null);
  fc.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 }
}

Clase FrameConexion

package Clases;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.*;

import com.google.gdata.client.blogger.BloggerService;
import com.google.gdata.util.AuthenticationException;

public class FrameConexion extends JFrame {
 
 JTextField txtusuario;
 JPasswordField txtclave;
 
 public FrameConexion(){
 
  ImageIcon imgframe=new ImageIcon(this.getClass().getResource("../Imagenes/blogger.png"));
  setIconImage(imgframe.getImage());
  JPanel pdatos=new JPanel();
  pdatos.setLayout(new GridLayout(2,2,1,1));
  pdatos.add(new JLabel("Usuario:"));
  txtusuario=new JTextField(20);
  pdatos.add(txtusuario);
  pdatos.add(new JLabel("Contraseña:"));
  txtclave=new JPasswordField(20);
  pdatos.add(txtclave);
 
  JPanel pbotones=new JPanel();
  JButton btnconectar=new JButton("Conectar");
  btnconectar.addActionListener(new ActionListener(){

   @Override
   public void actionPerformed(ActionEvent arg0) {
    BloggerService servicio=new BloggerService("Cliente Blogger - Java Zone");
    try {
     servicio.setUserCredentials(txtusuario.getText(), new String(txtclave.getPassword()));
     FrameBlogs fb=new FrameBlogs(servicio,txtusuario.getText());
     fb.setVisible(true);
     fb.setBounds(0, 0, 550, 400);
     fb.setLocationRelativeTo(null);
     fb.setDefaultCloseOperation(EXIT_ON_CLOSE);
     FrameConexion.this.setVisible(false);
    } catch (AuthenticationException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
   }
  });
  pbotones.add(btnconectar);
  add(pdatos);
  add(pbotones,BorderLayout.SOUTH);
 }
}

Clase FrameBlogs

package Clases;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;

import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

import com.google.gdata.client.blogger.BloggerService;
import com.google.gdata.data.Entry;
import com.google.gdata.data.Feed;
import com.google.gdata.data.ParseSource;
import com.google.gdata.util.ServiceException;

public class FrameBlogs extends JFrame {
 
 BloggerService servicio;
 String nombreBlogs[];
 String idblogs[];
 JSplitPane panelSeparador;
 JList listaBlogs;
 JPanel panelPorBlog[];
 JButton btncrear,btneliminar,btncomentar,btnactualizar;
 String usuario;
 Entry entradas[];
 int opcion;
 
 public FrameBlogs(BloggerService s, String usu){
 
  servicio=s;
  usuario=usu;
  ImageIcon imgframe=new ImageIcon(this.getClass().getResource("../Imagenes/blogger.png"));
  setIconImage(imgframe.getImage());
  panelSeparador=new JSplitPane();
 
  obtenerBlogs();
 
  JPanel pblogs=new JPanel();
  listaBlogs=new JList(nombreBlogs);
  listaBlogs.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
  listaBlogs.addListSelectionListener(new ListSelectionListener(){

   @Override
   public void valueChanged(ListSelectionEvent e) {
    opcion=listaBlogs.getSelectedIndex();
    if(listaBlogs.getSelectedIndex()==0){
     try {
      crearPanelPorBlog(0);
     } catch (IOException e1) {
      // TODO Auto-generated catch block
      e1.printStackTrace();
     } catch (ServiceException e1) {
      // TODO Auto-generated catch block
      e1.printStackTrace();
     }
     panelSeparador.setRightComponent(new JScrollPane(panelPorBlog[0]));
    }else{

     try {
      crearPanelPorBlog(1);
     } catch (IOException e1) {
      // TODO Auto-generated catch block
      e1.printStackTrace();
     } catch (ServiceException e1) {
      // TODO Auto-generated catch block
      e1.printStackTrace();
     }
     panelSeparador.setRightComponent(new JScrollPane(panelPorBlog[1]));
    }
   }
   
  });
  pblogs.add(listaBlogs);
 
  panelSeparador.setLeftComponent(pblogs);
  panelSeparador.setRightComponent(new JPanel());
 
  add(panelSeparador);
 
  JPanel pacciones=new JPanel();
  ImageIcon imgcrear=new ImageIcon(this.getClass().getResource("../Imagenes/postear.png"));
  btncrear=new JButton("Publicar",imgcrear);
  btncrear.addActionListener(new ActionListener(){

   @Override
   public void actionPerformed(ActionEvent e) {
    FramePublicar fp=new FramePublicar(servicio,usuario,idblogs[listaBlogs.getSelectedIndex()]);
   }
  });
  ImageIcon imgeliminar=new ImageIcon(this.getClass().getResource("../Imagenes/borrar.png"));
  btneliminar=new JButton("Eliminar",imgeliminar);
  btneliminar.addActionListener(new ActionListener(){

   @Override
   public void actionPerformed(ActionEvent e) {
    FrameEliminar fe=new FrameEliminar(entradas);
   }
  });
  ImageIcon imgcomentar=new ImageIcon(this.getClass().getResource("../Imagenes/comentar.png"));
  btncomentar=new JButton("Comentar",imgcomentar);
  btncomentar.addActionListener(new ActionListener(){

   @Override
   public void actionPerformed(ActionEvent e) {
    FrameComentario fc=new FrameComentario(servicio,entradas,idblogs[listaBlogs.getSelectedIndex()]);
   }
  });
  ImageIcon imgactualizar=new ImageIcon(this.getClass().getResource("../Imagenes/actualizar.png"));
  btnactualizar=new JButton("Actualizar",imgactualizar);
  btnactualizar.addActionListener(new ActionListener(){

   @Override
   public void actionPerformed(ActionEvent e) {
    try {
     crearPanelPorBlog(opcion);
    } catch (IOException e1) {
     // TODO Auto-generated catch block
     e1.printStackTrace();
    } catch (ServiceException e1) {
     // TODO Auto-generated catch block
     e1.printStackTrace();
    }
    panelSeparador.setRightComponent(new JScrollPane(panelPorBlog[1]));
   }
  });
 
  pacciones.add(btncrear);
  pacciones.add(btneliminar);
  pacciones.add(btncomentar);
  pacciones.add(btnactualizar);
 
  add(pacciones,BorderLayout.SOUTH);
 }
 
 public void obtenerBlogs(){
  URL feedUrl;
  try {
   feedUrl = new URL("http://www.blogger.com/feeds/default/blogs");
   Feed feed = servicio.getFeed(feedUrl, Feed.class);
   nombreBlogs=new String[feed.getEntries().size()];
   idblogs=new String[feed.getEntries().size()];
   for (int i = 0; i < feed.getEntries().size(); i++) {
         Entry entry = feed.getEntries().get(i);
         nombreBlogs[i]=entry.getTitle().getPlainText();
   }
   
   if (feed.getEntries().size() > 0) {
    for(int j=0;j<feed.getEntries().size();j++){
     Entry entry = feed.getEntries().get(j);
     idblogs[j]=entry.getId().split("blog-")[1];
    }
   }else{
    JOptionPane.showMessageDialog(null,"Usuario no tiene registrado ningun Blog.");
   }
  } catch (MalformedURLException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  } catch (ServiceException e) {
   e.printStackTrace();
  }
 }
 
 public void crearPanelPorBlog(int op) throws IOException, ServiceException{
  panelPorBlog=new JPanel[nombreBlogs.length];
  for(int i=0;i<nombreBlogs.length;i++){
   JPanel p=new JPanel();
   panelPorBlog[i]=p;
   p.setLayout(new BoxLayout(p,BoxLayout.Y_AXIS));

   String dirfeed="http://www.blogger.com/feeds/"+idblogs[op];
   String urlfeed=dirfeed+"/posts/default";
   URL feedUrl = new URL(urlfeed);
      Feed resultFeed = servicio.getFeed(feedUrl, Feed.class);
      entradas=new Entry[resultFeed.getEntries().size()];
      for (int j = 0; j < resultFeed.getEntries().size(); j++) {
        Entry entrada = resultFeed.getEntries().get(j);
        entradas[j]=entrada;
        JPanel ppost=new JPanel();
        JLabel lpost=new JLabel(entrada.getTitle().getPlainText());
        ppost.add(lpost);
        p.add(ppost);
      }
  }
 }
}

Clase FramePublicar

package Clases;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;

import javax.swing.*;

import com.google.gdata.client.blogger.BloggerService;
import com.google.gdata.data.Entry;
import com.google.gdata.data.Person;
import com.google.gdata.data.PlainTextConstruct;
import com.google.gdata.util.ServiceException;

public class FramePublicar extends JFrame {
 
 JTextArea txt;
 JScrollPane scroll;
 JButton btnpublicar;
 BloggerService servicio;
 String usuario;
 JTextField txttitulo;
 String idblog;
 
 public FramePublicar(BloggerService s, String usu,String id){
 
  servicio=s;
  usuario=usu;
  idblog=id;
 
  ImageIcon imgframe=new ImageIcon(this.getClass().getResource("../Imagenes/blogger.png"));
  setIconImage(imgframe.getImage());
 
  JPanel ptitulo=new JPanel();
  txttitulo=new JTextField(30);
  ptitulo.add(new JLabel("Titulo:"));
  ptitulo.add(txttitulo);
 
  add(ptitulo,BorderLayout.NORTH);
 
  txt=new JTextArea();
  scroll=new JScrollPane(txt);
  add(scroll);
 
  JPanel pboton=new JPanel();
  btnpublicar=new JButton("Publicar");
  btnpublicar.addActionListener(new ActionListener(){

   @Override
   public void actionPerformed(ActionEvent e) {
    Entry entrada = new Entry();
       entrada.setTitle(new PlainTextConstruct(txttitulo.getText()));
       entrada.setContent(new PlainTextConstruct(txt.getText()));
       Person author = new Person(usuario, null, usuario);
       entrada.getAuthors().add(author);
       entrada.setDraft(false);

       try {
     URL UrlEntrada = new URL("http://www.blogger.com/feeds/"+idblog + "/posts/default");
     servicio.insert(UrlEntrada, entrada);
     JOptionPane.showMessageDialog(null, "Entrada Publicada Exitosamente.");
     txttitulo.setText("");
     txt.setText("");
     FramePublicar.this.dispose();
    } catch (MalformedURLException e1) {
     // TODO Auto-generated catch block
     e1.printStackTrace();
    } catch (IOException ex) {
     // TODO Auto-generated catch block
     ex.printStackTrace();
    } catch (ServiceException ed) {
     // TODO Auto-generated catch block
     ed.printStackTrace();
    }
   }
   
  });
  pboton.add(btnpublicar);
  add(pboton,BorderLayout.SOUTH);
  setVisible(true);
  setBounds(0, 0, 400, 300);
  setLocationRelativeTo(null);
 }
}

Clase FrameEliminar

package Clases;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;

import javax.swing.*;

import com.google.gdata.data.Entry;
import com.google.gdata.util.ServiceException;

public class FrameEliminar extends JFrame {
 
 JComboBox comboEntradas;
 JButton btneliminar;
 Entry[] entradas;
 String[] nombres;
 
 public FrameEliminar(Entry[] e){
 
  entradas=e;
 
  ImageIcon imgframe=new ImageIcon(this.getClass().getResource("../Imagenes/blogger.png"));
  setIconImage(imgframe.getImage());
 
  nombres=new String[entradas.length];
  for(int i=0;i<entradas.length;i++){
   nombres[i]=entradas[i].getTitle().getPlainText();
  }
  comboEntradas=new JComboBox(nombres);
 
  JPanel pdatos=new JPanel();
  pdatos.add(new JLabel("Entradas: "));
  pdatos.add(comboEntradas);
 
  btneliminar=new JButton("Eliminar");
  btneliminar.addActionListener(new ActionListener(){

   @Override
   public void actionPerformed(ActionEvent e) {
    try {
     entradas[comboEntradas.getSelectedIndex()].delete();
     JOptionPane.showMessageDialog(null, "Entrada Eliminada Exitosamente");
    } catch (IOException e1) {
     // TODO Auto-generated catch block
     e1.printStackTrace();
    } catch (ServiceException e1) {
     // TODO Auto-generated catch block
     e1.printStackTrace();
    }
   }
   
  });
 
  pdatos.add(btneliminar);
  add(pdatos);
  setVisible(true);
  setBounds(0, 0, 400, 200);
  setLocationRelativeTo(null);
 }
}

Clase FrameComentar

package Clases;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;

import javax.swing.*;

import com.google.gdata.client.blogger.BloggerService;
import com.google.gdata.data.Entry;
import com.google.gdata.data.PlainTextConstruct;
import com.google.gdata.util.ServiceException;

public class FrameComentario extends JFrame {
 
 Entry[] entradas;
 String[] nombres;
 JComboBox comboEntradas;
 JTextArea txtcomentario;
 JButton btncomentar;
 BloggerService servicio;
 String idblog;
 
 public FrameComentario(BloggerService s,Entry[] e,String id){
 
  servicio=s;
  entradas=e;
  idblog=id;
 
  ImageIcon imgframe=new ImageIcon(this.getClass().getResource("../Imagenes/blogger.png"));
  setIconImage(imgframe.getImage());
 
  nombres=new String[entradas.length];
  for(int i=0;i<entradas.length;i++){
   nombres[i]=entradas[i].getTitle().getPlainText();
  }
  comboEntradas=new JComboBox(nombres);
 
  JPanel pentrada=new JPanel();
  pentrada.add(new JLabel("Entrada: "));
  pentrada.add(comboEntradas);
  add(pentrada,BorderLayout.NORTH);
  txtcomentario=new JTextArea();
  add(new JScrollPane(txtcomentario));
 
  JPanel pcomentar=new JPanel();
  ImageIcon imgcomentar=new ImageIcon(this.getClass().getResource("../Imagenes/comentar.png"));
  btncomentar=new JButton("Comentar",imgcomentar);
  btncomentar.addActionListener(new ActionListener(){

   @Override
   public void actionPerformed(ActionEvent e) {
    String selfLinkHref = entradas[comboEntradas.getSelectedIndex()].getSelfLink().getHref();
       String[] tokens = selfLinkHref.split("/");
       String postId = tokens[tokens.length - 1];
       
       String commentsFeedUri = "http://www.blogger.com/feeds/"+idblog + "/" + postId + "/comments/default";
       URL feedUrl;
    try {
     feedUrl = new URL(commentsFeedUri);
     Entry myEntry = new Entry();
        myEntry.setContent(new PlainTextConstruct(txtcomentario.getText()));
     servicio.insert(feedUrl, myEntry);
    } catch (MalformedURLException e1) {
     // TODO Auto-generated catch block
     e1.printStackTrace();
    } catch (IOException es) {
     // TODO Auto-generated catch block
     es.printStackTrace();
    } catch (ServiceException ea) {
     // TODO Auto-generated catch block
     ea.printStackTrace();
    }
   }
   
  });
  pcomentar.add(btncomentar);
  add(pcomentar,BorderLayout.SOUTH);
 
  setVisible(true);
  setBounds(0, 0, 400, 300);
  setLocationRelativeTo(null);
 }
}

Para ver toda la explicacion del codigo, visiten 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.
Imagen de Sr. Negativo

Bien hecho

Bien hecho por publicar el post aqui.

Super, gracias por compartir.

Super, gracias por compartir.

Agregue formato al código usando <code> y </code>

Imagen de Shadonwk

orale que interezante, habra

orale que interezante, habra algo similar para wordpress?, digo me refiero a las apis, porque aqui usas las apis de google...

Yeap, si hay aunque no sé si

Yeap, si hay aunque no sé si tenga un API en Java http://codex.wordpress.org/Plugin_API

Imagen de Shadonwk

mm no es exactamente para

mm no es exactamente para java pero creo que se puede hacer algo similar a lo aqui posteado ya que segun estoy viendo wordpress usa el protrocolo xmlrpc del cual si hay api xmlrpc-client-1.1.jar ... creo que le dare una checadita y haber que logro. :)