操纵从Facebook查询\ API调用收到的数据

时间:2012-03-11 14:38:23

标签: facebook flex facebook-graph-api facebook-fql

我正在玩facebook api,而且有些问题,我使用Multiquerying来获取用户喜欢的所有页面。 所以我拨打一个电话来获取用户喜欢的所有页面,而不是打电话来获取页面的名称。我最终得到了2个列表,一个是page_ids,另一个是page_names:

queries.add("SELECT uid,page_id,created_time FROM page_fan WHEREuid="+userId,"page_likes");
queries.add("SELECT name,page_url FROM page WHERE page_id IN (SELECT page_id FROM #page_likes)","pagedata");

有没有一种方法,而不是显示2个列表,生病得到一个列表,其中显示页面名称下的页面名称?这样的事情:  “123214211” - > “coca”,“123213” - >“pepsi”

这比仅仅2个列表更有用,你需要在它们之间进行连接。 让我说我需要得到照片的评论,所以生病有一个查询照片,第二次查询评论。但我怎么知道哪些评论适合哪张照片?

提前致谢

1 个答案:

答案 0 :(得分:1)

我没有亲自使用Facebook的API,但是从这里看过来就是我能说的。它们不允许在单个查询中标识多个表/实体,并且从我可以看到的意味着无法在查询中使用任何类型的JOIN,这基本上就是您所要求的。几乎所有关系数据库系统都能够进行JOIN但我认为Facebook可能选择不允许此选项确保使用其API的第三方不会创建过于复杂的SQL,这会使他们的服务器有更多的时间来处理。我认为你只需编写一个AS3方法来处理两个列表的组合,我相信这可以用一般的方式编写,它可以在不修改方法的情况下重复使用。我的建议是创建一个具有两个属性的“包装类”,一个具有声明类型的Object,另一个类型为某种类型的Collection。我建议如下(伪代码,尽可能接近现实而不实际测试:)):

public class JoinWrapper
{
    public var originalObject:Object;
    public var childrenCollection:ArrayCollection = new ArrayCollection();
}

public class JoinUtil
{

    public static function joinThings(query1Results:ArrayCollection, query1JoinProperty:String, query2Results:ArrayCollection, query2JoinProperty:String):ArrayCollection
    {
        var tempCollection:ArrayCollection = new ArrayCollection();
        for each(var object:Object in query1Results)
        {
            var jw:JoinWrapper = new JoinWrapper();
            jw.originalObject = object;
            for each(var anotherObject:Object in query2Results)
            {
                if(object[query1JoinProperty]==anotherObject[query2JoinProperty])
                    jw.childrenCollection.addItem(anotherObject);
            }
            tempCollection.addItem(jw);
        }
        return tempCollection
    }
}