Escribir un post en Blogger usando cUrl y PHP | Rutarelativa
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
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.