当用户通过Facebook注册我的网站时。它使用Facebook身份验证API返回“注册”按钮旁边的“3个朋友已注册”。
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 :(得分: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
修改强>
PHP如何运行FQL代码的示例。取自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>';
?>