通过开放图形API获取FB页面的对话

时间:2014-06-14 09:55:12

标签: facebook facebook-graph-api

我已经注册了一个Facebook-App并创建了一个具有我需要的所有权限的令牌。其中

  • manage_pages
  • read_mailbox
  • read_page_mailbox

现在我想使用Facebook开放图形API从我自己的FB页面读取一些数据。我想阅读页面收到的私信以及我代表我的网页上的一些粉丝发送的私信。

我知道我可以通过发送这样的http请求来获取所有信息:

https://graph.facebook.com/{page-id}/{object}?access_token={token}

其中{something}是实际值的占位符。为了给出一个工作示例,我可以通过发送此请求来阅读我页面上显示的帖子:

https://graph.facebook.com/141928949155955/posts?access_token={my secret token}

正如我所说,这项工作正常,因为两年多了。 (我只需要不时更新令牌)


但现在我想阅读该页面和它的粉丝之间的私人谈话。我想提取所有会话并将其插入电子表格中。我想做一次,也许再过一两年。我可以通过复制和粘贴为每个对话从浏览器窗口手动提取它们,但由于会话太多,我认为花费更少的时间让程序为我做。

如果我理解Facebook文档是否正确,那么我必须使用的关键字必须是conversations。但我明白了:

https://graph.facebook.com/141928949155955/conversations?access_token={secret token}  

{
   "error": {
      "message": "(#210) Subject must be a page.",
      "type": "OAuthException",
      "code": 210
   }
}

但是141928949155955 一个页面。我不知道自己做错了什么。我必须发送哪些正确的请求来接收页面私人会话?


编辑(6月16日):

我可以通过此请求阅读我的个人对话:

https://graph.facebook.com/me/conversations?access_token={secret token}  

但我不想阅读我作为一个人所做的对话。我需要我的一个页面。

3 个答案:

答案 0 :(得分:12)

我找到了解决问题的方法。 (谢谢kush,你的回答很有帮助,但我想补充更多信息)

我的问题是我误解了错误信息"主题必须是一个页面。"我认为"主题"是指查询字符串中的一部分。但它指的是令牌!像" Token这样的消息必须是页面访问令牌"在两年多的时间里,本来可以节省我不必要的搜索周!你如何使用像#34;主题"当你无处定义什么"主题"是

因此查询字符串不是错误的。这是令牌的类型!

现在这里是解决问题的完整程序(获取页面访问令牌)


第1步

为您的应用获取用户访问令牌,稍后您可以使用该令牌获取页面访问令牌

  • 1.1转到图API API资源管理器https://developers.facebook.com/tools/explorer/
  • 1.2从"应用程序中选择您的应用程序:"下拉式菜单。
  • 1.3点击"获取访问令牌"。
  • 1.4从标签"扩展权限"选择" manage_pages"。
    • 此外,选择页面访问令牌所需的所有权限。 (虽然现在你不创建一个页面访问令牌,只是一个用户访问令牌)
  • 1.5点击"获取访问令牌"。
  • 1.6单击"确定"授予权限。

在现场"访问令牌:"你现在找到一个用户访问令牌的令牌。它不是页面访问令牌!此令牌拥有管理页面所需的所有权限(包括权限" manage_pages"),但您无法使用它来管理页面,因为它是错误类型的令牌。您只需要出于以下原因需要此令牌:创建新令牌。

第2步

使用您刚创建的用户访问令牌创建页面访问令牌

  • 2.1输入" me / accounts"在查询字段中
  • 2.2点击"提交"

您会看到一个页面列表,每个页面都有一个" access_token" (现在是一个页面访问令牌)。这个令牌中的每一个都继承了您在调用" me / accounts"时使用的用户访问令牌的权限。

此页面访问令牌在一小时后过期。


补充

如果您希望页面访问令牌永不过期,请按以下方式执行操作:

  • A.1转到https://developers.facebook.com
  • A.2从下拉菜单" Apps"选择您要使用的应用程序。
  • A.3点击"显示"在现场" App Secret" (您需要输入您的Facebook密码)
  • A.4在浏览器中打开一个新选项卡,然后从上面执行步骤1.1到1.6以生成短暂的用户访问令牌
  • A.5在浏览器中打开第三个选项卡,然后在浏览器的地址栏中输入此字符串:
    • https://graph.facebook.com/v2.0/oauth/access_token?grant_type=fb_exchange_token&client_id={app-id}&client_secret={app-secret}&fb_exchange_token={short-lived-token}(不要输入!)如果从一个浏览器选项卡切换到另一个浏览器选项卡时此字符串消失,请使用任何文本编辑器组合字符串并稍后将其复制到地址字段中。
  • A.6在此字符串中,使用仍显示您的Apps数据的浏览器标签中的值替换{app-id}{app-secret}
  • A.7将{short-lived-token}替换为您在字段中找到的用户访问令牌"访问令牌:"来自Graph API Explorer
    • (此步骤后,地址字符串中不再有大括号)
  • A.8发送此请求(现在按Enter键)

您的浏览器窗口现在显示一个字符串,其中包含字段" access_token"和"到期",由&符号("&")分隔,它不是令牌的一部分。此令牌是一个长期存在的用户访问令牌,将在两个月后过期。

  • A.9使用" access_token"执行步骤2.1和2.2;从步骤A.8

结果是一个页面访问权限,其中包含您在步骤1.4中选择的所有权限,并且永不过期。

祝你好运!

答案 1 :(得分:3)

使用页面访问令牌应该有帮助,因为您正在从页面阅读..

图形api节点:获取我/帐户

me / accounts会为您提供您管理的页面,并使用页面信息词典中的访问令牌。

您应该从我/帐户

获取以下数据
{
  "data": [
    {
      "category": "Product/service",
      "name": "Sample Page",
      "access_token": "{page-access-token}",
      "id": "1234567890",
      "perms": [
        "ADMINISTER",
        "EDIT_PROFILE",
        "CREATE_CONTENT",
        "MODERATE_CONTENT",
        "CREATE_ADS",
        "BASIC_ADMIN"
      ]
    }, 
}

使用page-access-token作为页面管理员从页面访问数据,你将收到数据:)请告诉我这是否有效:)

答案 2 :(得分:-1)

成功授权会向您的应用返回访问令牌,然后您可以使用该令牌对Facebook API执行操作。显示的错误消息表示您没有有效的访问令牌,这意味着您可能没有正确验证应用程序。我会在onFacebookError和onError方法上进行一些记录,以查看问题所在。

在登录时请求权限因此其身份验证错误

许可列表

https://developers.facebook.com/docs/facebook-login/access-tokens/

设置权限参考

https://developers.facebook.com/docs/android/login-with-facebook#permissions