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
Clase FrameConexion
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
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
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
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
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.
- roger1345's blog
- Inicie sesión o regístrese para enviar comentarios
Comentarios
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>
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
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. :)