Поле «пол» пользовательской таблицы Facebook FQL: как вернуть мужской/женский, даже если пользователь использует другую локаль?

Ситуация:

мое приложение facebook ( http://apps.facebook.com/mymagicmirror/ ), необходимое для обнаружения пол, а затем запрос противоположного пола, мужчины или женщины

FQL:

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

Проблема: когда пользователь facebook использует другую локаль, поле «пол» больше не соответствует «мужской» и «женский». Вместо этого, скажем, по-китайски, пол станет 男性 / 女性, а FQL для того, где секс='мужской', вернет нулевые результаты.

Любое решение для запроса всех друзей мужского и женского пола, даже если пользователь facebook имеет язык, отличный от английского?


person Unreality    schedule 20.10.2009    source источник


Ответы (4)


Добавьте в файл facebookapi_php5_restlib.php одну из следующих функций:

Функция для users.getInfo:
с: 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'));
}

Затем вы можете позвонить users_getInfo_en_US($user, array('sex'));


Функции для FQL:
из приведенной выше ссылки, но с pid=166866#p166866
Одна для локали en_US (из поста перед ней), а другая позволяет вам передать локаль, которую вы хотите использовать, вот так:

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

Затем просто передайте строку 'en_US' вместо $locale.

person ma11hew28    schedule 05.02.2010

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

Просто передайте английскую локаль (en_US) в вызов API, и он должен вернуть вам пол на английском языке (мужской/женский).

Вы также можете найти http://forum.developers.facebook.com/viewtopic.php?pid=166744 полезно.

person Richy B.    schedule 20.10.2009
comment
извините, пожалуйста, поправьте меня, если я ошибаюсь, предоставленная вами ссылка помогла исправить только «получить информацию о пользователе», но не исправить FQL .... поэтому сопоставление с where sex='male' по-прежнему не удается - person Unreality; 20.10.2009
comment
Я считаю, что если вы передадите языковой стандарт вызову API при вызове FQL, он затем переведет пол на мужской/женский, что позволит вашему FQL работать. Вы пробовали это так? - person Richy B.; 20.10.2009
comment
как передать локаль вызову API во время вызова FQL? не могли бы вы дать мне пример кода? огромное спасибо - person Unreality; 21.10.2009

Если кто-то использует Facebook AS3 API: чтобы решить эту проблему, передайте «локаль» в качестве параметра, чтобы получить информацию о поле, используя локаль en_US:

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

Это вернет английские «мужские»/«женские» значения, а не локализованные.

person Rosty    schedule 10.11.2010

Вам нужно добавить &locale=en_US к запросу GET или POST, отправляемому вашим клиентом API. Например, если вы используете клиентскую библиотеку PHP, предоставленную Facebook (последняя версия выпущена 2 ноября), вам просто нужно изменить функцию post_request файла facebookapi_php5_restlib.php, которая начинается со строки 3316.

Замените строку 3320:

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

С этим:

$url_with_get = $this->server_addr . '?' . $get_string . '&locale=en_US';
person defines    schedule 27.11.2009
comment
Не знаю, что вам сказать, я вообще не смог воспроизвести эту проблему. Когда я запрашиваю, я получаю данные без проблем. - person defines; 05.02.2010
comment
В примере опечатка: вместо '&local=en_US' я думаю должно быть '&locale=en_US' - person Eric Schrijver; 24.04.2014