2012-02-14 113 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