2013-07-22 31 views
7

私はtwitter検索から収集したメッセージを自分のFacebookページに自動的に投稿しようとしていました。つまり、cronジョブを介してです。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

私は理解していますが、本当にその方向にそれを持っている必要があります。それ以外の方法はありません。 – pixeline

+0

私のソリューションは同じように動作します。それはTwitterに最初に投稿し、私のtwitterは私のFacebookにリンクしているので、twitterの投稿はFacebookに自動的に投稿されます –

+0

質問はどうですか?あなたのFacebookにあなたのTwitterをリンクしましたか? – pixeline

関連する問題