2012-02-14 112 views
1

当用户通过Facebook注册我的网站时。使用Facebook身份验证API返回“注册”按钮旁边的“3位朋友已注册”。注册时获取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的哪些部分对此有用。

+0

基于以下DNCS的回答谈话拍摄,这听起来真的像一个“plz向我德codez”。 Stack上的人不喜欢那些用“plz send me teh codez”哭泣的人。所以我认为你已经得到了你将要得到的所有帮助。如果有人帮助你,我会很惊讶。 – CoderFromOuterSpace 2012-02-14 21:28:11

回答

2

一旦该用户接受了您的应用的权限,您可以拨打/me/friends以获取朋友列表,然后您可以通过查看installed属性的列表来解析该列表,以确定该朋友是否是您的应用用户之一。

的另一种方式,这两个因为只有一个通话以及来电后无需解析的更好,是使用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

编辑

如何运行FQL代码的PHP示例。从http://developers.facebook.com/docs/reference/fql/

<?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 '</pre>'; 

    // Run 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); 

    //display results of fql multiquery 
    echo '<pre>'; 
    print_r("multi query results:"); 
    print_r($fql_multiquery_obj); 
    echo '</pre>'; 
?> 
+0

谢谢你的帮助。说实话,我需要看一个如何实现的例子。 (我只是在学习),我真的不知道如何或在哪里使用fql。 – Modelesq 2012-02-14 19:02:29

+1

我的确给出了一个使用FQL的例子,我为你写了**完整的语句**。有关如何调用此FQL语句的示例,请参阅http://developers.facebook.com/docs/reference/api/。另请参阅http://developers.facebook.com/docs/reference/fql/了解有关FQL的更多信息。有很多很好的示例代码。 – DMCS 2012-02-14 19:05:38

+0

对不起应该提到我没有实现PHP。试图找到使用Django/Python的案例。似乎很容易与PHP,但唉!我坚持我使用的是什么。 – Modelesq 2012-02-14 19:22:13