2009-08-16 34 views
5

Tôi gặp sự cố khi nhận API Blogger cho PHP hoạt động.Đăng lên Blogger bằng cách sử dụng PHP

Điều tôi cần là có thể đăng một bài đăng blog mới lên tài khoản blogger của tôi. Mã Tôi đang sử dụng được lấy từ trang API của Google ở ​​đây: http://code.google.com/intl/nl/apis/blogger/docs/1.0/developers_guide_php.html

Đây là mã của tôi:

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

Các lỗi tôi nhận được là 'Fatal error: Call to một hàm thành viên newEntry() trên một đối tượng không trong C: \ xampp \ htdocs \ HelloWorld \ blogger2.php trên dòng 21 '

Bất cứ ai có thể giúp tôi hoặc cung cấp cho tôi mẫu mã hoạt động về cách đăng bài lên blogger bằng PHP?

Trả lời

6

biến $gdClient của bạn được intanciated ngoài createPublishedPost chức năng:

$gdClient = new Zend_Gdata($client); 

Bên trong một chức năng, các biến đã được định nghĩa bên ngoài của nó không tồn tại theo mặc định.
Về điều đó, bạn có thể xem trang Variable scope của hướng dẫn.

Điều này có nghĩa là $gdClient không tồn tại bên trong hàm; do đó, nó là null; vì vậy, không phải là một đối tượng - giải thích thông báo lỗi bạn đang nhận được.


Để kiểm tra điều đó một mình, bạn có thể sử dụng

var_dump($gdClient); 

vào đầu của hàm: nó sẽ cho phép bạn xem những gì loại dữ liệu mà nó là; nếu nó không phải là một thể hiện của lớp bạn sẵn sàng để sử dụng, nó không phải là một dấu hiệu tốt ;-)


Bạn có thể muốn một trong hai:

  • vượt qua biến đó như là một tham số cho createPublishedPost chức năng
  • hoặc khai báo nó như global bên trong hàm (vì vậy chức năng có thể "nhìn thấy" các biến như tuyên bố bên ngoài)

giải pháp đầu tiên có lẽ là sạch nhất một, tôi nghĩ ;-)


Là một sidenote, bạn có thể muốn cấu hình mức error_reporting của bạn (see also), do đó bạn nhận được một E_NOTICE khi bạn đang sử dụng một biến đó là không được khai báo - trong trường hợp này, bạn nên có một ví dụ :-)
Bạn cũng có thể muốn bật display_errors, trên máy phát triển của mình, nếu máy chưa được bật - dường như, Thông báo lỗi nghiêm trọng

Điều này có vẻ hơi khó chịu ngay từ đầu, nhưng khi bạn nhận được chúng tôi ed nó, nó thực sự là tuyệt vời: cho phép để phát hiện rằng loại công cụ nhanh hơn rất nhiều ;-)
Và nó cũng giúp phát hiện lỗi chính tả trong tên biến ^^
Và nó làm cho bạn mã cách sạch hơn!

+0

Đúng vậy! Cảm ơn bạn! – Pmarcoen

1

Di chuyển $gdClient đến phần thân chức năng đã sửa lỗi nào đó, nhưng bạn cũng phải di chuyển $blogID vào thân chức năng.

Các vấn đề liên quan