【问题标题】:Can I query for an optional field in the Facebook Graph API?我可以在 Facebook Graph API 中查询可选字段吗?
【发布时间】:2016-03-23 03:09:13
【问题描述】:

我有用户和 Facebook 页面的 OAuth2 访问令牌,但我的数据库中没有存储类型区别。我希望能够使用相同的 Graph API 查询获取有关用户/页面的基本信息 - 但对于用户,我希望在此基础上获取电子邮件字段。

  1. GET v2.5/me?fields=name,email // 用户令牌

    成功。

  2. GET v2.5/me?fields=name,email // 页面令牌

    错误。 (#100) Tried accessing nonexisting field (email) on node type (Page)

由于我不知道令牌属于用户还是页面,我无法轻松地从查询中删除,email 字段。有什么方法可以指定“可选”email 字段,所以我没有收到上述错误?

P.S.:目前,我会进行第二次请求,以防 ,email 导致错误。

【问题讨论】:

    标签: facebook facebook-graph-api graphql


    【解决方案1】:

    不,如果您请求的字段在您请求的对象类型上不存在,API 将失败 - 如果它不存在 [并且直到最近才出现],那么就会出现一整类错误这是由请求不存在字段的人引入的,包括通过拼写错误

    如果您在访问 ID 时不知道 ID 是什么类型的对象,那么您的应用程序如何检索和存储其数据可能存在其他问题 - 对于本示例,您应该使用元数据 (@987654322 @) 或 Facebook's Debug Tool 清理哪些令牌是用户令牌,哪些是页面令牌以及它们用于哪个页面或用户 - 一旦你知道,存储该信息,并在将来使用它 - 如果直接使用 API 并检查元数据,请在包含元数据时检查响应中的 type,对于用户或页面令牌,它将是 'user' 或 'page'

    您的应用确实不应该保存页面令牌但不知道它们用于哪个页面,因为您需要页面管理员的用户访问令牌才能从 API 检索该令牌;我建议您在第一次保存页面令牌时以结构化的方式存储用户令牌和页面令牌,以避免将来出现这种混淆

    【讨论】:

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