Facebook FQL user table `sex` field : how to retur

2019-03-16 18:44发布

问题:

Situation:

my facebook application ( http://apps.facebook.com/mymagicmirror/ ) needed to detect user's gender, and then query opposite sex or male or female

FQL:

SELECT uid, name, pic, sex FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1='.$user_id.') and sex='male'

Problem: When the facebook user is using other locale, then the 'sex' field doesn't match 'male' and 'female' anymore. Instead, say in Chinese, the sex will become 男性 / 女性, and the FQL for where sex='male' will return zero results.

Any solution to query all male / female friends even if the facebook user is having locale other than english?

回答1:

Add one of the following functions to your facebookapi_php5_restlib.php file:

Function for users.getInfo:
from: http://forum.developers.facebook.com/viewtopic.php?pid=166745#p166745

public function &users_getInfo_en_US($uids, $fields) {
  return $this->call_method('facebook.users.getInfo',
    array('uids' => $uids, 'fields' => $fields, 'locale' => 'en_US'));
}

Then, you can call users_getInfo_en_US($user, array('sex'));


Functions for FQL:
from the link above but with pid=166866#p166866
One is for the en_US locale (from the post before it) and the other lets you pass in the locale you want to use, like so:

public function &fql_query_localized($query, $locale) 
{
  return $this->call_method('facebook.fql.query',
    array('query' => $query, 'locale' => $locale));
}

Then, just pass in the string 'en_US' for $locale.



回答2:

From http://forum.developers.facebook.com/viewtopic.php?pid=174065 :

Just pass english locale (en_US) to the API call and it should return you genders in english (male/female).

You may also find http://forum.developers.facebook.com/viewtopic.php?pid=166744 useful.



回答3:

In case someone's using Facebook AS3 API: to work out this issue, pass the "locale" as param to get gender info using en_US locale:

Facebook.api("/me",getMeHandler, {locale:'en_US'});

This will return english "male"/"female" values, not localized ones.



回答4:

You need to add &locale=en_US to your GET or POST request being sent by your API client. For example, if you are using the PHP client library provided by Facebook (the latest version released Nov. 2), then you simply need to modify the facebookapi_php5_restlib.php file's post_request function which begins on line 3316.

Replace line 3320:

$url_with_get = $this->server_addr . '?' . $get_string;

With this:

$url_with_get = $this->server_addr . '?' . $get_string . '&locale=en_US';