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?
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
.
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';