jsonpath:混合两条路径

时间:2014-09-30 11:29:46

标签: facebook-graph-api jsonpath

我正在查询Facebook上的全尺寸个人资料图片,用户评论已发布的图片或者喜欢/ me用户发布的照片​​,使用图形api。 我想要:

  • 在一个查询中执行此操作,我无法从足够深的数据中获取数据。
  • 或最小化子查询的数量

在一个查询中:这不起作用(它没有提供评论的用户的详细信息):

me/photos/uploaded?fields=from,images,comments.picture,likes.picture&limit=500

并指定尺寸会引发错误:

me/photos/uploaded?fields=from,images,comments.picture,likes.picture.type(large)&limit=500

尽管我没有在文档中找到任何明确的内容,但您可以指定的深度似乎有限。 (这是如此简洁,几乎不是一个大惊喜)

所以,解析具有依赖关系的批处理查询

myphotos => me/photos/uploaded?fields=created_time,name,id,from,comments.summary(1).limit(100),images,likes.summary(1).limit(100)&limit=500 
userinfo_photocomments => ?ids={result=myphotos:$.data.*.comments.data.*.from.id}&fields=id,name,updated_time,picture.redirect(0).type(large).height(2000).width(2000)
userinfo_photolikes => ?ids={result=myphotos:$.data.*.likes.data.*.id}&fields=id,name,updated_time,picture.redirect(0).type(large).height(2000).width(2000)

尽管这样可行,但我无法在一个或最多2个查询中找到这样做的事实让我感到很恼火,特别是因为最后2个子查询的结果很可能会重叠。

我想找到一种混合jsonpath锚点的方法,这样我就可以组合最后两个查询。 问题似乎是评论员和喜欢者的用户ID在树中的不同深度。

我会感激任何见解。

1 个答案:

答案 0 :(得分:1)

我认为你应该能够使用第一个查询的结果两次,结果只有两个查询。

我测试了?ids=端点,如果它过滤掉重复的user_id,如下所示:

GET /?ids={user_id1},{user_id2},{user_id1}

导致只返回两个不同的user_ids

因此,这会产生以下批处理查询:

curl \
   -F 'access_token={access_token}' \
   -F 'batch=[{ "method":"GET","name":"myphotos","relative_url":"me/photos/uploaded?fields=created_time,name,id,from,comments.summary(1).limit(100),images,likes.summary(1).limit(100)&limit=500",},{"method":"GET","relative_url":"?ids={result=myphotos:$.data.*.comments.data.*.from.id},{result=myphotos:$.data.*.likes.data.*.id}&fields=id,name,updated_time,picture.redirect(0).type(large).height(2000).width(2000)"}]' \
   https://graph.facebook.com/

只需将{access_token}替换为实际的访问令牌即可对此进行测试。

基本上,我只是将user_id列表连接起来评论并喜欢

GET ?ids={result=myphotos:$.data.*.comments.data.*.from.id},{result=myphotos:$.data.*.likes.data.*.id}&fields=...