我正在使用 Facebook graph api 几天。我正在尝试提取用户的状态和转发的信息(如果有)。我可以使用fields=id,name,statuses查询轻松找到用户的状态。但我找不到任何关于重新分享的信息。我找到了一个 status sharedposts字段。但无法理解它实际上做了什么。谁能告诉我如何收集有关转发的信息(转发者、转发时间、转发位置)。我使用了 user_status 访问令牌。
3 回答
sharedposts字段适用于状态 ID 。例如,状态 id来自已被分享 4 次的TheKrazyCouponLady10151794781777494
的状态更新。这个查询:
/10151794781777494?fields=sharedposts
将返回有关共享它的用户的所有信息。如果您想将返回的字段限制为共享者的名称和 ID,以及共享的时间和位置,您可以这样做:
/10151794781777494?fields=sharedposts.fields(from,created_time,place)
虽然我预计大部分时间不会有任何位置数据。
要首先找到状态 ID,您只需查询特定用户的状态字段。再次以TheKrazyCouponLady (uid 255919387493) 为例:
/255919387493?fields=statuses
要仅获取 ID:
/255919387493?fields=statuses.fields(id)
作为替代方案,您可能需要考虑查询用户的帖子。使用posts的优势在于,您可以取回该查询中每个帖子的共享计数。
/255919387493?fields=posts.fields(id,shares)
如果帖子的共享计数为零,那么显然不需要运行另一个查询来检索共享该帖子的用户。
使用帖子的缺点是帖子 ID 与状态 ID 略有不同。您会看到如下所示的 id:
255919387493_10151794781777494
该字符串的前半部分是帖子所有者的用户 ID。后半部分是实际的状态 id。如果要查询帖子的sharedposts字段,首先必须提取后半部分(状态 ID)并将其用于查询。
话虽如此,我突然想到,如果将statuses查询和sharedposts查询链接在一起,您实际上可以一次检索到您需要的所有信息。例如,像这样:
/255919387493?fields=statuses.fields(id,message,sharedposts.fields(from,created_time,place))
这将返回来自该用户的每个状态的状态 ID 和消息文本,以及用户详细信息,为每个共享这些状态的人创建时间和位置。
但是,即使使用分页,这也可能是一个相当慢的查询,所以我不确定这是否是个好主意。不过值得考虑。
根据新版本的 API 2.1 和来自这里的文档 https://developers.facebook.com/docs/graph-api/reference/v2.1/post 有一个名为“sharedposts”的新优势
如此处所述https://developers.facebook.com/docs/graph-api/reference/v2.1/object/sharedposts
此参考描述了多个 Graph API 节点共有的 /sharedposts 边。每个节点的结构和操作都是相同的。
此边缘表示原始对象在 Facebook 上共享的任何帖子。
如果帖子类型是照片 sharedposts 将返回空,因为对象与 postID 不同
/317380948302131_847979698575584 => Object : 847979378575616
/317380948302131_847979698575584/sharedposts?fields=from,via
ObjectID 将按预期工作
/847979378575616//sharedposts?fields=from,via
如果对象是 shared_post 的唯一问题,它也会显示来自原始帖子对象的所有共享,并且不存在 via 节点。只是在一段时间内挣扎,为什么 APi 有时只返回共享帖子