我正在使用他们的Graph API开发一个Facebook应用程序 . 我以前使用不推荐使用的REST API开发了一个应用程序 .
我遇到了一个问题,我无法检索用户的国家,只检索他们的“位置” - 这只是组合格式的城市和州/地区(例如'Houston,Texas') .
如何使用Graph API检索用户的国家/地区?如果这不可能直接实现,那么可能有什么办法可以实现这一目标?
https://api.facebook.com/method/fql.query?query=SELECT%20current_location%20FROM%20user%20WHERE%20uid=4&access_token=YOUR_ACCESS_TOKEN
会给你 :
<?xml version="1.0" encoding="UTF-8"?> <fql_query_response xmlns="http://api.facebook.com/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" list="true"> <user> <current_location> <city>Palo Alto</city> <state>California</state> <country>United States</country> <zip/> <id>104022926303756</id> <name>Palo Alto, California</name> </current_location> </user> </fql_query_response>
我只能看到fb上稳定的东西是FQL
使用此处描述的http://developers.facebook.com/docs/reference/fql/表来获取您需要的任何信息 - graph api还不是很好
我发现的一个解决方案,仅仅是一种解决方法,就是使用GeoNames API - http://www.geonames.org/export/web-services.html
使用类似的东西:
http://api.geonames.org/search?q=houston%2C%20texas&featureClass=P&username=myusername
返回xml对象中的结果,该国家/地区作为数据的一部分 .
我对这个解决方案并不是特别满意,因为它为我的应用程序增加了一些不必要的复杂性 - 此次免费服务的请求仅限于每小时2000次和每天30,000次 .
使用php sdk:
require'facebook.php'; $ facebook = new Facebook(array('appId'=>'APPID','secret'=>'APPSECRET','cookie'=> true,));
然后请求签名请求:
$ signed_request = $ facebook-> getSignedRequest();$ country = $ signed_request [“user”] [“country”];
现在$ country有一个字符串,例如美国的“us”和英国的“uk”等 .
这是一个很好的问题 .
问题是在facebook下运行的任何应用程序必须通过facebook服务器 - fb代理,因此你获得的IP不是访问者的IP而是facebook的服务器而是没有用 .
我还没有看到任何解决方案,除了从他的 Profiles 中获取用户的国家/地区,只有当用户公开或授权其用户时,才能再次使用该国家/地区 .
这里是您可能想要查看的有用链接:
你应该这样试试:
/* make the API call */ [[FBRequest requestForMe] startWithCompletionHandler:^(FBRequestConnection *connection, NSDictionary<FBGraphUser> *user, NSError *error) { if (!error) { self.countryName = [[[user objectForKey:@"location"] valueForKey:@"name"] componentsSeparatedByString:@", "][1]; self.countryCode = [self getCountryCodeForCountry:STUser.countryName]; } }]; -(NSString *)getCountryCodeForCountry:(NSString*)country { NSMutableArray *countries = [self getCountries]; NSArray *countryCodes = [NSLocale ISOCountryCodes]; NSDictionary *codeForCountryDictionary = [[NSDictionary alloc] initWithObjects:countryCodes forKeys:countries]; return [codeForCountryDictionary objectForKey:country]; } +(NSMutableArray *)getCountries { NSMutableArray *countries = [NSMutableArray array]; NSArray *countryCodes = [NSLocale ISOCountryCodes]; countries = [NSMutableArray arrayWithCapacity:[countryCodes count]]; for (NSString *countryCode in countryCodes) { NSString *identifier = [NSLocale localeIdentifierFromComponents:[NSDictionary dictionaryWithObject: countryCode forKey: NSLocaleCountryCode]]; NSString *country = [[NSLocale currentLocale] displayNameForKey: NSLocaleIdentifier value: identifier]; [countries addObject: country]; } return countries; }
使用图形API / me?fields = hometown它将返回你,例如“布拉格,捷克共和国”我相信你可以用针'爆炸弦','最后一个元素应该是国家
对于iframe应用程序,FB服务器不会隐藏ip,这意味着您可以进行IP地址查找
http://phpweby.com/software/ip2country
脚本对我来说有点儿麻烦,但是做了这个工作 .
您可以使用FQL查询按国家/地区查看关注者的生命周期数(按照您对FB页面的喜欢) . 使用标记化的会话值设置JSON查询,并通过PHP发送FQL查询,其中包含您要定位的页面的object_ID和生命周期 . 选择指标,并将指标设置为page_fans_country - 并将数据转储到CSV文件中 . 您应该按国家/地区代码(多行)返回总终身粉丝列表(按喜欢) . 设置数据透视表以获取跨多个数据页的聚合索引,并按国家/地区代码排名 . 这是FQL查询的示例:
SELECT度量,值FROM洞察WHERE object_id = [您的页面ID在此处] AND metric ='page_fans_country'AND_time = end_time_date('2013-04-28')AND period = period('lifetime')
Valerchik发布的答案确实是正确的,但万一有人会寻找PHP解决方案,那么我最终会得到这样的结果:
$token = Yii::app()->facebook->getAccessToken(); $fqlRequest = 'https://api.facebook.com/method/fql.query?query=' . 'SELECT%20' . $fqlAttributeName . '%20FROM%20user%20WHERE%20' . 'uid=' . $fbUserId . '&access_token=' . $token; $ret = file_get_contents($fqlRequest); if (!empty($ret)) { ...
可以在此处找到所有用户属性的列表:https://developers.facebook.com/docs/reference/fql/user/
我希望它会帮助别人:)
根据Facebook的documentation,你可以从用户的 locale 获得2个字母的ISO 3166-1国家代码 .
locale
Facebook语言环境分别遵循ISO语言和国家/地区代码,以下划线连接 . 基本格式为'll_CC'',其中''ll''是双字母语言代码,''CC''是双字母国家代码 . 例如,'en_US'代表美国英语 .
示例FQL:
SELECT locale FROM user WHERE uid = me()
响应:
{ "data": [ { "locale": "en_US" } ] }
10 回答
https://api.facebook.com/method/fql.query?query=SELECT%20current_location%20FROM%20user%20WHERE%20uid=4&access_token=YOUR_ACCESS_TOKEN
会给你 :
我只能看到fb上稳定的东西是FQL
使用此处描述的http://developers.facebook.com/docs/reference/fql/表来获取您需要的任何信息 - graph api还不是很好
我发现的一个解决方案,仅仅是一种解决方法,就是使用GeoNames API - http://www.geonames.org/export/web-services.html
使用类似的东西:
返回xml对象中的结果,该国家/地区作为数据的一部分 .
我对这个解决方案并不是特别满意,因为它为我的应用程序增加了一些不必要的复杂性 - 此次免费服务的请求仅限于每小时2000次和每天30,000次 .
使用php sdk:
然后请求签名请求:
现在$ country有一个字符串,例如美国的“us”和英国的“uk”等 .
这是一个很好的问题 .
问题是在facebook下运行的任何应用程序必须通过facebook服务器 - fb代理,因此你获得的IP不是访问者的IP而是facebook的服务器而是没有用 .
我还没有看到任何解决方案,除了从他的 Profiles 中获取用户的国家/地区,只有当用户公开或授权其用户时,才能再次使用该国家/地区 .
这里是您可能想要查看的有用链接:
你应该这样试试:
使用图形API / me?fields = hometown它将返回你,例如“布拉格,捷克共和国”我相信你可以用针'爆炸弦','最后一个元素应该是国家
对于iframe应用程序,FB服务器不会隐藏ip,这意味着您可以进行IP地址查找
http://phpweby.com/software/ip2country
脚本对我来说有点儿麻烦,但是做了这个工作 .
您可以使用FQL查询按国家/地区查看关注者的生命周期数(按照您对FB页面的喜欢) . 使用标记化的会话值设置JSON查询,并通过PHP发送FQL查询,其中包含您要定位的页面的object_ID和生命周期 . 选择指标,并将指标设置为page_fans_country - 并将数据转储到CSV文件中 . 您应该按国家/地区代码(多行)返回总终身粉丝列表(按喜欢) . 设置数据透视表以获取跨多个数据页的聚合索引,并按国家/地区代码排名 . 这是FQL查询的示例:
SELECT度量,值FROM洞察WHERE object_id = [您的页面ID在此处] AND metric ='page_fans_country'AND_time = end_time_date('2013-04-28')AND period = period('lifetime')
Valerchik发布的答案确实是正确的,但万一有人会寻找PHP解决方案,那么我最终会得到这样的结果:
可以在此处找到所有用户属性的列表:
https://developers.facebook.com/docs/reference/fql/user/
我希望它会帮助别人:)
根据Facebook的documentation,你可以从用户的
locale
获得2个字母的ISO 3166-1国家代码 .示例FQL:
响应: