2

我有一个包含食谱的网站,并且该网站在 facebook 中有一个有数千名朋友的群组。我想在小组时间线上发布新食谱。例如,我可以每 1 小时使用 cron 执行一次。

require_once('facebook.php');

    $config = array(
        'appId' => 'xxx',
        'secret' => 'xxx',
    );

    $facebook = new Facebook($config);

    // If not, we'll get an exception, which we handle below.
    try {
        $ret_obj = $facebook->api('/page_id/feed', 'POST',
                                    array(
                                    'link' => 'www.example.com',
                                    'message' => 'Posting with the PHP SDK!'
                                ));
        echo '<pre>Post ID: ' . $ret_obj['id'] . '</pre>';

    } catch(FacebookApiException $e) {
        echo "error type: ". $e->getType()."<br />";
        echo "error mesage: ". $e->getMessage()."<br />";
    }   

我应该如何更改我的脚本以便能够从 cron 守护进程在组页面上发布?

我稍微更改了脚本,现在出现此错误:错误类型:OAuthException 错误消息:(#200)用户尚未授权应用程序执行此操作

4

2 回答 2

0

如此处文档所述:

/GROUP_ID/feed用户可以通过使用publish_actions权限和以下参数发出 HTTP POST 请求,在群组墙上发布链接。(publish_stream也可以,但你应该使用publish_actions。)这需要一个用户access_token

所以你需要做的只是发布(以用户身份运行你的脚本):

  1. publish_actions允许
  2. 用户access_token

现在要将其用作 cronjob,我通常会执行以下操作:

  1. 授权用户(有权发布到该组)具有所需的权限
  2. 扩展他的令牌
  3. 将此令牌存储在数据库中
  4. 使用令牌发布
  5. 密切关注过期变量,在令牌过期 3 天之前 --> 向用户发送电子邮件以再次“登录”到您的应用程序,然后转到#3
  6. 在发布并记录它时始终捕获任何错误;您可以检查错误是否与访问令牌有关,因此转到#5
于 2013-01-20T17:10:21.450 回答
0

尝试:

$config = array(
    'appId' => 'xxx',
    'secret' => 'xxx',
    'cookie' => true
);

设置 cookie 应该让您保持登录状态。

于 2013-01-20T16:08:29.413 回答