使用Graph API计算Facebook“喜欢”

时间:2010-10-23 06:28:11

标签: c# facebook-graph-api

Facebook修复了图谱API中的/likes/likes现在返回喜欢图表中特定对象的用户的完整列表(照片,相册等)。在之前,它只返回3-5个用户。

我的问题是,如果不解析整个JSON并获得元素数,你如何计算“喜欢”的总数?我只对“喜欢”计数感兴趣;我对给予喜欢的用户不感兴趣。

将整个JSON数据集计算起来似乎有点贵。

EG:https://graph.facebook.com/161820597180936/likes

这张照片有1000多个喜欢。

2 个答案:

答案 0 :(得分:2)

看到字符串是JSON,为什么不将它转换为标准的.net对象,并在它创建的数组上使用.Count。然后将此信息缓存15分钟或更长时间(取决于您想要信息的陈旧情况)。

上面的方法非常繁重,因为你基本上要搜索一个未知次数的字符串,返回索引,将它与int进行比较,添加另一个索引等等。并且上面的C#不起作用(假设它是您正在演示的C#)。

使用类似的东西:

public static T FromJson<T>(this string s)
{
    var ser = new System.Web.Script.Serialization.JavaScriptSerializer.JavaScriptSerializer();
    return ser.Deserialize<T>(s);
}

此方法是一种扩展方法,它采用格式正确的JSON字符串并将其转换为对象T,例如。

    var result = // call facebook here and get your response string
    List<FacebookLikes> likes = result.FromJson <List<FacebookLikes>>();
    Response.Write(likes.Count.ToString());

    // now cache the likes somewhere, and get from cache next time.

我不确定这个性能,没有做过任何测试,但对我来说它看起来更整洁,更具可读性。当你在缓存数据时,我会看到以前的方法可读性。

答案 1 :(得分:1)

为什么解析整个数据集会很昂贵?这应该花费几毫秒:

public static int CountLikes(string dataSet)
{
    int i = 0;
    int j = 0;
    while ((i = dataSet.IndexOf('"id":', i)) != -1)
    {
        i += 5;
        j++;
    }
    return j;
}

您还可以附加参数limit =#,例如:

https://graph.facebook.com/161820597180936/likes?limit=1000