Ситуация:
мое приложение 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 есть язык, отличный от английского?
Добавьте одну из следующих функций в файл 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
.
От http://forum.developers.facebook.com/viewtopic.php?pid=174065 :
Просто перейдите по английскому языку (en_US) к вызову API, и он должен вернуть вам полы на английском языке (мужчина / женщина).
Вы также можете найти http://forum.developers.facebook.com/viewtopic.php?pid=166744 полезно.
Если кто-то использует Facebook AS3 API: чтобы решить эту проблему, передайте «locale» в качестве параметра, чтобы получить информацию по полу, используя en_US locale:
Facebook.api («/ me», getMeHandler, {locale: 'en_US'});
Это вернет английские «мужские» / «женские» ценности, а не локализованные.
Вам нужно добавить &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';