Facebook FQL user table `sex` field : how to return male/female even the user is using different locale?

StackOverflow https://stackoverflow.com/questions/1594871

  •  22-09-2019
  •  | 
  •  

Question

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?

Was it helpful?

Solution

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.

OTHER TIPS

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.

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.

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';
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top