Search code examples
phplocalefacebook-fql

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


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?


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.