Я ищу хорошую простую функцию PHP, чтобы получать последние обновления статуса в Facebook. Кто-нибудь знает об одном?
Спасибо!
Обновлено: Я добавил полурешение ниже.
Или, если кто-нибудь знает, как хорошо прочитать RSS-ленту и выплюнуть недавнее обновление статуса?
К сожалению, почти все методы, описанные ниже, устарели: /






Быстрая проверка на ГРУША обнаружила Services_Facebook
Кажется, я никогда не ладил с PEAR, но если вам повезет больше, чем мне, то решение PEAR кажется лучшим долгосрочным путем.
Другая идея - изучить библиотеку API разработчика Facebook и посмотреть, может ли она дать вам то, что вы ищете.
Наконец, раньше был способ получить RSS-канал ... но я, похоже, больше не могу найти никаких инструкций, которые работают, но вы можете потрогать справку Facebook, если это вас интересует. Моя в итоге выглядит примерно так:
http://www.new.facebook.com/feeds/status.php?id=[idnumber]&viewer=[viewer]&key=[key]&format=rss20
Это неполный ответ, но до сих пор я получил следующее:
Первый: добавить приложение разработчика на 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
?>
Дополнительная информация:
Надеюсь, это поможет кому-нибудь начать работу!
Обновлено: Кажется, что FB не позволит вам получить доступ к чьему-либо статусу, даже если offline_access включен, если только вы не являетесь этим человеком или его другом (в зависимости от их настроек конфиденциальности).
Однако мне наконец удалось найти RSS-канал в новой версии профиля: http://www.new.facebook.com/minifeed.php?filter=11
Вы должны где-то что-то видеть. Пустой вывод обычно является признаком фатальной ошибки в apache error_log, если в вашем php.ini указано display_errors = off. Клиент FB - это красиво OO'ed PHP5 и обычно выдает довольно значимые и подробные исключения в случае ошибки.
В итоге я сбросил свой СЕКРЕТНЫЙ ключ, и это решило проблему. Однако мой запрос fql не даст никаких результатов, если я не включу: $ fb_user = $ facebook-> require_login () ;. Разрешение offline_access, похоже, работает неправильно, или я ошибаюсь.
Поскольку я не мог использовать маршрут 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 https://thewikihow.com/video_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>
Я нашел способ получить ваш последний статус в фейсбуке. Вот как вы это делаете:
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 говорит:
Enables your application to perform authorized requests on behalf of the user at any time. By default, most access tokens expire after a short time period to ensure applications only make requests on behalf of the user when the are actively using the application. This permission makes the access token returned by our OAuth endpoint long-lived.
Я получил его, используя сообщение Дженса, чтобы получить действительный 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("d.m.Y", $t[$i])." at ".date("H:i",$t[$i])."</span><br><br>\n");
}
?>
Вот ДЕЙСТВИТЕЛЬНО простая функция, если вы просто хотите получить последний статус. Это не зависит от Facebook SDK или чего-то еще. Вам просто нужна поддержка CURL и JSON.
Простая функция PHP для получения статуса facebook
Проголосовали, потому что это сэкономило мне некоторое время после того, как я исправил ваши ошибки в регистре имен переменных и отказ проверить, имел ли массив значения перед итерацией и т. д.
Я перепробовал множество руководств за последние несколько дней, и ни одно из них не помогло. Я думаю, это может быть связано с тем, что facebook изменил свои требования к API. Это единственное, что я нашел, который работает на данный момент:
http://www.deanblog.co.uk/article/13/adding-a-facebook-status-feed-to-your-website-with-php
Работал у меня на текущем FB API ... какой бы версии он ни был сейчас.
Просто используйте фреймворк PHPforFB (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**
}
}
}
Интересный вопрос. Я тоже хочу этот ответ!