首页 文章

Facebook Graph API - 如何获得用户所在国家/地区?

提问于
浏览
19

我正在使用他们的Graph API开发一个Facebook应用程序 . 我以前使用不推荐使用的REST API开发了一个应用程序 .

我遇到了一个问题,我无法检索用户的国家,只检索他们的“位置” - 这只是组合格式的城市和州/地区(例如'Houston,Texas') .

如何使用Graph API检索用户的国家/地区?如果这不可能直接实现,那么可能有什么办法可以实现这一目标?

10 回答

  • 0

    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还不是很好

  • -1

    我发现的一个解决方案,仅仅是一种解决方法,就是使用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次 .

  • 1

    使用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”等 .

  • 23

    这是一个很好的问题 .

    问题是在facebook下运行的任何应用程序必须通过facebook服务器 - fb代理,因此你获得的IP不是访问者的IP而是facebook的服务器而是没有用 .

    我还没有看到任何解决方案,除了从他的 Profiles 中获取用户的国家/地区,只有当用户公开或授权其用户时,才能再次使用该国家/地区 .

    这里是您可能想要查看的有用链接:

  • 0

    你应该这样试试:

    /* 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;
    }
    
  • 7

    使用图形API / me?fields = hometown它将返回你,例如“布拉格,捷克共和国”我相信你可以用针'爆炸弦','最后一个元素应该是国家

  • 1

    对于iframe应用程序,FB服务器不会隐藏ip,这意味着您可以进行IP地址查找

    http://phpweby.com/software/ip2country

    脚本对我来说有点儿麻烦,但是做了这个工作 .

  • 6

    您可以使用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')

  • 0

    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/

    我希望它会帮助别人:)

  • 1

    根据Facebook的documentation,你可以从用户的 locale 获得2个字母的ISO 3166-1国家代码 .

    Facebook语言环境分别遵循ISO语言和国家/地区代码,以下划线连接 . 基本格式为'll_CC'',其中''ll''是双字母语言代码,''CC''是双字母国家代码 . 例如,'en_US'代表美国英语 .

    示例FQL:

    SELECT locale FROM user WHERE uid = me()
    

    响应:

    {
      "data": [
        {
          "locale": "en_US"
        }
      ]
    }
    

相关问题