7

两天来,我一直在尝试将通过 twitter 搜索收集到的消息自动发布到我的一个 facebook 页面 - 即通过 cronjob。

推特部分很顺利,但对于我来说,我无法让 Facebook 部分正常工作。

问题是我的脚本可以工作......直到它不起作用,通常 access_token 会在几个小时后过期。

现在我有这个消息: #200) Posts where the actor is a page cannot also include a target_id

我已经尝试了很多关于各种 SO 线程的建议。问题是:Facebook API 似乎经常变化,而过去的工作却没有。

欢迎任何关于如何使其可靠工作的想法和建议。

这是我到目前为止的代码。我创建了一个 facebook 应用程序,并使用FB Graph Explorer和对“/me/account”的请求生成了一个访问令牌。

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

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

// get the message
$msg_body = array(
    'message' => $message->message."\n".'(via http://twitter.com/'.$message->author.')',
    'access_token' => FB_ACCESS_TOKEN 

);
// Post to Facebook
$fb_result=0;
try {
    $postResult = $facebook->api('/'.PAGEID.'/feed', 'post', $msg_body );
} catch (FacebookApiException $e) {
    echo $e->getMessage();
}

if($postResult)
{
    $fb_result=1;
    $last_posted_tweet_id = $message->id;
    file_put_contents(FOLDER.LAST_TWEET_ID_FILE, $last_posted_tweet_id);
    echo 'Your message '.$message->id.' is posted on your facebook wall.';
    //print_r($msg_body);
}

更新 代码可见这里http://phpbin.net/ZMNt3MPt

4

2 回答 2

10

我在访问令牌到期时遇到了类似的问题。原来你可以将你的代币兑换成“长寿”代币

设法挖掘我的代码:

try{
        $token =  $facebook->getAccessToken();

        // get "long-lived" access token
        $curl = new Curl();
        $curl->setSsl();
        $exchange_url = "https://graph.facebook.com/oauth/access_token?client_id=".$facebook_app_id."&client_secret=".$facebook_app_secret."&grant_type=fb_exchange_token&fb_exchange_token=".$token;
        $page = $curl->get($exchange_url);

        if ($page){
            $page = explode("access_token=", $page);
            if (count($page) > 1){
                $page = explode("&", $page[1]);
                $token = $page[0];

                $facebook->setAccessToken($token);
            }
        }

    } catch(Exception $e){
        $token = '';
    }
于 2013-07-22T09:24:02.093 回答
1

它们是您可以使用的其他替代方案,对我来说,我发现使用 Twitter Api 同时在 twiiter 和 facebook 上发表评论更容易。我将它链接到 Facebook,效果很好,您只需更改 twitter api 密钥并提供数据。如果您对此解决方案感兴趣,请告诉我,我将在此处发布代码

于 2013-07-31T14:44:44.197 回答