【问题标题】:How to retrieve user country using facebook Graph API?如何使用 facebook Graph API 检索用户国家?
【发布时间】:2018-03-27 00:01:03
【问题描述】:

我想检索登录的用户国家,并将其插入到一个 div 中。 我成功地使用了用户名、性别和年龄范围,但不知何故我无法检索国家。 这是我的代码:

  function testAPI() {
console.log('Welcome!  Fetching your information.... ');
FB.api('/me?fields=name,email,gender,age_range,picture,country', function (response) {
  document.getElementById('status').innerHTML = response.name + ",";
  document.getElementById('status1').innerHTML = response.gender + ",";
  document.getElementById('status2').innerHTML = (response.age_range.min) + "-" + (response.age_range.min + 1) + " years old";
  document.getElementById('status3').innerHTML = response.country;
}

谢谢!

【问题讨论】:

标签: facebook-graph-api


【解决方案1】:

完成Lix所说的:

您只需调用一次 Graph API 即可完成此操作,方法是调用

/me?fields=name,email,gender,age_range,picture,location{location}

确实,user对象下的location对象是一个Page object,里面有一个Location object

所以,这会给你这样的东西:

"location": {
  "location": {
    "city": "Ramat Gan",
    "country": "Israel",
    "latitude": 32.0833,
    "longitude": 34.8167,
    "zip": "<<not-applicable>>"
  }
}

这样可以避免您对 Graph API 进行双重调用。

【讨论】:

  • location{location} 对我来说是新语法 - 我显然没有经常观察这些变化 - 你能否添加更多关于它的用法的解释?
  • 很抱歉,我不明白如何添加更多关于其用法的解释...您有什么不明白的地方吗?
  • 所以我知道我们在这里为“我”尝试了它,但我可以在那里提供用户的 ID 并得到相同的吗?
  • 我认为这 location{location} 是旧语法。如果有人在 2017 对此感到困惑,那么对我有用的是:location.fields(location)。有关详细信息,请参阅此主题:stackoverflow.com/a/29274998/2561091
  • 状态在哪里?
【解决方案2】:

我相信您要查找的参数是 location 而不是国家/地区。

/me?fields=name,email,gender,age_range,picture,location

为了查询这些数据,您需要您的用户授予您user_location permission.

这将为您提供用户提交字段的值 - 请注意,此参数可能并不总是被填充,因为它取决于实际提交此信息的用户 - 如果他们没有提供 - 您将无法检索它.

对象看起来像这样:

  "location": {
    "id": "112604772085346",
    "name": "Ramat Gan"
  },

一旦您有了位置对象(很可能是一个页面),您就可以查询该对象以检索国家:

/112604772085346?fields=location

这将为您提供更多信息,包括国家/地区。

{
  "location": {
    "city": "Ramat Gan",
    "country": "Israel",
    "latitude": 32.0833,
    "longitude": 34.8167,
    "zip": "<<not-applicable>>"
  },
  "id": "112604772085346"
}

【讨论】:

  • 看看vchatbot's answer,@Idan - 看起来有一种方法可以做到这一点,只需对 API 的一个请求 - 好多了:P
  • 可以在facebook获取国家的ISO代码吗? en.wikipedia.org/wiki/ISO_3166-1
  • @user1253414 - 我不认为 Facebook 通过 ISO 代码提供国家/地区。您可能需要使用额外的步骤来转换这些 - 也许这样的事情会有所帮助 - github.com/lukes/ISO-3166-Countries-with-Regional-Codes
  • @Lix 回复您的评论,尽管来源很好,但我发现 40 个左右不提供国家名称。因此,仅通过名称匹配是一项棘手的工作。
【解决方案3】:

Fb API 中的字段现在可以连接,因此,您需要详细的用户位置信息:

scope="public_profile,user_location"

fields="name,location{location{country, country_code, city, city_id, latitude, longitude, region, region_id, state, street, name}}"

【讨论】:

  • 错误:尝试访问不存在的字段(user_location)
【解决方案4】:

v2.11 查询:

/me?fields=hometown,location

权限:

user_hometown
user_location

结果:

{
  "hometown": {
    "id": "XXXXREDACTED",
    "name": "Manila, Philippines"
  },
  "location": {
    "id": "XXXXREDACTED",
    "name": "Manila, Philippines"
  },
  "id": "XXXXREDACTED"
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多