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

から考えると、これは本当に「plzは私にTEH codezを送る」ように聞こえます。スタック上の人々は、 "plz send me teh codez"と叫ぶ人々が好きではありません。だから私は、あなたが得るすべての助けを得たと思う。もし誰かがあなたを助けてくれたら、私は驚くだろう。 – CoderFromOuterSpace

答えて

2

このユーザーがあなたのアプリへのアクセス許可を受け入れると、/me/friendsに電話して友人のリストを取得し、installedのプロパティを見てそのリストを解析して、その友だちがあなたのアプリユーザーの1人であるかどうかを判断できます。

もう一つの方法は、2のように一つだけの呼び出しだけでなく、コールの後には、構文解析のより良い、フレンドリストに

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を照会するFQLを使用することです

FQLコードを実行する方法のPHPの例。以下DNCSの答えで会話をもとに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

+1

私はFQLを使用して例を挙げましたが、あなたは**完全なステートメント**を書いています。このFQL文を呼び出す方法の例については、http://developers.facebook.com/docs/reference/api/を参照してください。 FQLの詳細についてはhttp://developers.facebook.com/docs/reference/fql/を参照してください。そこでそれを行うための素晴らしいサンプルコードがたくさんあります。 – DMCS

+0

申し訳ありませんが、私はPHPを実装していないと述べているはずです。 Django/Pythonを使用してケースを検索しようとしています。 phpではとても簡単ですが、悲しいことです。私は私が使っているものについている。 – Modelesq

関連する問題