我正在为我工作的公司实施一个伪哈希标记系统,用他们的客户的Facebook照片。客户可以将照片上传到页面,页面管理员可以使用产品的主题标签对其进行标记。
我要做的是从页面中获取评论中有特定标记的所有照片(例如,从公司页面获取所有照片,评论仅包含'#bluepants')。
我正在努力确保Facebook API处理繁重的工作(我们会缓存结果),所以我想使用FQL或Graphs API,但我似乎无法让它工作(我的在依赖ORM这么久之后,SQL非常生疏。我更喜欢它输出尽可能多的结果,但我不确定FB是否允许你一次超过25个。
这将在sinatra网站上实现(我目前正在玩考拉宝石,如果我可以使用它来查询奖励积分)
有人能给我一些指导吗?
谢谢!
答案 0 :(得分:2)
我在FQL / PHP中使用过这样的东西。这是我的多重查询。
{'activity':
"SELECT post_id, created_time FROM stream WHERE source_id = PAGE_ID AND
attachment.fb_object_type = 'photo' AND created_time > 1338834720
AND comments.count > 0 LIMIT 0, 500",
'commented':
"SELECT post_id, text, fromid FROM comment WHERE post_id IN
(SELECT post_id FROM #activity) AND AND (strpos(upper(text), '#HASHTAG') >= 0",
'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 DESC",
'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)"
}
要解决这个问题:
#activity
获取在广告系列的开始日期之后创建的所有流对象,这些对象是照片并具有非零评论计数。使用LIMIT 500似乎返回最大帖子数。值越高或越低,返回的次数越少。#commented
查找其中一条评论文字中包含#HASHTAG
的帖子。注意,我不是在寻找#
,这是FQL中的保留字符。使用它可能会导致您的问题。 #accepted
获取#commented中找到的帖子的完整详细信息。#images
获取这些帖子中图片的所有详细信息。我在我的todos上有重构,使用object_id
代替pid
并尝试使用新的real_width
规范来简化布局。#users
和#pages
获取最初发布该项目的演员的详细信息。我现在知道我可以使用profile
表在一个查询中得到它。#places
获取地理标记帖子的位置详细信息。您可以在此处查看此操作:http://getwellgabby.org/show-us-a-sign