2009-08-16 14 views
5

Mam problem z pobieraniem interfejsu API Bloggera dla PHP.Publikowanie w Bloggerze za pomocą PHP

Potrzebuję tego, aby opublikować nowy blog na moim bloggerze. Kod używam jest pobierana ze strony Google API tutaj: http://code.google.com/intl/nl/apis/blogger/docs/1.0/developers_guide_php.html

Oto mój kod:

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

Błąd Dostaję to „Fatal error: Zadzwoń do funkcji składowej newEntry() na nieobiektach w C: \ xampp \ htdocs \ HelloWorld \ blogger2.php na linii 21 '

Czy ktoś może mi pomóc lub dać mi próbkę kodu jak publikować posty na blogu za pomocą PHP?

Odpowiedz

6

zmiennej $gdClient jest intanciated poza funkcją createPublishedPost:

$gdClient = new Zend_Gdata($client); 

wewnątrz funkcji, zmienne, które zostały zdefiniowane poza nim nie istnieje domyślnie.
O tym możesz przeczytać na stronie Variable scope instrukcji.

Oznacza to, że $gdClient nie istnieje w funkcji; stąd jest to null; więc nie obiekt - co wyjaśnia komunikat o błędzie, który otrzymujesz.


Aby sprawdzić, czy samemu, można użyć

var_dump($gdClient); 

na początku funkcji: pozwoli Ci zobaczyć, jaki rodzaj danych jest; jeśli to nie jest instancją klasy jesteś gotów do użycia, to nie jest dobry znak ;-)


Możesz chcieć albo:

  • przekazać tę zmienną jako parametr do funkcji createPublishedPost
  • lub zadeklarować ją jako global wewnątrz funkcji (tak funkcja „widzi” zmienna zadeklarowana poza)

Pierwsze rozwiązanie jest prawdopodobnie najczystszym jeden, myślę ;-)


Jako marginesie, możesz skonfigurować swój poziom error_reporting (see also), więc masz E_NOTICE gdy używasz zmiennej, która jest nie zadeklarowane - w tym przypadku powinieneś go zdobyć, na przykład ;-)
Możesz również włączyć display_errors na maszynie programistycznej, jeśli jeszcze jej nie masz - wygląda na to, że masz Komunikat o błędzie krytycznym:

Może wydawać się nieco denerwujący na początku, ale gdy już nas zdobędziesz do tego, jest naprawdę świetny: pozwala wykryć tego rodzaju rzeczy dużo szybciej ;-)
Pomaga także wykrywać literówki w nazwach zmiennych^^ I to sprawia, że ​​sposób kodowania jest czystszy!

+0

To wszystko! Dzięki stary ! – Pmarcoen

1

Przeniesienie $gdClient do ciała funkcyjnego naprawiło coś, ale musisz również przenieść $blogID do ciała funkcji.

Powiązane problemy