使用PHP发布到Blogger

时间:2009-08-16 17:16:05

标签: php api blogger

我在使用Blogger API for PHP工作时遇到了问题。

我需要的是能够将新的博客帖子发布到我的bloggeraccount。 我正在使用的代码来自Google API页面: http://code.google.com/intl/nl/apis/blogger/docs/1.0/developers_guide_php.html

这是我的代码:

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

$user = 'name@example.com';
$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();
?>

我得到的错误是'致命错误:在第21行的C:\ xampp \ htdocs \ HelloWorld \ blogger2.php中的非对象上调用成员函数newEntry()

任何人都可以帮我或者给我一个如何使用PHP发布到博主的工作代码示例吗?

2 个答案:

答案 0 :(得分:6)

您的$gdClient变量在createPublishedPost函数之外被置换:

$gdClient = new Zend_Gdata($client); 

在函数内部,默认情况下不存在已在其外部定义的变量。
关于这一点,您可以查看手册的Variable scope页面。

这意味着函数内部不存在$gdClient;因此,它是null;所以,不是一个对象 - 它解释了你得到的错误信息。


要自己检查一下,可以使用

var_dump($gdClient);

在函数的开头:它将允许您查看它是什么类型的数据;如果它不是你愿意使用的课程实例,那不是一个好兆头; - )


您可能想要:

  • 将该变量作为参数传递给createPublishedPost函数
  • 或在函数中将其声明为global(因此函数可以“看到”外部声明的变量)

第一种解决方案可能是最干净的,我认为; - )


作为旁注,您可能需要配置error_reporting级别(see also),以便在使用未声明的变量时获得E_NOTICE - 在这种情况下,您应该得到一个,例如;-)
您可能还想在开发计算机上启用display_errors,如果它尚未打开 - 似乎是,因为您收到致命错误消息

一开始看起来有点烦人,但是,一旦你习惯它,它真的很棒:允许更快地检测那种东西;-)
它还有助于检测变量名称中的拼写错误^^
它让你的编码方式更清洁!

答案 1 :(得分:1)

$gdClient移动到函数体上会修复某些内容,但您还必须将$blogID移动到函数体中。