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

Hub*_*ast 6 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}
Run Code Online (Sandbox Code Playgroud)

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

https://graph.facebook.com/141928949155955/posts?access_token={my secret token}
Run Code Online (Sandbox Code Playgroud)

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


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

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

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

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

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


编辑(6月16日):

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

https://graph.facebook.com/me/conversations?access_token={secret token}  
Run Code Online (Sandbox Code Playgroud)

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

Hub*_*ast 12

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

我的问题是我误解了错误消息"主题必须是一个页面".我认为"主题"是指查询字符串中的一部分.但它指的是令牌!像"令牌必须是页面访问令牌"这样的消息可以让我在两年多的时间里找到不必要的搜索周!当你无法定义"主题"是什么时,你如何使用像"主题"这样的术语?

所以这不是查询字符串错误.这是令牌的类型!

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


步骤1

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

  • 1.1转到Graph API Explorer 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"(现在是一个页面访问令牌).每个令牌都会继承您在调用"我/帐户"时使用的用户访问令牌的权限.

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


补充

如果您想要永不过期的页面访问令牌,请执行以下操作:

  • A.1转到https://developers.facebook.com
  • A.2从下拉菜单"应用程序"中选择您要使用的应用程序.
  • A.3单击"App Secret"字段中的"show"(您需要输入您的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} (不要按Enter键!)如果从一个浏览器选项卡切换到另一个浏览器选项卡时此字符串消失,请使用任何文本编辑器组合字符串并稍后将其复制到地址字段中.
  • A.6在此字符串替换中,{app-id}以及{app-secret}仍显示您的Apps数据的浏览器选项卡中的值.
  • A.7替换{short-lived-token}为您在Graph API Explorer中的"访问令牌:"字段中找到的用户访问令牌.
    • (在此步骤之后,地址字符串中不再有大括号)
  • A.8发送此请求(现在按Enter键)

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

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

结果是具有您在步骤1.4中选择的所有权限的页面访问权限,永不过期.

祝好运!


kus*_*ush 5

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

图 api 节点:GET me/accounts

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"
      ]
    }, 
}
Run Code Online (Sandbox Code Playgroud)

使用页面访问令牌作为页面管理员从页面访问数据,您将收到数据:) 让我知道这是否有效:)