Я ищу хорошую, простую функцию PHP, чтобы получить последние обновления статуса Facebook. Кто-нибудь знает об одном?
Благодаря!
EDIT: Я добавил половину решения ниже.
Или, если кто-то знает хороший способ прочитать в ленте RSS и высветить последнее обновление статуса?
Быстрая проверка PEAR найдена Services_Facebook
Это неполный ответ, но это то, что я получил до сих пор:
Во-первых: добавьте приложение разработчика в FB . Затем создайте новое приложение. Назовите это, как хотите.
Второе: загрузите PHP-клиент. Дамп его где-то на вашем веб-хостинге, т.е. / facebook /
Третье: скопируйте следующий код для начинающих, чтобы начать работу с файлом php:
<?php require_once('facebook/php/facebook.php'); $facebook = new Facebook("YOUR_API_KEY","YOUR_SECRET_KEY"); $result = $facebook->api_client->fql_query("SELECT status FROM user WHERE uid = YOURIDNUMBER"); // OR --- they both get the same data $result = $facebook->api_client->users_getInfo(YOURIDNUMBER,'status'); print_r($result); echo "<pre>Debug:" . print_r($facebook,true) . "</pre>"; // debug info ?>
Дополнительная информация:
Надеюсь, это поможет кому-то начать!
EDIT: Кажется, что FB не позволит вам получить доступ к статусу someones, даже если offline_access включен, если вы не являетесь этим человеком или его другом (в зависимости от их настроек конфиденциальности).
Однако мне удалось найти RSS-канал в новой версии профиля: http://www.new.facebook.com/minifeed.php?filter=11
Я нашел способ получить ваш последний статус в facebook. Вот как вы это делаете:
1) Создайте приложение facebook и скопируйте секрет приложения и идентификатор приложения.
2) Предоставьте приложение read_stream и offline_access вашему профилю. ( http://developers.facebook.com/docs/authentication/permissions ). Чтобы получить ваш последний статус, для приложения требуется access_token. Если offline_access предоставлен, access_token должен «никогда» не истекать. Самый простой способ сделать это – нажать кнопку, сгенерированную этим кодом: (обязательно заполните «свой идентификатор приложения» и установите для cookie значение true!).
<fb:login-button perms="read_stream,offline_access"></fb:login-button> <div id="fb-root"></div> <script src="http://connect.facebook.net/en_US/all.js"></script> <script>FB.init({appId: 'your app id', status: true, cookie: true, xfbml: true});</script>
3) Теперь попробуйте выяснить, какой access_token он использует. Access_token сохраняется в файле cookie fbs_appId. Найдите его с помощью браузера или с помощью $_COOKIE['fbs_appId']
. Ищите access_token=...
4) Теперь, когда у вас есть (надеюсь) никогда не истекающий access_token, вы можете использовать следующий код:
$access_token='xxxxxxxxxxxxxxxxxxxx'; $appId='123456789132456789'; $appSecret='xxxxxxxxxxxxxxxxxxxx'; $profileId='123456789'; //http://github.com/facebook/php-sdk/blob/master/src/facebook.php require 'facebook.php'; $facebook = new Facebook(array('appId' => $appId,'secret' => $appSecret)); $response = $facebook->api('/'.$profileId.'/feed?limit=1&access_token='.$access_token);
5) Должна быть указана часть сообщения: $response['data'][0]['message']
Я не знаю, КАК долго действует токен доступа. Facebook говорит:
Позволяет вашему заявлению выполнять авторизированные запросы от имени пользователя в любое время. По умолчанию большинство токенов доступа истекают через короткий промежуток времени, чтобы гарантировать, что приложения выполняют запросы только от имени пользователя, когда они активно используют приложение. Это разрешение делает маркер доступа, возвращаемый нашей конечной точкой OAuth долговечным.
Вот ДЕЙСТВИТЕЛЬНО простая функция, если вы просто хотите получить последний статус. Это не зависит от SDK для Facebook или чего-то еще. Вам просто нужна поддержка CURL и JSON.
Простая функция PHP для получения статуса facebook
Кажется, я никогда не лажу с PEAR, но если вам повезло больше, чем я, то решение PEAR кажется лучшим маршрутом на длительный срок.
Другая идея – изучить библиотеку API разработчиков Facebook и посмотреть, может ли она дать вам все, что вы ищете.
Наконец, раньше был способ получить RSS-канал … но я не могу найти никаких инструкций, которые больше работают, но вы можете сослаться на помощь Facebook, если это вас интересует. Шахта выглядит примерно так:
http://www.new.facebook.com/feeds/status.php?id=[idnumber]&viewer=[viewer]&key=[key]&format=rss20
Я получил его работу с помощью сообщения Jens, чтобы получить действительный access_token. Затем я извлек сообщения о состоянии и время публикации из xml-файла с помощью следующего кода (вы можете изменить $ limit, чтобы отображать более или менее сообщения о статусе или использовать форму для его изменения).
Обязательно добавьте свой идентификатор Facebook и маркер доступа, который вы получили от созданного приложения (см. Сообщение Йенса ). Здесь вы можете проверить вывод этого скрипта.
Повеселись!
<?php if(isset($_POST['limit'])) { $limit = $_POST['limit']; } else { $limit = 3; // number of status messages to display } $f = fopen ("https://api.facebook.com/method/status.get?uid=YOUR_FACEBOOK_ID&limit=".$limit."&access_token=YOUR_ACCESS_TOKEN", "r"); while ($line= htmlentities(fgets($f))) { if ($line===FALSE) print ("FALSE\n"); else { $content = $content." ".$line; } } fclose ($f); $message = explode("<message>", $content); // search for the <message> tag $message_cnt = count($message); $msg_index = 0; $time = explode("<time>", $content); // search for the <time> tag for($i=1; $i<$message_cnt; $i++) { $tmp = explode("</message>", $message[$i]); $msg[$msg_index] = $tmp[0]; // status message $tmp2 = explode("</time>", $time[$i]); $t[$msg_index++] = $tmp2[0]; // time of posting } for($i=0; $i<$msg_index; $i++) { echo("<span class=\"status\">".preg_replace('!\015\012|\015|\012!','<br>',$msg[$i])."</span><br>\n <span class=\"date\">on ".date("dmY", $t[$i])." at ".date("H:i",$t[$i])."</span><br><br>\n"); } ?>
За последние несколько дней я пробовал множество учебников, и никто из них не работал. Я думаю, это может произойти из-за того, что facebook изменил свои требования api. Это единственный, который я нашел, который работает на данный момент:
http://www.deanblog.co.uk/article/13/adding-a-facebook-status-feed-to-your-website-with-php
Просто используйте PHPforFB framework ( http://www.phpforfb.com/en/ ) для быстрого доступа .
Код выглядит так:
require_once('phpforfb_framework.php'); $structInit = array('app_id' => APP_ID,'app_name' => APP_NAME,'sec_key' => APP_SECKEY); $FacebookAPP = new PHPforFB($structInit); if($FacebookAPP->lastErrorCode>0){ //Creation failed => Display error message and exit echo "PHPforFB Error: ".$FacebookAPP->lastErrorCode." -> ".$FacebookAPP->lastError; }else{ //PHPforFB framework established if($FacebookAPP->userLoggedIn === TRUE){ //If the user is logged in at Facebook: //Here you can determine if the user has at least once before //granted basic permissions to your application. if($FacebookAPP->userAuthenticated === FALSE){ //The user has not yet granted permissions //**your code here** }else{ //The user has already granted permissions, therefore his Facebook ID //is known to us. It is always available in $FacebookAPP->userID: $userID = $FacebookAPP->userID; //**your code here** } } }
Поскольку я не мог использовать маршрут API, я пошел с RSS, найденным по адресу: http://www.new.facebook.com/minifeed.php?filter=11
И использовал следующую функцию PHP, называемую StatusPress , с некоторыми из моих собственных модификаций, для анализа RSS-канала для моего статуса Facebook. Прекрасно работает!
<?php // see http://github.com/facebook/php-sdk/blob/master/facebook.php require './facebook.php'; // Create our Application instance. // see http://www.youtube.com/watch?v=jYqx-RtmkeU for how to get these numbers $facebook = new Facebook(array('appId' => 'XXX','secret' => 'XXX')); // This call will always work since we are fetching public data. // this could be /username or /username/friends etc... // see developer api for FQL for examples $status = $facebook->api('/haanmc/feed?limit=1'); ?> <p><?php print $status['data'][0]['message']; ?></p> <p>Likes: <?php print $status['data'][0]['likes']; ?> | Comments: <?php print count($status['data'][0]['comments']['data']); ?></p> <textarea style="width: 95%; height: 600px;"><?php print_r($status); ?></textarea>