0

我正在为一个非营利组织开展宣传活动。我们要求人们将他们举着牌子的照片上传到非营利组织的 Facebook 页面。由于它们没有在时间轴上清楚地显示,我们希望抓取这些照片并将它们显示在非营利组织网站的页面上。

获取所有照片很容易。我正在使用以下 FQL 来获取它们:

SELECT post_id, actor_id, message, attachment, place, created_time 
  FROM stream WHERE source_id = PAGE_ID and source_id <> actor_id 
      AND attachment.media <> '' AND created_time > 1338834720 
  LIMIT 50

问题是,人们上传到网站的其他照片我们不希望在此图库中出现。我想做的是进一步过滤这个结果集,这样我们只得到页面或页面管理员喜欢或评论过的照片。这就是我卡住的地方。

当我将其转换为多查询并将上述查询的结果输入:

SELECT post_id FROM like WHERE user_id = PAGE_ID AND post_id IN (SELECT post_id FROM #query1)

我收到一个 OAuth 错误,我只能像登录用户一样查询。即使在使用 PHP SDK 作为应用程序进行身份验证时也会发生这种情况。

我曾尝试让人们在发布时在他们的消息中添加一个文本字符串,但这并没有发生。有些人将这个字符串添加到非营利组织不想要的照片中,而非营利组织眼中最好的照片中没有那个字符串。

谢谢你的帮助。

4

2 回答 2

1

好的,回答了我自己的问题。

我通过 PHP SDK 使用这个 FQL 多查询来获取精选的照片组。我决定发表评论让我的任何页面管理员:

  {
  'activity': 
     "SELECT post_id FROM stream WHERE source_id = PAGE_ID 
      AND attachment.fb_object_type = 'photo' AND created_time > 1338834720 
      AND comments.count > 0 LIMIT 100",
  'commented':
     "SELECT post_id, text, fromid FROM comment 
      WHERE post_id IN (SELECT post_id FROM #activity) 
      AND fromid IN (SELECT uid FROM page_admin WHERE page_id = PAGE_ID)", 
   'accepted':
      "SELECT post_id, actor_id, message, attachment, place, created_time, likes 
       FROM stream WHERE post_id IN (SELECT post_id FROM #commented) 
       ORDER BY likes.count", 
    'images': 
      "SELECT pid, src, src_big, src_small, src_width, src_height FROM photo 
       WHERE pid IN (SELECT attachment.media.photo.pid FROM #accepted)",
    'users':
       "SELECT name, uid, current_location, locale FROM user 
        WHERE uid IN (SELECT actor_id FROM #accepted)",
     'pages':
       "SELECT name, page_id FROM page 
        WHERE page_id IN (SELECT actor_id FROM #accepted)",
     'places': 
       "SELECT name, page_id, description, display_subtext, latitude, longitude 
        FROM place WHERE page_id IN (SELECT place FROM #accepted)"
     }

现场网站在这里: http: //getwellgabby.org/show-us-a-sign。后端有很多 PHP 来组合结果并使用ThickBox 进行照片显示。

于 2012-06-07T21:46:03.523 回答
0

Try doing your queries as Batch Requests. You can „name” queries in there to reference their results in other queries, and you can specify different access tokens for each individual operation.

于 2012-06-07T21:48:47.440 回答