Получить Facebook друзей при регистрации - PullRequest
1 голос
/ 14 февраля 2012

Когда пользователь регистрируется на моем сайте через Facebook. Он возвращает «3 друга зарегистрированы» рядом с кнопкой «Зарегистрироваться» с API аутентификации Facebook.

def facebook_authenticated(request):
    try:
        code = request.GET['code']
    except:
        return HttpResponseRedirect('/?error=facebook')

    redirect_url = "yaddayadaa"

    args = dict(client_id=settings.FACEBOOK_API_ID, redirect_uri=redirect_url)
    args["client_secret"] = settings.FACEBOOK_API_SECRET
    args["code"] = code

    response = cgi.parse_qs(urllib.urlopen(
        "https://graph.facebook.com/oauth/access_token?" +
        urllib.urlencode(args)).read())
    access_token = response["access_token"][-1]

    graph_url = "https://graph.facebook.com/me?access_token="+access_token

    profile = json.load(urllib.urlopen(graph_url))

    member_id = str(profile['id'])

    try:
        new_user = FacebookProfile.objects.get(facebook_id=member_id).user
        fbprofile = FacebookProfile.objects.get(user=new_user)
        if access_token != fbprofile.access_token:
            fbprofile.access_token = access_token
            fbprofile.save()
    except (User.DoesNotExist, ObjectDoesNotExist):
        return HttpResponseRedirect('/?error=facebook')

Как бы я заполучил 3 пользователей и магазин, чтобы зарегистрированный пользователь мог связаться с ними на моем сайте?

Я не нашел примеров того, как этого добиться, или какие части API полезны для этого.

1 Ответ

2 голосов
/ 14 февраля 2012

Как только этот пользователь принимает разрешения для вашего приложения, вы можете вызвать /me/friends, чтобы получить список друзей, а затем проанализировать этот список, просмотрев свойство installed, чтобы определить, является ли этот друг одним из ваших приложений.users.

Другим способом, который лучше всего использовать как один вызов, а не как разбор после вызова, будет использование FQL для запроса списка друзей

fql?q=SELECT uid, name, is_app_user FROM user WHERE uid IN (SELECT uid1 FROM friend WHERE uid2=me()) and is_app_user=1

EDIT

Пример PHP-кода для запуска кода FQL.Взято из http://developers.facebook.com/docs/reference/fql/

<code><?php
  $app_id = 'YOUR_APP_ID';
  $app_secret = 'YOUR_APP_SECRET';
  $my_url = 'POST_AUTH_URL';

  $code = $_REQUEST["code"];

 //auth user
 if(empty($code)) {
    $dialog_url = 'https://www.facebook.com/dialog/oauth?client_id=' 
    . $app_id . '&redirect_uri=' . urlencode($my_url) ;
    echo("<script>top.location.href='" . $dialog_url . "'</script>");
  }

  //get user access_token
  $token_url = 'https://graph.facebook.com/oauth/access_token?client_id='
    . $app_id . '&redirect_uri=' . urlencode($my_url) 
    . '&client_secret=' . $app_secret 
    . '&code=' . $code;
  $access_token = file_get_contents($token_url);

  // Run fql query
  $fql_query_url = 'https://graph.facebook.com/'
    . '/fql?q=SELECT+uid2+FROM+friend+WHERE+uid1=me()'
    . '&' . $access_token;
  $fql_query_result = file_get_contents($fql_query_url);
  $fql_query_obj = json_decode($fql_query_result, true);

  //display results of fql query
  echo '<pre>';
  print_r("query results:");
  print_r($fql_query_obj);
  echo '
';// Запустить fql multiquery $ fql_multiquery_url = 'https://graph.facebook.com/'.'fql? q = {"all + friends": "SELECT + uid2 + FROM + friend + WHERE + uid1 = me ()",'.'"my + name": "SELECT + name + FROM + user + WHERE + uid = me ()"}'.'&'.$ Access_token;$ fql_multiquery_result = file_get_contents ($ fql_multiquery_url);$ fql_multiquery_obj = json_decode ($ fql_multiquery_result, true);// вывод результатов fql multiquery echo '
';
  print_r("multi query results:");
  print_r($fql_multiquery_obj);
  echo '
';?>
...