2009-08-16 11 views
5

Sto riscontrando un problema nel far funzionare l'API di Blogger per PHP.Pubblicazione su Blogger tramite PHP

Quello che mi serve è poter pubblicare un nuovo blogpost sul mio bloggeraccount. Il codice che sto utilizzando è tratto dalla pagina di API di Google qui: http://code.google.com/intl/nl/apis/blogger/docs/1.0/developers_guide_php.html

Ecco il mio codice:

<? 
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(); 
?> 

L'errore che sto ottenendo è 'Fatal error: Call to una funzione membro newEntry() su un non oggetto in C: \ xampp \ htdocs \ HelloWorld \ blogger2.php sulla riga 21 '

Qualcuno può darmi una mano o darmi un esempio di codice funzionante su come postare su Blogger usando PHP?

risposta

6

La variabile $gdClient è intanciated al di fuori della funzione createPublishedPost:

$gdClient = new Zend_Gdata($client); 

all'interno di una funzione, le variabili che sono stati definiti al di fuori di esso non esistono per impostazione predefinita.
A tale proposito, è possibile dare un'occhiata alla pagina Variable scope del manuale.

Ciò significa che $gdClient non esiste all'interno della funzione; quindi, è null; quindi, non un oggetto - che spiega il messaggio di errore che stai ricevendo.


per controllare che da soli, è possibile utilizzare

var_dump($gdClient); 

all'inizio della funzione: vi permetterà di vedere quale tipo di dati che è; se non è un'istanza della classe si è disposti a usare, non è un buon segno ;-)


Si potrebbe desiderare di uno:

  • pass che variabile come un parametro alla funzione createPublishedPost
  • o dichiarare come global all'interno della funzione (così la funzione può "vedere" la variabile come dichiarata fuori)

La prima soluzione è probabilmente il più pulito, penso ;-)


Come sidenote, si potrebbe desiderare di configurare il livello di error_reporting (see also), in modo da ottenere un E_NOTICE quando si utilizza una variabile che è non dichiarato - in questo caso, dovreste aver ottenuto uno, per esempio ;-)
si potrebbe anche voler attivare display_errors, sul computer di sviluppo, se non è già acceso - sembra essere, come avete ottenuto il messaggio di errore irreversibile

potrebbe sembrare un po 'fastidioso all'inizio, ma, una volta che ci arriva a questo, è davvero fantastico: consentire di rilevare quel tipo di cose molto più velocemente ;-)
E aiuta anche a rilevare errori di battitura nei nomi delle variabili ^^
E ti rende il codice più pulito!

+0

Questo è tutto! Grazie compagno ! – Pmarcoen

1

Lo spostamento del $gdClient nel corpo della funzione ha risolto qualcosa, ma è anche necessario spostare $blogID nel corpo della funzione.

Problemi correlati