Rutarelativa

Publicidad

Últimas anotaciones reducidas

  • Amnistía Pirata: Juega a Machinarium por solo 5 dólares Amnistía Pirata: Juega a Machinarium por solo 5 dólares

    Machinarium es uno de esos juegos sobresalientes que tanto nos gusta, y éste un buen movimiento para conseguir beneficios, pues han lanzado lo que ellos han llamado Amnistía Pirata. La Amnistía Pirata consiste en que los jugadores puedan jugar a Machinarium por solo 5 dólares (unos 3,90 €), ya que estiman que entre el 5% y el 15% de los que adquirieron el juego pagaron por él, y con este movimiento pretenden que aquellos jugadores que lo obtuvieron por diferentes vías (y los nuevos interesados) puedan comprarlo por un precio muy reducido.

    Incluye además la banda sonora del juego, y podéis jugar a una entretenida demo en la página oficial del juego para que, los que no lo conozcáis, podáis hacerlo y entrar en el mundo de Machinarium. La oferta es válida hasta el 12 de Agosto.

    [Amnistía Pirata: Juega a Machinarium por solo 5 dólares]

  • Video de una proyección 3D en Amsterdam Video de una proyección 3D en Amsterdam

    Este video se corresponde con una proyección 3D que hicieron en plena calle de Amsterdam, donde vemos que los elementos del escenario van sufriendo transformaciones dando como resultado un impresionante video con efecto 3D.

    Cuando te das cuenta que el edificio no está realmente ahí es cuando realmente impresiona.

    [Video de una proyección 3D en Amsterdam]

  • Curiosidades y Easter Eggs de Toy Story 3 [Video] Curiosidades y Easter Eggs de Toy Story 3 [Video]

    Tras ver Toy Story 3 y salir de la sala bastante encantado con la película me dispuse a buscar curiosidades y Easter Eggs de Toy Story 3 y he dado con este video de Youtube, que os dejo en el enlace final, que contiene algunos interesantes, y otros bastante exagerados.

    Entre dobladores curiosos, mensajes ocultos por los escenarios o cameos de otras de sus películas, el video nos va presentando lo que no pudimos ver mientras disfrutábamos de la última obra de Disney Pixar.

    [Video de Curiosidades y Easter Eggs de Toy Story 3]

Últimos comentarios

  • Avatar del usuario andres andres si pudieran especificar bien todos los pasos para la gente que no...
  • Avatar del usuario andres andres ese juego se pausa despues de las 40 horas que llevas jugadas...
  • Avatar del usuario Sergiocius Sergiocius De momento no has seguido los pasos para escribir un comentario...
  • Avatar del usuario raul suarez ladinez raul suarez ladinez !hola¡ quiero saber si segui los pasos correctamente y por lo...
  • Avatar del usuario Sergiocius Sergiocius Hola Boye, gracias por tu comentario. Vaya, ¡veo que eres de...
  • Avatar del usuario Boye Boye Hola! he llegado hoy de rebote al blog y me resulta bastante...
  • Avatar del usuario Jorge Jorge En Google Chrome no funciona lo de arrastrar a la barra de marcadores.
  • Avatar del usuario Alejandro Alejandro Juas... ya solo queda 1 mes y 10 días :S ¡Que verano mas largo!
  • Avatar del usuario Sura Sura Algunas fotos nos se pueden ver, yo no entiendo de esto pero al...
  • Avatar del usuario Sergiocius Sergiocius @Manuel Eso es difícil creo, ya que desde blogger cuando posteas...

Fans en Facebook de Ruta Relativa

Lo más comentado

Lo más visto

Post al azar

Escribir un post en Blogger usando cUrl y PHP

(17)
23 / Junio / 2010
Escribir un post en Blogger usando cUrl y PHP

Blogger es la red de blogging adquirida por Google en la que, en unos pocos pasos, podemos tener nuestro propio blog de calidad sin conocimientos previos de programación.

Hay ocasiones en las que nos es útil poder postear automáticamente en nuestro blog tras realizar acciones, por ejemplo si tenemos una tienda online y nos gustaría indicar que cierto producto interesante vuelve a tener stock por fin. Para ello he desarrollado una clase para poder escribir un post en Blogger usando cUrl y PHP.

He querido hacer el proceso lo más sencillo posible, es decir, que con pocas líneas de código podamos postear en Blogger sin mayor problema. Paso a continuación a mostrar el código fuente (al final del artículo puedes descargar la clase de postear en Blogger con cUrl y PHP) y explicar su funcionamiento:

Blogger.class: Clase para escribir un post en Blogger usando cUrl y PHP

<?php

class blogger
{
private $FBlogID;
private $FUser;
private $FPass;
private $FAuth;

/**
* Construimos la clase. Pasamos como primer argumento el ID de nuestro Blog en Blogger.
*
* @param string $sBlogID
*
*/
public function __construct($sBlogID)
{
$this->FBlogID = $sBlogID;
}

public function setBlogID($sBlogID)
{
$this->FBlogID = $sBlogID;
}

public function setUser($sUser)
{
$this->FUser = $sUser;
}

public function setPass($sPass)
{
$this->FPass = $sPass;
}

public function setAuth($sAuth)
{
$this->FAuth = $sAuth;
}

public function getBlogID()
{
return $this->FBlogID;
}

public function getUser()
{
return $this->FUser;
}

public function getPass()
{
return $this->FPass;
}

public function getAuth()
{
return $this->FAuth;
}

/**
* Hacemos login con nuestra cuenta de Google
*
* @param string $sUser
* @param string $sPass
*
*/
public function login($sUser = false, $sPass = false)
{
// Variables
$cUrl = curl_init();
$aAuth = NULL;

// Asignamos variables
$this->FUser = $sUser;
$this->FPass = $sPass;

// Preparamos conexion
curl_setopt( $cUrl, CURLOPT_URL, 'https://www.google.com/accounts/ClientLogin' );
curl_setopt( $cUrl, CURLOPT_HEADER, false );
curl_setopt( $cUrl, CURLOPT_FOLLOWLOCATION, true );
curl_setopt( $cUrl, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $cUrl, CURLOPT_SSL_VERIFYPEER, false );
curl_setopt( $cUrl, CURLOPT_POST, true );
curl_setopt( $cUrl, CURLOPT_POSTFIELDS, array( 'accountType' => 'GOOGLE', 'Email' => $this->FUser, 'Passwd' => $this->FPass, 'source' => 'blogger.class', 'service' => 'blogger' ) );

// Conectamos y obtenemos el resultado
$aAuth = curl_exec( $cUrl );

// Cerrar cURL
curl_close( $cUrl );

// Obtenemos el codigo de autenticacion
preg_match( '/Auth\=(?<auth>.+)$/i', $aAuth, $aAuth );
if( key_exists( 'auth', $aAuth ) )
$this->FAuth = $aAuth['auth'];
// Si no ha sido posible lanzamos excepcion
else
throw new Exception( 'Error en login. ¿Usuario o contraseña incorrecto?' );
}

/**
* Posteamos una entrada
*
* @param string $sTitle
* @param string $sBody
* @param string $sTags
* @param string $sDate (dd/mm/yy)
* @param string $sTime (hh:mm)
* @param boolean $bComments
*
*/
public function post($sTitle, $sBody, $sTags, $sDate = false, $sTime = false, $bComments = true)
{
// Variables
$cUrl = NULL;
$dDoc = NULL;
$sHtml = NULL;
$aInputs = NULL;
$nInputs = NULL;
$sSecurityToken = false;

// Obtenemos el securityToken
$cUrl = curl_init();
curl_setopt( $cUrl, CURLOPT_URL, 'http://www.blogger.com/post-create.g?blogID=' . $this->FBlogID );
curl_setopt( $cUrl, CURLOPT_HEADER, false );
curl_setopt( $cUrl, CURLOPT_HTTPHEADER, array( 'Authorization: GoogleLogin auth=' . $this->FAuth ) );
curl_setopt( $cUrl, CURLOPT_FOLLOWLOCATION, true );
curl_setopt( $cUrl, CURLOPT_RETURNTRANSFER, true );

// Conectamos y obtenemos el resultado
$sHtml = curl_exec( $cUrl );

// Cerrar cURL
curl_close( $cUrl );

// Obtenemos el securityToken
$dDoc = new DOMDocument();
$dDoc->loadHtml( $sHtml );

$aInputs = $dDoc->getElementsByTagName( 'input' );
$nInputs = $aInputs->length;

for( $nCont = 0; $nCont < $nInputs; ++$nCont )
{
if( $aInputs->item( $nCont )->getAttribute( 'name' ) == 'securityToken' )
{
$sSecurityToken = $aInputs->item( $nCont )->getAttribute( 'value' );
break;
}
}

// Lanzamos excepcion si no se ha podido obtener el securityToken
if( $sSecurityToken === false )
throw new Exception( 'No se ha podido obtener el securityToken. Reintenta el logueo.' );

// Posteamos
$cUrl = curl_init();
curl_setopt( $cUrl, CURLOPT_URL, 'http://www.blogger.com/post-create.do' );
curl_setopt( $cUrl, CURLOPT_HEADER, false );
curl_setopt( $cUrl, CURLOPT_HTTPHEADER, array( 'Authorization: GoogleLogin auth=' . $this->FAuth ) );
curl_setopt( $cUrl, CURLOPT_FOLLOWLOCATION, true );
curl_setopt( $cUrl, CURLOPT_RETURNTRANSFER, false );
curl_setopt( $cUrl, CURLOPT_POST, true );
curl_setopt( $cUrl, CURLOPT_POSTFIELDS, array(
'blogID' => $this->FBlogID,
'title' => $sTitle,
'postBody' => $sBody,
'postLabels' => $sTags,
'postDate' => ($sDate === false ? date( 'd/m/y' ) : $sDate),
'postTime' => ($sTime === false ? date( 'H:i' ) : $Time),
'commentsMode' => ($bComments === true ? 'ON' : 'OFF'),
'securityToken' => $sSecurityToken )
);

// Posteamos
curl_exec( $cUrl );

// Cerrar cURL
curl_close( $cUrl );
}
}
?>

Blogger.class: Ejemplo de como escribir un post en Blogger usando cUrl y PHP


<?php

require 'blogger.class.php';

// Nueva instancia de la clase pasando como argumento el ID del blog
$b = new blogger( 'ID' );

// Nos logueamos en nuestra cuenta de Google con nuestras credenciales
$b->login( 'usuario', 'contraseña' );

// Enviamos un post
$b->post( 'Posteando desde la clase blogger.class de Ruta Relativa', 'Hola, estoy escribiendo un interesante post desde la clase blogger.class de Ruta Relativa.', 'post, api, blogger, class, ruta relativa' );

// Liberamos
unset( $b );

?>

Como vemos en el código de ejemplo, primero debemos de incluir la clase Blogger.class. Luego deberemos de crear una instancia de la clase blogger pasándole como argumento el ID de tu blog de Blogger. Luego llamamos al método login con el que nos loguearemos en nuestra cuenta de Google pasando como argumentos nuestro usuario y contraseña. El siguiente paso sería enviar el post pasando como argumentos el título del post, el cuerpo del post, los tags (separados por comas), la fecha (una cadena con formato dd/mm/yy), la hora (con formato (hh:mm) y por útimo un booleano indicando si permitimos o no los comentarios en la entrada.

Esperamos que os sea de utilidad para vuestros proyectos y podáis sacarle rendimiento. Para cualquier duda o sugerencia no dudéis en dejar comentarios.

Descarga: Descargar Blogger.class: Clase para escribir un post en Blogger usando cUrl y PHP

votar

Artículos relacionados

Sobre sergiocius

390

Soy un desarrollador en entornos web y escritorio, entusiasta y amante de mi trabajo del que cada día espero aprender algo nuevo. Tengo una titulación de Técnico Superior en Desarrollo de Aplicaciones Informáticas y actualmente curso el primer año de Carrera Universitaria con el poco tiempo que me deja el trabajo. Fundé rutarelativa porque quiero que mi esfuerzo y tiempo invertidos en aprender y poner en práctica algo le resulte útil y fácil a otro usuario, del mismo modo que yo aprendo y ahorro tiempo con la ayuda de los demás.

Sigue a Ruta Relativa

Trackback en Escribir un post en Blogger usando cUrl y PHP

Hasta el momento el artículo Escribir un post en Blogger usando cUrl y PHP no tiene Trackbacks.

Comentarios en Escribir un post en Blogger usando cUrl y PHP

1
Avatar del usuario Nito

Pues estoy intentando, recibir el Post ID una vez publicado el post pero el curl_exec( $cUrl ) solo me debuelve el valor 1. Pero desde el navegador puedo ver la pagina siguiente.

Nito
10/07/2010 21:35:28
2
Avatar del usuario Nito

Cuando digo paguina sigiente me refiero donde aparece el link a la entrada, y el Post ID para editar.

Nito
10/07/2010 21:37:44
3
Avatar del usuario Sergiocius

Esta clase no está preparada para recibir el Post ID, lo que recibes de curl es el estado de la petición, es decir 1 que se ha hecho correcto.
En cualquier momento puedes modificar a tu gusto la clase para añadirle las funcionalidades que quieras, y además puedes compartirlo con nosotros si quieres.
¡Un saludo!

Sergiocius 11/07/2010 11:52:41
4
Avatar del usuario john

hola amigo estoy intentando modificar el .php para poder postear automaticamente a blogguer, pero me surge una inquietud ,que valores tengo que modificar $sBlogID y los de usser es que apenas empiezo y pss donde lo puedo subir para ver si funciona

john
28/07/2010 22:23:21
5
Avatar del usuario Sergiocius

@john

Es muy fácil, mira, para saber el valor de BlogID puedes hacerlo de la siguiente forma:

1. Te diriges a la administración de tu blog en blogger.
2. Clica en NUEVA ENTRADA.
3. La dirección a la que te dirija contiene el ID de tu blog, con este formato: http://www.blogger.com/post-create.g?blogID=xxxxxxxxxxxxxx
4. El valor de blogID de la URL del ejemplo será tu BlogID.

Por otro lado, los valores de usuario y contraseña serán los valores con los que te autenticas en Blogger.
En cuanto a donde puedes subirlo para ver si funciona, puedes hacerlo en cualquier servidor que corra PHP. Puedes montarte un servidor local en tu propio equipo, te recomiendo el paquete XAMPP (http://www.apachefriends.org/es/xampp.html), que es fácil de instalar y usar.

Espero haber disipado todas las dudas. ¡Saludos!

Sergiocius 29/07/2010 02:16:40
6
Avatar del usuario Beko

Hola..
Es interesante esto, pero tengo un problema.
no indicas como hacerlo funcionar, si tengo que agregar un codigo en el theme de mi blog en verdad eso no entedi bien.
Gracias =)

Beko 01/08/2010 18:39:52
7
Avatar del usuario Sergiocius

Hola Beko, una pregunta antes de poder responderte: ¿sabes algo de desarrollo en PHP?. En el post, para alguien que sepa un mínimo sobre desarrollo web, puede hacer funcionar esto perfectamente.
Respóndeme y vemos como puedo ayudarte a hacerlo funcionar. ¡Saludos!

Sergiocius 01/08/2010 21:41:55
8
Avatar del usuario Beko

Claro se algo de PHP, y tengo un blog y tambien se algo de plataformas prefabricadas,
Solo q esta vez no entendi bien..
Esque en verdad no tengo muy en claro que hacer con esos dos archivos que descargue.
Una vez modificado La dirección a la que te dirija contiene el ID de tu blog, con este formato: http://www.blogger.com/post-create.g?blogID=xxxxxxxxxxxxxx
q más tengo q hacer.

Beko 02/08/2010 19:15:26
9
Avatar del usuario Sergiocius

He revisado el post al completo y creo que está bien explicado y detallado, pero mira, voy a hacer un rápido resumen:

1. Descargamos y descomprimimos los archivos blogger.class.php y ejemplo.php.
2. Los pegamos en un servidor que ejecute php.
3. Abrimos el archivo ejemplo.php y cambiamos el parámetro ID por el ID de nuestro blog en Blogger.

¿Cómo obtengo mi BlogID?:
3.1. Te diriges a la administración de tu blog en blogger.
3.2. Clica en NUEVA ENTRADA.
3.3. La dirección a la que te dirija contiene el ID de tu blog, con este formato: http://www.blogger.com/post-create.g?blogID=xxxxxxxxxxxxxx
3.4. El valor de blogID de la URL del ejemplo será tu BlogID.

4. Cambiamos también los parametros usuario y contraseña por nuestros respectivos usuario y contraseña de nuestra cuenta de blogger.
5. Ejecutamos el archivo php desde cualquier explorador, o desde linux o como queramos para que se postee lo contenido en esta línea de código:

$b->post( ‘Posteando desde la clase blogger.class de Ruta Relativa’, ‘Hola, estoy escribiendo un interesante post desde la clase blogger.class de Ruta Relativa.’, ‘post, api, blogger, class, ruta relativa’ );

Siendo respectivamente el primer parámetro el título del post, el segundo el contenido del post y el tercero los tags del post.

Eso es todo, espero que ahora si podáis hacerlo funcionar.

Sergiocius 02/08/2010 20:59:26
10
Avatar del usuario Beko

Entiendo ahora si..
Lo que hize fue, modifique el ID, USER Y PASS EN ejemplo.php y a blogger.class.php no lo toque nada..

Le di ejecutar miweb.com/ejemplo.php

me sale el cuadro de postear del blogger todo bien, pero hay un pequeño error ensima del header.

Warning: DOMDocument::loadHTML() [domdocument.loadhtml]: Unexpected end tag : p in Entity, line: 138 in /home/miweb/public_html/carpeta/blogger.class.php on line 139

y no puedo ver las letras del capcha..

Gracias de antemano amigo.

Beko 02/08/2010 21:59:59
11
Avatar del usuario Julio

para que se posten automaticamente

‘postDate’ => ”,
‘postTime’ => ”,

remplazar el postdate y el posttime y dejarlos asi de blogger.class.php

Julio 15/08/2010 21:06:25
12
Avatar del usuario Manuel

hola, hize lo que aparece, pero me da error:

“Warning: DOMDocument::loadHTML() [domdocument.loadhtml]: Unexpected end tag : img in Entity, line: 122 in blogger.class.php on line 139

Warning: DOMDocument::loadHTML() [domdocument.loadhtml]: ID continue already defined in Entity, line: 281 in blogger.class.php on line 139

Warning: DOMDocument::loadHTML() [domdocument.loadhtml]: ID service already defined in Entity, line: 283 in blogger.class.php on line 139

Warning: DOMDocument::loadHTML() [domdocument.loadhtml]: ID naui already defined in Entity, line: 285 in blogger.class.php on line 139

Warning: DOMDocument::loadHTML() [domdocument.loadhtml]: ID fpui already defined in Entity, line: 287 in blogger.class.php on line 139

Warning: DOMDocument::loadHTML() [domdocument.loadhtml]: ID skipvpage already defined in Entity, line: 289 in blogger.class.php on line 139

Warning: DOMDocument::loadHTML() [domdocument.loadhtml]: ID rm already defined in Entity, line: 291 in blogger.class.php on line 139

Warning: DOMDocument::loadHTML() [domdocument.loadhtml]: ID dsh already defined in Entity, line: 293 in blogger.class.php on line 139

Warning: DOMDocument::loadHTML() [domdocument.loadhtml]: ID hl already defined in Entity, line: 295 in blogger.class.php on line 139

Warning: DOMDocument::loadHTML() [domdocument.loadhtml]: ID alwf already defined in Entity, line: 297 in blogger.class.php on line 139

Warning: DOMDocument::loadHTML() [domdocument.loadhtml]: ID alinsu already defined in Entity, line: 299 in blogger.class.php on line 139

Fatal error: Uncaught exception ‘Exception’ with message ‘No se ha podido obtener el securityToken. Reintenta el logueo.’ in blogger.class.php:155 Stack trace: #0 ejemplo.php(12): blogger->post(‘Posteando desde…’, ‘Hola, estoy esc…’, ‘post, api, blog…’) #1 {main} thrown in blogger.class.php on line 155″

Me gustaría saber donde puedo encontrar algo parecido, pero que se haga desde un formulario (titulo y contenido) y al enviarlo redirige al post creado.

desde ya muchas gracias por la respuesta.

Manuel
18/08/2010 18:43:28
13
Avatar del usuario Sergiocius

@Julio
Gracias por el añadido ;).

@Manuel
Lo más seguro es que no has incluido el ID de tu blog, lee el post de nuevo o los comentarios para aprender que es el blogID y ponerlo correctamente.
En cuanto a lo de encontrar un formulario para hacerlo, creo que no tiene sentido porque la utilidad de esto es hacerlo de forma automática desde un script en PHP. Si quieres postear usando un formulario puedes entrar en la administración de tu blog en Blogger y hacerlo desde ahí.

¡Saludos!

Sergiocius 18/08/2010 19:03:54
14
Avatar del usuario Manuel

@Sergiocius, puse la id del blog, el usuario y la contraseña. Pero creo que se debe a algun problema del servidor en cuanto a los requerimientos.
Queria hacer el formulario para que puedan escribir entradas los visitantes.
¡Saludos!

Manuel
18/08/2010 20:17:42
15
Avatar del usuario Sergiocius

Pues es raro la verdad, dices que puede ser un problema del servidor en cuanto a requerimientos… ¿a que te refieres con eso?.
Está bien pensado eso del formulario para los visitantes, pero realmente es fácil de hacer, ya que símplemente debes de recoger lo que envian por POST y usar la clase blogger.class para enviarlo a tu cuenta de blogger.
Lamento los problemas.

Sergiocius 18/08/2010 22:51:19
16
Avatar del usuario Manuel

@Sergiocius, ok gracias, nose lo que este mal, pero el formulario si me funciona, lo que no logro es que una vez enviado me redirija al post creado.

Manuel
19/08/2010 01:24:14
17
Avatar del usuario Sergiocius

@Manuel
Eso es difícil creo, ya que desde blogger cuando posteas te lleva a la misma página donde estabas escribiendo el post, pero mostrando un mensaje, no te redirecciona al post.
Podrías hacer que, por curl, obtener el primer post de tu blog y redireccionar hacia él.

Sergiocius 19/08/2010 11:20:48

Escribir comentario en Escribir un post en Blogger usando cUrl y PHP

¡Tu opinión nos interesa!. Escribe tu opinión lo más clara posible para que todos podamos entenderla, evita el spam, comentarios ofensivos, etc. ya que serán eliminados. Tu opinión sera moderada antes de ser publicada, por lo que su aparición en la web puede tardar unos minutos. Si deseáis ponerse en contacto para sugerencias o críticas podéis hacerlo desde el formulario de contacto.

Sigue a rutarelativa en twitter
Editores de Ruta Relativa
Avatar del editor KeLDroX KeLDroX Desarrollador en entornos web y Diseñador de profesión, muy activo, que busca siempre enfrentarse a retos cada vez más dificiles. Si un día no hago algo nuevo o no he superado alguna dificultad para mi es un día vacío. Cuento con dos titulaciones: Técnico en Explotación de Sistemas Informáticos y Técnico Superior en Desarrollo de Aplicaciones Informáticas. Fundé rutarelativa porque siempre quise tener un sitio en donde compartir mis experiencias profesionales y a los problemas que me enfrento día a día en el ámbito profesional.
Avatar del editor sergiocius sergiocius Soy un desarrollador en entornos web y escritorio, entusiasta y amante de mi trabajo del que cada día espero aprender algo nuevo. Tengo una titulación de Técnico Superior en Desarrollo de Aplicaciones Informáticas y actualmente curso el primer año de Carrera Universitaria con el poco tiempo que me deja el trabajo. Fundé rutarelativa porque quiero que mi esfuerzo y tiempo invertidos en aprender y poner en práctica algo le resulte útil y fácil a otro usuario, del mismo modo que yo aprendo y ahorro tiempo con la ayuda de los demás.