2013-02-11 6 views
0

Я бы хотел получить последние обновления фан-страницы из facebook для внешней веб-страницы.facebook graph-api

Там, кажется, два вопроса ...

Один из них, похоже, токенов доступа истекает через час, есть способ, чтобы получить постоянный маркер доступа?

Во-вторых, я хотел бы получить json строку из последних 10 сообщений владельца страницы (сообщения, содержащие поля «сообщение»).

Если, например, я использую «https://graph.facebook.com/stackexchange/posts?fields=message&limit=10», он возвращает строки, которые не содержат поля сообщения. Есть ли способ их фильтровать?

Возможно, есть способ получить это с помощью запроса FQL?

+0

Вы не можете получить токен постоянного доступа, который поражает цель OAuth (и безопасности в целом). – ecbrodie

ответ

0

Что касается постоянных токенов доступа: я думаю, что вы ищете токены доступа к приложениям. Подробнее: https://developers.facebook.com/docs/technical-guides/opengraph/publishing-with-app-token/

Что касается вашего второго вопроса: на выходе проверьте наличие существующего ключа «сообщение». Если не исключить эту запись. В PHP есть функция array_key_exists, которая делает вещь.

+0

Это отлично работало для получения постоянного ключа. Это приложение на стороне клиента - я использовал аналогичную функцию js (hasOwnProperty), однако я предпочел бы запрашивать последние 10 элементов, которые я хотел, а не обрезать все сообщения после их возврата. – energee

0

Ну, вы можете попробовать, чтобы один из админов страницы facebook ($pageId) авторизовать приложение ($fbAppId):

<script> 
    var oauth_url = 'https://www.facebook.com/dialog/oauth/'; 
    oauth_url += '?client_id=<?php echo $fbAppId; ?>'; 
    oauth_url += '&redirect_uri=' + encodeURIComponent('https://www.facebook.com/pages/null/<?php echo $pageId; ?>/?sk=app_<?php echo $fbAppId; ?>'); 
    oauth_url += '&scope=manage_pages' 

    window.top.location = oauth_url; 
</script> 

Когда они уполномочили его, вы можете запросить неизгладимое фишку с подписанным запрос ($signedRequest = $facebook->getSignedRequest();) вы получите:

$url = 'https://graph.facebook.com/oauth/access_token?client_id=' . $fbAppId . '&client_secret=' . $appSecret . '&grant_type=fb_exchange_token&fb_exchange_token=' . $signedRequest['oauth_token']; 

Curl этот URL и получить в результате access_token:

$access_token = substr($response, strlen('access_token=')); 

Сохраните его в своей БД. При этом, вы можете получить сообщения:

$graphUrl = '/' . $pageId . '/posts?access_token=' . $accessToken; 
$posts = $this->facebook->api($graphUrl, 'GET'); 

Я понятия не имею, как долго не до этого access_token истекает.

1

Если на вашей странице нет никаких ограничений, вы можете получить эти данные, используя постоянный токен доступа к приложениям. Если вы используете один из SDK на стороне сервера, они автоматически получат его для вас.

Если вы не используете SDK или не пишете на JavaScript, то в разделе документации вы найдете раздел Login as an App документации.

Токен доступа, который вы получаете посредством этого метода, будет сохраняться до тех пор, пока вы не измените секрет своего приложения.

Если на вашей странице есть ограничения по возрасту и/или стране, вам нужен токен доступа пользователя, чтобы получить данные через API. Согласно TOS, вы должны аутентифицировать каждого пользователя и показывать только результаты, если они соответствуют ограничениям, установленным владельцем страницы.

Получение последних 10 сообщений, сделанных с помощью FQL. Попробуйте этот запрос:

SELECT created_time, message, attachment FROM stream WHERE 
    source_id = YOUR_PAGE_ID AND filter_key = "owner" AND message != "" LIMIT 10 
+0

Этот запрос в стиле SQL работал хорошо, но, похоже, не возвратил 7 результатов независимо от того, включен ли LIMIT или нет. Есть ли граф, эквивалентный этому? – energee

+0

Фильтр Graph нельзя фильтровать. Все, что вы можете сделать, это получить все и отфильтровать на вашем конце. – cpilko

Смежные вопросы