Постепенный доступ к Facebook

ОБНОВЛЕНИЕ: Facebook offline_access разрешение устарело. Для получения дополнительной информации обратитесь к официальной документации .
У вас будет до 1 мая 2012 года, с которой эта настройка будет отключен. обратитесь к
"Дорожная карта разработчика" для получения дополнительной информации.


После поиска буквально 1 день на facebook и google для обновления и работы, чтобы сделать что-то вроде просто:

Я ищу пошаговое объяснение, чтобы получить автономный_запуск для пользователя для приложения facebook, а затем использовать этот (сеансовый ключ) для извлечения в автономном режиме, а не из друзей друзей и профилей браузера.

Предпочтительно делать это в API-интерфейсе Fb.

Спасибо.

И да, я проверил вики-страницу facebook.

Обновление: кто-нибудь?

это: http://www.facebook.com/authorize.php?api_key=<api-key>&v=1.0&ext_perm=offline_access дает мне offline_Access, однако как получить session_key?

Почему в facebook нет простой документации, я имею в виду, что там работают около 600 человек?

По-видимому, такой же вопрос: Получение функции offline_access для работы с Facebook Не отвечает, как получить ключ сеанса

Изменить: я все еще придерживаюсь этого. Я думаю, что никто не пробовал такой пакетный доступ еще...

Ответ 1

С новым API-интерфейсом Facebook Graph все стало немного проще, но гораздо менее документировано. Вот что я сделал, чтобы иметь возможность загружать свои настенные посты как меня со стороны сервера (не в сеансе браузера) php script:

  • создайте приложение facebook, если у вас еще нет возможности использовать этот проект http://www.facebook.com/developers/apps.php#!/developers/createapp.php - и установите режим песочницы/разработчика! @Расширенные настройки > Режим "Песочница" > "Включить" (разрешено только разработчикам вашего приложения). Вам потребуется идентификатор приложения (APP_ID) и секретный ключ (SECRET_KEY), которые перечислены в сводке учетной записи разработчика этого приложения, но не старый ключ API.

  • загрузите в свой браузер, уже выполнив вход в fb в качестве учетной записи, которую вы хотите подключить к серверной стороне, и нажмите "разрешить" для запрашиваемых разрешений: https://graph.facebook.com/oauth/authorize?client_id=APP_ID&scope=offline_access,read_stream&redirect_uri=http://www.facebook.com/connect/login_success.html

  • скопируйте параметр "code" из результирующей строки запроса url, используйте это в: https://graph.facebook.com/oauth/access_token?client_id=APP_ID&redirect_uri=http://www.facebook.com/connect/login_success.html&client_secret=APP_SECRET&code=CODE_FROM_2 И скопируйте правую часть access_token = в результирующем тексте страницы, который будет находиться в структуре: APP_ID | HEXNUM-USER_ID | WEIRD_KEY

  • Теперь загрузите либо из графика api, либо в классический rest api, используя токен доступа клятвы, который вы получили ala (где SOURCE_ID - это идентификатор facebook для пользователя/группы/независимо от того, что вы ищете):

    <?php
    $stream = json_decode(file_get_contents("https://api.facebook.com/method/stream.get?source_ids=SOURCE_ID&access_token=ACCESS_TOKEN&format=json"));
    var_dump($stream);
    // this one gives a 500 internal server error from the http get if any of the fields are invalid, but only in php, not when loaded in a browser... weird.
    $feed = json_decode(file_get_contents("https://graph.facebook.com/SOURCE_ID/feed?fields=id,from,created_time,link,type&access_token=ACCESS_TOKEN"));
    var_dump($feed);
    ?>
    

Отмечая, что график api и rest api возвращают не только разные структуры, но и другую информацию - поэтому здесь я предпочитаю результаты из остального api (первый), хотя мне нравится ограничивать поля в новый график api (второй).

Посмотрите http://developers.facebook.com/docs/authentication/ в разделах "Запрос расширенных разрешений" и "Аутентификация пользователей в веб-приложении" для официального (редкого ) подробнее.

Если вы хотите сделать это регулярно, то есть программно, здесь автоматическая версия шагов 2 + 3:

Поместите это на свой веб-сервер как "facebook_access_token.php":

<?php $token = explode('=', file_get_contents("https://graph.facebook.com/oauth/access_token?client_id=APP_ID&redirect_uri=http://$_SERVER[SERVER_NAME]$_SERVER[PHP_SELF]&client_secret=APP_SECRET&code=" . 
(get_magic_quotes_gpc() ? stripslashes($_GET['code']) : $_GET['code']))); 
echo $token[1]; 
// store this, the access token, in the db for the user as logged in on your site -- and don't abuse their trust! ?>

И прямые пользователи в своих браузерах: https://graph.facebook.com/oauth/authorize?client_id=APP_ID&scope=offline_access,read_stream&redirect_uri=http://www.example.com/facebook_access_token.php

Ответ 2

Если вы хотите, наконец, захотеть использовать PHP, с PHP PHP SDK v3 (см. в github), это довольно просто. Чтобы зарегистрировать кого-либо с разрешением offline_access, вы запрашиваете его при создании URL-адреса входа. Вот как вы это делаете.

Получить токен доступа к Интернету

Сначала вы проверяете, зарегистрирован ли пользователь или нет:

require "facebook.php";
$facebook = new Facebook(array(
    'appId'  => YOUR_APP_ID,
    'secret' => YOUR_APP_SECRET,
));

$user = $facebook->getUser();

if ($user) {
  try {
    $user_profile = $facebook->api('/me');
  } catch (FacebookApiException $e) {
    $user = null;
  }
}

Если это не так, вы создаете URL-адрес "Войти с Facebook" с запросом разрешения offline_access:

if (!$user) {
    $args['scope'] = 'offline_access';
    $loginUrl = $facebook->getLoginUrl($args);
}

И затем отобразите ссылку в шаблоне:

<?php if (!$user): ?>
    <a href="<?php echo $loginUrl ?>">Login with Facebook</a>
<?php endif ?>

Затем вы можете получить токен доступа и сохранить его. Чтобы получить его, звоните:

if ($user) {
    $token = $facebook->getAccessToken();
    // store token
}

Использовать токен доступа к сети

Использовать токен доступа к сети, когда пользователь не выполнил вход:

require "facebook.php";
$facebook = new Facebook(array(
    'appId'  => YOUR_APP_ID,
    'secret' => YOUR_APP_SECRET,
));

$facebook->setAccessToken("...");

И теперь вы можете совершать вызовы API для этого пользователя:

$user_profile = $facebook->api('/me');

Надеюсь, что это поможет!

Ответ 3

Я сделал учебник не так давно в своем блоге. Он не требует никаких плагинов или чего-то еще, это делается на PHP, и я его протестировал. Я сделал это в основном для стеновых сообщений, но после аутентификации вы можете использовать любую функцию, которую хотите.

EDIT: сообщение больше не существует. FB API обновляется в любом случае...

Ответ 4

Вы хотите начать с чтения раздела Server Side Flow в руководстве по проверке подлинности. В принципе, начните с этого URL:

https://www.facebook.com/dialog/oauth

Добавьте свой идентификатор приложения (здесь) к URL-адресу, который на языке OAuth равен client_id:

https://www.facebook.com/dialog/oauth?client_id=184484190795

Добавьте offline_access permission или scope в языке OAuth:

https://www.facebook.com/dialog/oauth?client_id=184484190795&scope=offline_access

Добавьте redirect_uri, где Facebook будет перенаправлен после того, как пользователь выполнит шаг авторизации ( "Разрешить" или "Не разрешать", просмотрите документы для формата ответа или просто попробуйте):

https://www.facebook.com/dialog/oauth?client_id=184484190795&scope=offline_access&redirect_uri=https%3A%2F%2Ffbrell.com%2Fecho

Если вы следуете ссылке выше, она приведет вас к приглашению, а затем, нажав кнопку "Разрешить/не разрешать", вам понадобится на страницу, на которой "echos" возвращает запрос. Если вы нажмете "Разрешить", вы вернете параметр code назад, который вы можете обменять на access_token, сделав HTTP-запрос на Facebook со своего сервера, что делает что-то в соответствии с этим:

https://graph.facebook.com/oauth/access_token?client_id=184484190795&client_secret=XXX&code=YYY&redirect_uri=ZZZ

Вам нужно передать свой client_id, ваш секрет приложения должен быть передан как client_secret, тот же redirect_uri, как вы использовали ранее, и code, который вы получили как ответ. Это вернет offline_access enabled access_token для этого пользователя.

Следует иметь в виду, что даже если вы запрашиваете offline_access, ваше приложение должно изящно обрабатывать недопустимые или истекшие access_tokens, поскольку это может произойти по разным причинам.

Ответ 5

Я знаю два решения: Java и JavaScript

Java: а. сервлет кода (не забудьте импортировать соответствующие банки):

String url="http://www.facebook.com/login.php?api_key=YOUR_API_KEY&v=1.0";
url+="&fbconnect=true&return_session=true&req_perms=offline_access,status_update";
url+="&next=http://YOUR_FaceBookCallback_SERVLET"; 
response.sendRedirect(url);
return;

//Вам будет предложено войти в facebook и разрешить расширенные разрешения

б. Не забудьте определить свой ConnectUrl (в приложении для своей учетной записи facebook) как http://YourUrlFromWhereDoYouTurnToTheServletAbove

с. сделайте еще один сервлет: YOUR_FaceBookCallback_SERVLET (см. выше) с помощью этого кода:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String session = request.getParameter("session");
//from this string you can obtain your infinite session_key.In order to do this, parse this string as JSON.
//Save it in the database or in the other data storage  
response.sendRedirect(ThePlaceThatYouWant);}

д. Используйте эту секретную session_key следующим образом:

FacebookXmlRestClient  client = new FacebookXmlRestClient(YOUR_API_KEY, FACEBOOK_APPLICATION_SECRET,SECRET_SESSION_KEY);
client.setIsDesktop(false); 
client.users_setStatus("YourMessage");

Если кто-то хочет, чтобы решение JavaScript (большая дыра в безопасности), напишите мне

Ответ 6

Я выяснил, как "восстановить" бесконечный ключ сеанса доступа без доступа к сети после многократного расщепления волос, некоторых проб и ошибок и размышления обо всех других продуктивных способах, которые я мог бы провести в это время... согласен, что документация на facebook может быть намного лучше

1) Если вы используете facebook-java-api.., то посмотрите на демонстрационный сайт facebook для "мобильного Интернета" о том, как отформатировать URL-адрес для запроса автономного доступа
http://itsti.me/index.php

<a href="http://www.facebook.com/connect/prompt_permissions.php?api_key=YOUR_API_KEY&ext_perm=publish_stream%2Coffline_access&next=http%3A%2F%2Fmysite%2Ffacebookconnect&cancel=http%3A%2F%2Fmysite%2Fhome&display=wap"><img alt="Connect" src="http://static.ak.fbcdn.net/images/fbconnect/login-buttons/connect_light_medium_long.gif" id="fb_login_image"/></a>

2) Что касается того, как получить сеансовый сеансовый ключ из сеанса... Трюк: когда facebook перенаправляет пользователя на "следующий" URL сразу после предоставления автономного доступа, вы должны снова получить сеанс facebook. этот новый сеанс будет иметь бесконечный ключ сеанса.
вот пример для мобильной сети... вы должны быть в состоянии понять это для обычного веб-сайта. auth_token используется только для мобильных веб-сайтов.. вам может не понадобиться это для обычного веб-сайта

FacebookJsonRestClient fbc = new FacebookJsonRestClient(MY_API_KEY, SECRET, sessionKey);
String auth_token = request.getParameter("auth_token");
System.out.println("infinite session kEY = " +   fbc.auth_getSession(auth_token));

Ответ 7

Для доступа к сеансу мне пришлось использовать loginurl, предоставленный facebook php api, поскольку, как представляется, есть 2/3 дополнительных переменных, которые он отправляет в запросе auth, включая return_session и session_version. Также новый php5-sdk отправляет запрос на login.facebook.com вместо https://graph.facebook.com/oauth/authorize. Вот как я это разработал:

$b=new facebook(array('appId'=>APP_ID,'secret'=>SECRET))

Запросить аутентификацию:

$facebook->getLoginUrl(array('next'=>$redirect_uri,'req_perms'=>$scope))

Rember включить offline_access в $scope. После того, как вы перенаправлены на эту страницу (после входа в fb и предоставления разрешений), вы получите $_GET ['session'] в json-формате.

Просто храните его везде, где хотите (я делаю это в базе данных). В следующий раз, когда вы захотите что-то сделать с учетной записью пользователя, просто используйте следующее:

$session = json_decode($db->query("SELECT ..."));//get session from db $this->facebook->setSession($session);

После этого любые запросы, которые api делает, будут через этот доступ пользователя.

Самое худшее в текущем графике facebook api (исправьте меня, если я ошибаюсь), что текущий api пренебрегает сеансом (который, кажется, остается из старого api) во всей его документации, и говорит только о access_token. Но текущий api (php5-sdk) не имеет возможности отправлять фактический запрос, используя только access_token. Если есть функция, чтобы начать сеанс сеанса, используя только access_token, я не знаю об этом.