2009-08-16 29 views
5

Tengo un problema al obtener la API de Blogger para que PHP funcione.Publicar en Blogger usando PHP

Lo que necesito es poder publicar un nuevo blog en mi bloggeraccount. El código que estoy usando es tomado de la página de la API Google aquí: http://code.google.com/intl/nl/apis/blogger/docs/1.0/developers_guide_php.html

Aquí está mi código:

<? 
require_once 'Zend/Loader.php'; 
Zend_Loader::loadClass('Zend_Gdata'); 
Zend_Loader::loadClass('Zend_Gdata_Query'); 
Zend_Loader::loadClass('Zend_Gdata_ClientLogin'); 

$user = '[email protected]'; 
$pass = 'password'; 
$service = 'blogger'; 

$client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $service, null, 
     Zend_Gdata_ClientLogin::DEFAULT_SOURCE, null, null, 
     Zend_Gdata_ClientLogin::CLIENTLOGIN_URI, 'GOOGLE'); 
$gdClient = new Zend_Gdata($client); 

$blogID = '7973737751295446679'; 

function createPublishedPost($title='Hello, world!', $content='I am blogging on the internet.') 
{ 
    $uri = 'http://www.blogger.com/feeds/' . $blogID . '/posts/default'; 
    $entry = $gdClient->newEntry(); 
    $entry->title = $gdClient->newTitle($title); 
    $entry->content = $gdClient->newContent($content); 
    $entry->content->setType('text'); 

    $createdPost = $gdClient->insertEntry($entry, $uri); 
    $idText = split('-', $createdPost->id->text); 
    $newPostID = $idText[2]; 

    return $newPostID; 
} 

createPublishedPost(); 
?> 

El error que estoy recibiendo es 'Fatal error: Llamada a una función miembro newEntry() en un no objeto en C: \ xampp \ htdocs \ HelloWorld \ blogger2.php en la línea 21 '

¿Alguien puede ayudarme o darme una muestra de código de trabajo de cómo publicar en blogger usando PHP?

Respuesta

6

La variable $gdClient se intanciated fuera de la función createPublishedPost:

$gdClient = new Zend_Gdata($client); 

dentro de una función, las variables que han sido definidas fuera de él no existe de forma predeterminada.
Acerca de eso, puede echar un vistazo a la página Variable scope del manual.

Esto significa $gdClient no existe dentro de la función; por lo tanto, es null; entonces, no es un objeto, lo que explica el mensaje de error que está recibiendo.


para comprobar que por sí mismo, puede utilizar

var_dump($gdClient); 

al comienzo de la función: que le permitirá ver qué tipo de datos que es; si no es una instancia de la clase que está dispuesto a utilizar, que no es una buena señal ;-)


Es posible que desee, ya sea:

  • pase esa variable como parámetro a la función createPublishedPost
  • o declarar como global dentro de la función (lo que la función puede "ver" la variable como declarado fuera)

La primera solución es probablemente la más limpia, creo ;-)


Como anotación al margen, es posible que desee configurar el nivel de error_reporting (see also), para que pueda obtener un E_NOTICE cuando se utiliza una variable que es no declarado - en este caso, debería haber obtenido uno, por ejemplo ;-)
Es posible que también desee habilitar display_errors, en su máquina de desarrollo, si todavía no está activado, parece que sí, ya que tiene el mensaje de error grave

podría parecer un poco molesto al principio, pero, una vez que nos dan ed a él, es realmente genial: permite detectar ese tipo de cosas mucho más rápido ;-)
Y también ayuda a detectar errores tipográficos en nombres de variables ^^
¡Y hace que el código sea más limpio!

+0

Eso es todo! Gracias amigo ! – Pmarcoen

1

Al mover el $gdClient al cuerpo de la función se arregló algo, pero también tiene que mover el $blogID en el cuerpo de la función.

Cuestiones relacionadas