Я пытаюсь в течение двух дней публиковать сообщения, полученные из твиттера, на одну из моих страниц в facebook автоматически, то есть через cronjob.
Часть твиттера прошла нормально, но для жизни я не могу заставить часть Facebook работать.
Проблема в том, что мой скрипт работает … до тех пор, пока это не произойдет, как правило, access_token истек через несколько часов.
Теперь у меня есть это сообщение: #200) Posts where the actor is a page cannot also include a target_id
.
Я пробовал много вещей, предложенных для различных потоков SO. Проблема в том, что API Facebook, похоже, довольно часто меняется, а то, что раньше работало, не работает.
Любая идея и предложение о том, как заставить ее работать надежно, приветствуются.
Вот код, который у меня есть. Я создал приложение 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
У меня была аналогичная проблема с истечением срока действия маркера доступа. Оказывается, вы можете обменять свой токен на «долгоживущий» токен
Удалось выкопать мой код:
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 = ''; }
Они – другая альтернатива, которую вы можете использовать, для меня мне проще использовать Twitter Api, чтобы оставлять комментарии к twiiter и facebook в одно и то же время. Я связал его с Facebook, он отлично работает, все, что вам нужно сделать, это изменить ключ api twitter и предоставить данные. Если вы заинтересованы в этом решении, дайте мне знать, и я отправлю код здесь.