2013-07-22 1 views
7

Ho cercato per due giorni di postare automaticamente i messaggi raccolti da una ricerca su Twitter su una delle mie pagine di Facebook - cioè tramite un cronjob.Post to facebook via cron

La parte di Twitter è andata bene, ma per la vita di me non riesco a far funzionare la parte di Facebook.

Il problema è che il mio script funziona ... fino a quando non lo fa, in genere il token di accesso è scaduto dopo poche ore.

Ora ho questo messaggio: #200) Posts where the actor is a page cannot also include a target_id.

Ho provato molte cose suggerite su vari thread SO. Il problema è: l'API di Facebook sembra cambiare molto spesso e quello che prima non funzionava.

Qualsiasi idea e suggerimento su come farlo funzionare in modo affidabile è il benvenuto.

Ecco il codice che ho finora. Ho creato un'app per Facebook e generato un token di accesso utilizzando lo FB Graph Explorer e una richiesta a "/ 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 codice è visibile qui http://phpbin.net/ZMNt3MPt

risposta

10

ho avuto un problema simile con l'accesso in scadenza token. Si scopre che è possibile scambiare il token di "vissuto a lungo" gettone

riuscito a scavare il mio codice:

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

grazie. Come posso usare il token da quel momento in poi? Ho provato a utilizzare $ token con la chiave token body del messaggio, ma poi ho ottenuto "L'utente non ha autorizzato l'applicazione per eseguire questa azione". Perso, lo sono. Ho pubblicato il mio intero codice qui, quindi hai una panoramica. http://phpbin.net/fTVJgkrF – pixeline

+1

Sospetto che tu stia aspettando la scadenza del token e * quindi * lo scambio. Fai lo scambio non appena ricevi un token in primo luogo. Vedere "Informazioni su token e debugging" all'indirizzo https://developers.facebook.com/docs/facebook-login/access-tokens/ –

+0

Hello + lePunk: hai avuto la possibilità di guardare il codice che ho postato? Sono un po 'disperato per una risposta funzionante a questo punto. – pixeline

1

Sono altra alternativa è possibile utilizzare, per me trovo più facile da usare Twitter Api a pubblica un commento su twiiter e facebook allo stesso tempo. L'ho collegato a Facebook, funziona benissimo tutto quello che devi fare è cambiare la chiave di Twitter API e fornire i dati. Se sei interessato a questa soluzione fammi sapere e posterò il codice qui

+0

Capisco, ma ho davvero bisogno di averlo in quella direzione: da twitter a facebook. E non viceversa. – pixeline

+0

La mia soluzione funziona allo stesso modo. Pubblica prima su Twitter e poiché il mio twitter è collegato al mio Facebook, qualsiasi post su Twitter viene quindi pubblicato su Facebook automaticamente –

+0

la domanda è: come hai collegato il tuo twitter al tuo facebook? – pixeline