0

我制作了这个 PHP 脚本,它可以获取定期发布到我管理的 Facebook 页面的消息。

我的脚本运行良好,但取决于我作为登录 Facebook 的用户。我希望这个脚本作为 cron 作业运行,所以我担心如果我退出,脚本将无法工作。

即使我没有登录 Facebook,如何让它工作?

请注意,我根据要求创建了一个 Facebook 应用程序,以便能够使用 Facebook api。有没有办法发布为 Facebook 应用程序?

这是我的代码,以防万一。

require_once('config.inc.php');
require '_classes/facebook-php-sdk/src/facebook.php';


$homeurl = 'http://domain.com/to-facebook/index.php';
$post_url = '/'.PAGEID.'/feed';



// The message
        $msg_body = array(
        'message' => 'hello world',
        );

// Post to Facebook

$facebook = new Facebook(array(
        'appId'  => FB_APP_ID,
        'secret' => FB_APP_SECRET,
    ));


// Get User ID
$fbuser = $facebook->getUser();
if ($fbuser) {
    try {
        $postResult = $facebook->api($post_url, 'post', $msg_body );
    } catch (FacebookApiException $e) {
        echo $e->getMessage();
    }
}else{
 // I would like never to come to this point...
    $loginUrl = $facebook->getLoginUrl(array('redirect_uri'=>$homeurl,'scope'=>'publish_stream,manage_pages,publish_actions,status_update,offline_access'));
    header('Location: ' . $loginUrl);
}
if($postResult)
{

    echo '<h1>Your message is posted on your facebook wall.</h1>';
}

*更新* 我尝试了cronjob,不幸的是,过了一会儿我收到了“验证访问令牌时出错:会话在unix时间过期”消息。我很困惑。我究竟做错了什么?

4

3 回答 3

0

**更新 ** 我尝试了 cronjob,但不幸的是,过了一会儿,我收到了“验证访问令牌时出错:会话已在 unix 时间过期”消息。我很困惑。我究竟做错了什么?


我似乎找到了基于此答案Facebook Access Token for Pages的解决方案。它解释了如何为您的 FB 应用程序获取特定页面的 access_token。我得到了它,然后修改了我的代码。我使用没有登录facebook的浏览器对其进行了测试,并且可以正常工作。

这是更新的脚本以防万一。

$msg_body = array(
    'message' => $message->message.' v/ @'.$message->author,
    'access_token' => FB_ACCESS_TOKEN
);



try {
    $postResult = $facebook->api($post_url, 'post', $msg_body );
} catch (FacebookApiException $e) {
    echo $e->getMessage();
}

if($postResult)
{
    echo '<h1>Your message is posted on your facebook wall.</h1>';
    print_r($msg_body);
}

我将运行 cronjob 几天,如果证明它不能可靠地工作,我会回复你。

于 2013-07-20T19:29:11.887 回答
0

为此,您可以轻松使用 CURL。谷歌类似的东西,“CURL 登录,CURL facebook 登录”

于 2013-07-20T19:57:12.147 回答
0

对于连接到您的应用程序的网站: 当您的应用程序获得管理页面的权限时,您可以使用您的用户令牌运行一个 api,它会为您提供所有页面的访问令牌。这些令牌可以永远存在。

对于授权应用程序的用户: 您可以使 access_token 持续更长时间。但是,用户需要登录才能刷新扩展令牌。阅读有关“Facebook 扩展令牌”的更多信息。

曾经有一个许可让应用程序能够永远重用令牌,但它不再可用。现在你能做的最好的事情就是在每次用户登录你的应用程序时简单地运行 api 来扩展令牌。

于 2013-07-20T19:21:40.407 回答