2013-07-22 110 views
7

我一直试图用两天的时间将从Twitter搜索收集到的消息自动发布到我的Facebook页面之一 - 即通过cronjob。通过cron发布到facebook

Twitter部分进展良好,但对于我的生活,我无法让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); 
} 

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

回答

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 = ''; 
    } 
+0

谢谢。我如何使用这个令牌?我尝试使用$ token与消息正文令牌密钥,但然后我得到'用户没有授权应用程序执行此操作。迷失,我是。我已经在这里发布了我的整个代码,因此您有一个概述。 http://phpbin.net/fTVJgkrF – pixeline

+1

我怀疑你在等待令牌过期,然后*然后*交换它。首先得到令牌后立即进行交换。 请参阅https://developers.facebook.com/docs/facebook-login/access-tokens/获取有关令牌和调试的信息。 –

+0

Hello + lePunk:您是否有机会查看我发布的代码?在这一点上,我有点渴望得到一个可行的答案。 – pixeline

1

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

+0

我明白,但我真的需要在这个方向:从twitter到facebook。而不是相反。 – pixeline

+0

我的解决方案工作方式相同。它首先发布到Twitter,并且由于我的twitter与我的Facebook链接,所以twitter上的任何帖子都会自动发布到Facebook上 –

+0

问题是:你是如何将你的twitter链接到你的facebook? – pixeline