情况:
我的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用户使用其他语言环境时,“性别”字段不再与“男性”和“女性”匹配。相反,用汉语说,性别将变成男性/女性,而sex ='male'的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:要解决此问题,请使用en_US语言环境将“语言环境”作为参数来获取性别信息:
Facebook.api(“ / me”,getMeHandler,{locale:'en_US'});
这将返回英文的“ male” /“ female”值,而不是本地化的值。
您需要在API客户端发送的GET或POST请求中添加&locale=en_US
。例如,如果您使用的是Facebook提供的PHP客户端库(11月2日发布的最新版本),则只需修改facebookapi_php5_restlib.php
文件的post_request
函数,该函数从第3316行开始。
替换第3320行:
$url_with_get = $this->server_addr . '?' . $get_string;
使用此:
$url_with_get = $this->server_addr . '?' . $get_string . '&locale=en_US';